pax_global_header00006660000000000000000000000064147651331500014517gustar00rootroot0000000000000052 comment=abf1376487544fd6059d2c72e099a0b4b621206c pyenv-2.5.4/000077500000000000000000000000001476513315000126705ustar00rootroot00000000000000pyenv-2.5.4/.agignore000066400000000000000000000000231476513315000144570ustar00rootroot00000000000000./versions ./cache pyenv-2.5.4/.dockerignore000066400000000000000000000000461476513315000153440ustar00rootroot00000000000000.git/ .python-version .vscode/ .idea/ pyenv-2.5.4/.editorconfig000066400000000000000000000003451476513315000153470ustar00rootroot00000000000000# Editor configuration, see https://editorconfig.org root = true [*] end_of_line = lf charset = utf-8 # Makefiles always use tabs for indentation [Makefile] indent_style = tab indent_size = unset # Allow user-defined tab width pyenv-2.5.4/.github/000077500000000000000000000000001476513315000142305ustar00rootroot00000000000000pyenv-2.5.4/.github/FUNDING.yml000066400000000000000000000013251476513315000160460ustar00rootroot00000000000000# These are supported funding model platforms github: [pyenv] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: pyenv # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] pyenv-2.5.4/.github/ISSUE_TEMPLATE.md000066400000000000000000000044001476513315000167330ustar00rootroot00000000000000Too many issues will kill our team's development velocity, drastically. Make sure you have checked all steps below. ### Prerequisite * [ ] Make sure your problem is not listed in [the common build problems](https://github.com/pyenv/pyenv/wiki/Common-build-problems). * [ ] Make sure no duplicated issue has already been reported in [the pyenv issues](https://github.com/pyenv/pyenv/issues). You should look for closed issues, too. * [ ] Make sure you are not asking us to help solving your specific issue. * GitHub issues is opened mainly for development purposes. If you want to ask someone to help solving your problem, go to some community site like [Gitter](https://gitter.im/yyuu/pyenv), [StackOverflow](https://stackoverflow.com/questions/tagged/pyenv), etc. * [ ] Make sure your problem is not derived from packaging (e.g. [Homebrew](https://brew.sh)). * Please refer to the package documentation for the installation issues, etc. * [ ] Make sure your problem is not derived from plugins. * This repository is maintaining `pyenv` and the default `python-build` plugin only. Please refrain from reporting issues of other plugins here. ### Description - [ ] Platform information (e.g. Ubuntu Linux 16.04): - [ ] OS architecture (e.g. amd64): - [ ] pyenv version: - [ ] Python version: - [ ] C Compiler information (e.g. gcc 7.3): - [ ] Please attach the debug trace of the failing command as a gist: * Run `env PYENV_DEBUG=1 2>&1 | tee trace.log` and attach `trace.log`. E.g. if you have a problem with installing Python, run `env PYENV_DEBUG=1 pyenv install -v 2>&1 | tee trace.log` (note the `-v` option to `pyenv install`). - [ ] If you have a problem with installing Python, please also attach `config.log` from the build directory * The build directory is reported after the "BUILD FAILED" message and is usually under `/tmp`. - [ ] If the build succeeds but the problem is still with the build process (e.g. the resulting Python is missing a feature), please attach * the debug trace from reinstalling the faulty version with `env PYENV_DEBUG=1 pyenv install -f -k -v 2>&1 | tee trace.log` * `config.log` from the build directory. When using `pyenv install` with `-k` as per above, the build directory will be under `$PYENV_ROOT/sources`. pyenv-2.5.4/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000017621476513315000200370ustar00rootroot00000000000000Make sure you have checked all steps below. ### Prerequisite * [ ] Please consider implementing the feature as a hook script or plugin as a first step. * pyenv has some powerful support for plugins and hook scripts. Please refer to [Authoring plugins](https://github.com/pyenv/pyenv/wiki/Authoring-plugins) for details and try to implement it as a plugin if possible. * [ ] Please consider contributing the patch upstream to [rbenv](https://github.com/rbenv/rbenv), since we have borrowed most of the code from that project. * We occasionally import the changes from rbenv. In general, you can expect changes made in rbenv will be imported to pyenv too, eventually. * Generally speaking, we prefer not to make changes in the core in order to keep compatibility with rbenv. * [ ] My PR addresses the following pyenv issue (if any) - Closes https://github.com/pyenv/pyenv/issues/XXXX ### Description - [ ] Here are some details about my PR ### Tests - [ ] My PR adds the following unit tests (if any) pyenv-2.5.4/.github/dependabot.yml000066400000000000000000000002731476513315000170620ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "monthly" groups: github-actions: patterns: - "*" pyenv-2.5.4/.github/workflows/000077500000000000000000000000001476513315000162655ustar00rootroot00000000000000pyenv-2.5.4/.github/workflows/macos_build.yml000066400000000000000000000025241476513315000212740ustar00rootroot00000000000000name: macos_build on: [pull_request, push] permissions: contents: read # to fetch code (actions/checkout) jobs: macos_build: strategy: fail-fast: false matrix: python-version: - "3.9" - "3.10" - "3.11" - "3.12" - "3.13" runs-on: macos-14 steps: - uses: actions/checkout@v4 # Normally, we would use the superbly maintained... # - uses: actions/setup-python@v2 # with: # python-version: ${{ matrix.python-version }} # ... but in the repo, we want to test pyenv builds on macOS - run: | brew install openssl readline sqlite3 xz zlib # https://github.com/pyenv/pyenv#installation - run: pwd - env: PYENV_ROOT: /Users/runner/work/pyenv/pyenv run: | echo $PYENV_ROOT echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH bin/pyenv --debug install ${{ matrix.python-version }} bin/pyenv global ${{ matrix.python-version }} bin/pyenv rehash - run: python --version - run: python -m pip --version - shell: python # Prove that actual Python == expected Python env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: import os, sys ; assert sys.version.startswith(os.getenv("EXPECTED_PYTHON")) pyenv-2.5.4/.github/workflows/modified_scripts_build.yml000066400000000000000000000257251476513315000235310ustar00rootroot00000000000000name: modified_scripts on: [pull_request] jobs: discover_modified_scripts: runs-on: ubuntu-latest outputs: versions: ${{steps.modified-versions.outputs.versions}} steps: - uses: actions/checkout@v4 - run: git fetch origin "$GITHUB_BASE_REF" - shell: bash run: > versions=$(git diff "origin/$GITHUB_BASE_REF" --name-only -z | perl -ne 'BEGIN {$\="\n";$/="\0";} chomp; if (/^plugins\/python-build\/share\/python-build\/(?:([^\/]+)|patches\/([^\/]+)\/.*)$/ and -e $& ) { print $1.$2; }' \ | sort -u); EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64); echo "versions<<$EOF" >> $GITHUB_ENV; echo "$versions" >> $GITHUB_ENV; echo "$EOF" >> $GITHUB_ENV; versions_cpython_only=$(grep -Ee '^[[:digit:]]' <<<"$version") EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64); echo "versions_cpython_only<<$EOF" >> $GITHUB_ENV; echo $versions_cpython_only >> $GITHUB_ENV; echo "$EOF" >> $GITHUB_ENV; - id: modified-versions run: | echo "versions=`echo "${{ env.versions }}" | jq -R . | jq -sc .`" >> $GITHUB_OUTPUT echo "versions_cpython_only=`echo "${{ env.versions_cpython_only }}" | jq -R . | jq -sc .`" >> $GITHUB_OUTPUT macos_build: needs: discover_modified_scripts if: needs.discover_modified_scripts.outputs.versions != '[""]' strategy: fail-fast: false matrix: python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions)}} os: ["macos-13", "macos-14"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - run: | #envvars export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | #prerequisites brew install openssl openssl@1.1 readline sqlite3 xz zlib if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then export PYENV_BOOTSTRAP_VERSION=pypy2.7-7 echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV pyenv install $PYENV_BOOTSTRAP_VERSION fi - run: | #build pyenv --debug install ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: | #print version if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then python -c 'import sys; print(sys.version)' else python --version python -m pip --version fi # Micropython doesn't support sys.executable, os.path, older versions even os - env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: | #check if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then [[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1 python -c 'import sys; assert sys.implementation.name == "micropython"' else python -c 'if True: import os, sys, os.path correct_dir = os.path.join( os.environ["PYENV_ROOT"], "versions", os.environ["EXPECTED_PYTHON"], "bin") assert os.path.dirname(sys.executable) == correct_dir' fi # bundled executables in some Anaconda releases cause the post-run step to hang in MacOS - run: | pyenv global system rm -f "$(pyenv root)"/shims/* macos_build_bundled_dependencies: needs: discover_modified_scripts if: needs.discover_modified_scripts.outputs.versions_cpython_only != '[""]' strategy: fail-fast: false matrix: python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions_cpython_only)}} os: ["macos-13", "macos-14"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - run: | #envvars export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | #prerequisites brew install sqlite3 xz zlib "$GITHUB_WORKSPACE/.github/workflows/scripts/brew-uninstall-cascade.sh" openssl@3 openssl@1.1 readline if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then export PYENV_BOOTSTRAP_VERSION=pypy2.7-7 echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV pyenv install $PYENV_BOOTSTRAP_VERSION fi - run: | #build pyenv --debug install ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: | #print version if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then python -c 'import sys; print(sys.version)' else python --version python -m pip --version fi # Micropython doesn't support sys.executable, os.path, older versions even os - env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: | #check if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then [[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1 python -c 'import sys; assert sys.implementation.name == "micropython"' else python -c 'if True: import os, sys, os.path correct_dir = os.path.join( os.environ["PYENV_ROOT"], "versions", os.environ["EXPECTED_PYTHON"], "bin") assert os.path.dirname(sys.executable) == correct_dir' fi # bundled executables in some Anaconda releases cause the post-run step to hang in MacOS - run: | pyenv global system rm -f "$(pyenv root)"/shims/* ubuntu_build: needs: discover_modified_scripts if: needs.discover_modified_scripts.outputs.versions != '[""]' strategy: fail-fast: false matrix: python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions)}} os: ["ubuntu-22.04", "ubuntu-24.04"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - run: | #envvars export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | #prerequisites sudo apt-get update -q; sudo apt-get install -yq make build-essential \ libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then export PYENV_BOOTSTRAP_VERSION=pypy2.7-7 echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV pyenv install $PYENV_BOOTSTRAP_VERSION fi - run: | #build pyenv install -v ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: | #print version if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then python -c 'import sys; print(sys.version)' else python --version python -m pip --version fi # Micropython doesn't support sys.executable, os.path, older versions even os - env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: | #check if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then [[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1 python -c 'import sys; assert sys.implementation.name == "micropython"' else python -c 'if True: import os, sys, os.path correct_dir = os.path.join( os.environ["PYENV_ROOT"], "versions", os.environ["EXPECTED_PYTHON"], "bin") assert os.path.dirname(sys.executable) == correct_dir' fi ubuntu_build_tar_gz: needs: discover_modified_scripts if: needs.discover_modified_scripts.outputs.versions_cpython_only != '[""]' strategy: fail-fast: false matrix: python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions_cpython_only)}} os: ["ubuntu-latest"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - run: | #envvars export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH echo "_PYTHON_BUILD_FORCE_SKIP_XZ=1" >> $GITHUB_PATH - run: | #prerequisites sudo apt-get update -q; sudo apt-get install -yq make build-essential \ libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then export PYENV_BOOTSTRAP_VERSION=pypy2.7-7 echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV pyenv install $PYENV_BOOTSTRAP_VERSION fi - run: | #build pyenv install -v ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: | #print version if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then python -c 'import sys; print(sys.version)' else python --version python -m pip --version fi # Micropython doesn't support sys.executable, os.path, older versions even os - env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: | #check if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then [[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1 python -c 'import sys; assert sys.implementation.name == "micropython"' else python -c 'if True: import os, sys, os.path correct_dir = os.path.join( os.environ["PYENV_ROOT"], "versions", os.environ["EXPECTED_PYTHON"], "bin") assert os.path.dirname(sys.executable) == correct_dir' fi pyenv-2.5.4/.github/workflows/no-response.yml000066400000000000000000000017701476513315000212650ustar00rootroot00000000000000name: No Response # Both `issue_comment` and `scheduled` event types are required for this Action # to work properly. on: issue_comment: types: [created] schedule: # Schedule for ten minutes after the hour, every hour - cron: '10 * * * *' permissions: {} jobs: noResponse: permissions: issues: write # to update issues (lee-dohm/no-response) runs-on: ubuntu-latest steps: - uses: lee-dohm/no-response@v0.5.0 with: token: ${{ github.token }} daysUntilClose: 30 responseRequiredLabel: need-feedback closeComment: > This issue has been automatically closed because there has been no response to our request for more information from the original author. With only the information that is currently in the issue, we don't have enough information to take action. Please reach out if you have or find the answers we need so that we can investigate further. pyenv-2.5.4/.github/workflows/pyenv_tests.yml000066400000000000000000000031251476513315000213740ustar00rootroot00000000000000name: pyenv_tests on: [pull_request, push] permissions: contents: read # to fetch code (actions/checkout) jobs: pyenv_tests: strategy: fail-fast: false matrix: os: - ubuntu-24.04 - ubuntu-22.04 - macos-14 - macos-13 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 # Normally, we would use the superbly maintained... # - uses: actions/setup-python@v2 # with: # python-version: ${{ matrix.python-version }} # ... but in the repo, we want to test pyenv builds on Ubuntu # - run: | # sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ # libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ # xz-utils tk-dev libffi-dev liblzma-dev python-openssl git # https://github.com/pyenv/pyenv#installation - run: | if test "$RUNNER_OS" == "macOS"; then brew install coreutils fish elif [[ $(lsb_release -sr | awk -F. '{print $1}') -ge 20 ]]; then # Ubuntu 18 has fish 2 which lacks many features that facilitate testing sudo apt install fish -yq fi - run: pwd - env: PYENV_ROOT: /home/runner/work/pyenv/pyenv run: | echo $PYENV_ROOT echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | make test - env: PYENV_NATIVE_EXT: 1 run: | (cd src; ./configure; make) bats/bin/bats test/{pyenv,hooks,versions}.batspyenv-2.5.4/.github/workflows/scripts/000077500000000000000000000000001476513315000177545ustar00rootroot00000000000000pyenv-2.5.4/.github/workflows/scripts/brew-uninstall-cascade.sh000077500000000000000000000005761476513315000246520ustar00rootroot00000000000000#!/bin/bash declare -a packages rdepends packages=("$@") # have to try one by one, otherwise `brew uses` would only print # packages that require them all rather than any of them for package in "${packages[@]}"; do rdepends+=($(brew uses --installed --include-build --include-test --include-optional --recursive "$package")) done brew uninstall "${packages[@]}" "${rdepends[@]}"pyenv-2.5.4/.github/workflows/ubuntu_build.yml000066400000000000000000000030371476513315000215140ustar00rootroot00000000000000name: ubuntu_build on: [pull_request, push] permissions: contents: read # to fetch code (actions/checkout) jobs: ubuntu_build: strategy: fail-fast: false matrix: python-version: - "3.9" - "3.10" - "3.11" - "3.12" - "3.13" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # Normally, we would use the superbly maintained... # - uses: actions/setup-python@v2 # with: # python-version: ${{ matrix.python-version }} # ... but in the repo, we want to test pyenv builds on Ubuntu - run: | sudo apt-get update -q; sudo apt install -yq make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev # https://github.com/pyenv/pyenv#installation - run: pwd - env: PYENV_ROOT: /home/runner/work/pyenv/pyenv run: | echo $PYENV_ROOT echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH bin/pyenv --debug install ${{ matrix.python-version }} bin/pyenv global ${{ matrix.python-version }} bin/pyenv rehash - run: python --version - run: python -m pip --version - shell: python # Prove that actual Python == expected Python env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: import os, sys ; assert sys.version.startswith(os.getenv("EXPECTED_PYTHON")) pyenv-2.5.4/.gitignore000066400000000000000000000001671476513315000146640ustar00rootroot00000000000000/shims /version /versions /sources /cache /libexec/*.dylib /src/Makefile /src/*.o /bats/ /default-packages .idea *.un~ pyenv-2.5.4/.vimrc000066400000000000000000000000431476513315000140060ustar00rootroot00000000000000set wildignore+=versions/*,cache/* pyenv-2.5.4/CHANGELOG.md000066400000000000000000002036451476513315000145130ustar00rootroot00000000000000# Version History ## Release v2.5.4 * Add anaconda3-2025.1.1-2 by @binbjz in https://github.com/pyenv/pyenv/pull/3198 * Add PyPy v7.3.19 by @jsirois in https://github.com/pyenv/pyenv/pull/3205 * Add CPython 3.14.0a6 by @nedbat in https://github.com/pyenv/pyenv/pull/3213 ## Release v2.5.3 * Add PyPy v7.3.18 by @dand-oss in https://github.com/pyenv/pyenv/pull/3184 * Add Miniconda3 25.1.1-0 by @binbjz in https://github.com/pyenv/pyenv/pull/3190 * Add miniforge3-25.1.1-0, miniforge3-24.11.3-0 by @native-api in https://github.com/pyenv/pyenv/pull/3191 * Add CPython 3.14.0a5 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3194 * Add Miniconda3 25.1.1-1 by @binbjz in https://github.com/pyenv/pyenv/pull/3192 * Update hashes for Python 3.14.0a5 tarballs by @jsirois in https://github.com/pyenv/pyenv/pull/3196 * rehash: Do not execute conda-specific code if conda is not installed by @ChristianFredrikJohnsen in https://github.com/pyenv/pyenv/pull/3151 ## Release v2.5.2 * Fix OpenSSL version parsing in python-build script by @threadflow in https://github.com/pyenv/pyenv/pull/3181 * Add GraalPy 24.1.2 by @msimacek in https://github.com/pyenv/pyenv/pull/3176 * Add CPython 3.12.9 and 3.13.2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3183 ## Release v2.5.1 * CI: use Ubuntu 24.04; use ubuntu-latest for the ubuntu_build check by @native-api in https://github.com/pyenv/pyenv/pull/3144 * Fix: mistake in configuration hints in `pyenv init` and manpage by @ChristianFredrikJohnsen in https://github.com/pyenv/pyenv/pull/3145 * README: Add recommended curl arguments to suggested installer invocation by @JayBazuzi in https://github.com/pyenv/pyenv/pull/3155 * Add miniforge3-24.11.2-0, miniforge3-24.11.2-1 by @native-api in https://github.com/pyenv/pyenv/pull/3163 * Fix "Unsupported options" error building bundled OpenSSL <3.2.0 by @native-api in https://github.com/pyenv/pyenv/pull/3164 * Add CPython 3.14.0a4 by @nedbat in https://github.com/pyenv/pyenv/pull/3168 ## Release v2.5.0 * `pyenv init -` performance improvements; recommend using `pyenv init - ` by @ChristianFredrikJohnsen in https://github.com/pyenv/pyenv/pull/3136 * Add miniconda3-24.11.1-0 by @binbjz in https://github.com/pyenv/pyenv/pull/3138 * Add miniconda3-24.3.0-0 by @native-api in https://github.com/pyenv/pyenv/pull/3139 * CI: only run macos_build_bundled_dependencies and ubuntu_build_tar_gz for CPython by @native-api in https://github.com/pyenv/pyenv/pull/3141 * Add miniforge3 and mambaforge3 24.1.2-0, 24.3.0-0, 24.5.0-0, 24.7.1-0, 24.7.1-1, 24.7.1-2, 24.9.0-0, 24.9.2-0, 24.11.0-0, 24.11.0-1 by @native-api in https://github.com/pyenv/pyenv/pull/3142 * Skip broken miniforge3/mambaforge3 22.11.0-0, 22.11.0-1, 22.11.0-2 in the generation script by @native-api in https://github.com/pyenv/pyenv/pull/3143 ## Release v2.4.23 * README: explain using multiple versions by @Finkregh in https://github.com/pyenv/pyenv/pull/3126 * Support PACKAGE_CPPFLAGS and PACKAGE_LDFLAGS by @native-api in https://github.com/pyenv/pyenv/pull/3130 * Adjust suggested shell startup code to support Pyenv with Pyenv-Win in WSL by @native-api in https://github.com/pyenv/pyenv/pull/3132 * Support nonexistent versions being present and set in a local .python-version by @native-api in https://github.com/pyenv/pyenv/pull/3134 * Add CPython 3.14.0a3 by @nedbat in https://github.com/pyenv/pyenv/pull/3135 ## Release v2.4.22 * Speed up building bundled OpenSSL by @native-api in https://github.com/pyenv/pyenv/pull/3124 * CI: add building modified scripts with bundled MacOS dependencies by @native-api in https://github.com/pyenv/pyenv/pull/3123 * CL: + test modified scripts with tar.gz source by @native-api in https://github.com/pyenv/pyenv/pull/3125 * Fix 404 for openssl-3.4.0 release in build 3.13.1 by @dlamblin in https://github.com/pyenv/pyenv/pull/3122 ## Release v2.4.21 * Add CPython 3.13.1t by @makukha in https://github.com/pyenv/pyenv/pull/3120 * Prefer tcl-tk@8 from Homebrew due to release of Tcl/Tk 9 with which only 3.12+ are compatible by @native-api in https://github.com/pyenv/pyenv/pull/3118 ## Release v2.4.20 * README: Fix Markdown in "Notes about python releases" by @noelleleigh in https://github.com/pyenv/pyenv/pull/3112 * README: correct link to shell setup instructions by @shortcuts in https://github.com/pyenv/pyenv/pull/3113 * Add CPython 3.9.21, 3.10.16, 3.11.11, 3.12.8 and 3.13.1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3117 ## Release v2.4.19 * Add CPython 3.14.0a2 by @nedbat in https://github.com/pyenv/pyenv/pull/3110 * Add quick start section and gif demo to accompany it. by @madhu-GG in https://github.com/pyenv/pyenv/pull/3044 ## Release v2.4.18 * Add miniforge3-24.9.2-0 by @goerz in https://github.com/pyenv/pyenv/pull/3106 ## Release v2.4.17 * Add miniconda3-24.9.2-0 by @binbjz in https://github.com/pyenv/pyenv/pull/3096 * Add Anaconda3-2024.10-1 by @binbjz in https://github.com/pyenv/pyenv/pull/3097 ## Release v2.4.16 * Add GraalPy 24.1.1 by @msimacek in https://github.com/pyenv/pyenv/pull/3092 * Add CPython 3.14.0a1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3093 ## Release v2.4.15 * CI: replace set-output with GITHUB_OUTPUT by @tuzi3040 in https://github.com/pyenv/pyenv/pull/3079 * Make uninstall yes/no prompt consistent with others by @dpoznik in https://github.com/pyenv/pyenv/pull/3080 * Add CPython 3.13.0 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3081 * Avoid shadowing of virtualenvs with the name starting with "python-" by @aarbouin in https://github.com/pyenv/pyenv/pull/3086 * Support free-threaded CPython flavor in prefix resolution by @native-api in https://github.com/pyenv/pyenv/pull/3090 ## Release v2.4.14 * Add CPython 3.12.7 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3078 * Add CPython 3.13.0rc3 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3077 ## Release v2.4.13 * docs: Use `--verbose` with performance CPython build instructions by @caerulescens in https://github.com/pyenv/pyenv/pull/3053 * Fix latest version resolution when using `python-` prefix by @edmorley in https://github.com/pyenv/pyenv/pull/3056 * Fix tgz checksum for 3.9.20; fallback OpenSSL URLs and checksums by @native-api in https://github.com/pyenv/pyenv/pull/3060 * Fix OpenSSL 3.3.2 download URLs by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3059 * Add GraalPy 24.1.0 by @msimacek in https://github.com/pyenv/pyenv/pull/3066 ## Release v2.4.12 * Add CPython 3.13.0rc2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3049 * Add CPython 3.8.20, 3.9.20, 3.10.15, 3.11.10 and 3.12.6 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3050 ## Release v2.4.11 * Add /usr/etc/pyenv.d to hooks path by @tomschr in https://github.com/pyenv/pyenv/pull/3039 * Add miniconda3-24.7.1-0 by @binbjz in https://github.com/pyenv/pyenv/pull/3040 * Add PyPy v7.3.17 by @jsirois in https://github.com/pyenv/pyenv/pull/3045 ## Release v2.4.10 * Add CPython 3.12.5 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3030 ## Release v2.4.9 * Add miniforge3-24.3.0-0 by @goerz in https://github.com/pyenv/pyenv/pull/3028 * Add CPython 3.13.0rc1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3029 ## Release v2.4.8 * Fix pyenv-uninstall not having the debug tracing invocation by @native-api in https://github.com/pyenv/pyenv/pull/3020 * Add CPython 3.13.0b4 and 3.13.0b4t by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/3019 * README: Remove reference to Fig by @ThomasHaz in https://github.com/pyenv/pyenv/pull/3018 * Fix tests failing if plugins are installed by @native-api in https://github.com/pyenv/pyenv/pull/3022 * pyenv-latest: replace -q with -b and -f, document as internal by @native-api in https://github.com/pyenv/pyenv/pull/3021 ## Release v2.4.7 * Add support for anaconda3-2024.06-1 by @binbjz in https://github.com/pyenv/pyenv/pull/3009 * Fix debug build for X.Yt-dev by @native-api in https://github.com/pyenv/pyenv/pull/ ## Release v2.4.6 * CI: push MacOS jobs to MacOS 13 and 14 by @native-api in https://github.com/pyenv/pyenv/pull/3002 * Add 3.13.0b3t and exclude it from `pyenv latest` by @colesbury in https://github.com/pyenv/pyenv/pull/3001 * Speed up `pyenv prefix` by not constructing advice text when it would be discarded by @Erotemic in https://github.com/pyenv/pyenv/pull/3005 ## Release v2.4.5 * Add CPython 3.13.0b3 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2996 ## Release v2.4.4 * Add support for miniconda3 24.5.0-0 with py3.12, py3.11, py3.10, py3.9 by @binbjz in https://github.com/pyenv/pyenv/pull/2994 * Add support for free-threaded Python by @colesbury in https://github.com/pyenv/pyenv/pull/2995 ## Release v2.4.3 * Add miniconda3 24.4.0-0 by @binbjz in https://github.com/pyenv/pyenv/pull/2982 ## Release v2.4.2 * Add script to install graalpy development builds by @timfel in https://github.com/pyenv/pyenv/pull/2969 * Correct the Explanation of PATH Variable Lookup by @Y-askour in https://github.com/pyenv/pyenv/pull/2975 * Document PYTHON_BUILD_CURL_OPTS, PYTHON_BUILD_WGET_OPTS, PYTHON_BUILD_ARIA2_OPTS by @native-api in https://github.com/pyenv/pyenv/pull/2976 * Add sed and greadlink to shim exceptions by @native-api in https://github.com/pyenv/pyenv/pull/2977 * Add CPython 3.13.0b2 by @jsirois in https://github.com/pyenv/pyenv/pull/2978 * Add CPython 3.12.4 by @xxzgc in https://github.com/pyenv/pyenv/pull/2981 ## Release v2.4.1 * Add CPython 3.12.3 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2941 * Add CPython 3.13.0a6 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2942 * Add PyPy v7.3.16 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2948 * Add CPython 3.14-dev, update 3.13-dev by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2960 * Add CPython 3.13.0b1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2959 ## Release v2.4.0 * Add CPython 3.13.0a4 by @saaketp in https://github.com/pyenv/pyenv/pull/2903 * Handle the case where `pyenv-commands --sh` returns nothing by @aphedges in https://github.com/pyenv/pyenv/pull/2908 * Document default build configuration customizations by @native-api in https://github.com/pyenv/pyenv/pull/2911 * Use Homebrew in Linux if Pyenv is installled with Homebrew by @native-api in https://github.com/pyenv/pyenv/pull/2906 * Add miniforge and mambaforge 22.11.1-3, 22.11.1-4, 23.1.0-0 to 23.11.0-0 by @aphedges in https://github.com/pyenv/pyenv/pull/2909 * Add miniconda3-24.1.2 by @binbjz in https://github.com/pyenv/pyenv/pull/2915 * Minor grammar fix in libffi backport patch in 2.5.x by @cuinix in https://github.com/pyenv/pyenv/pull/2922 * Add CPython 3.13.0a5 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2924 * Add CPython 3.8.19 and 3.9.19 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2929 * Add GraalPy 24.0.0 by @msimacek in https://github.com/pyenv/pyenv/pull/2928 * Add CPython 3.10.14 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2930 * Add Jython 2.7.3 by @cesarcoatl in https://github.com/pyenv/pyenv/pull/2936 * Add CPython 3.11.9 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2938 * Add anaconda 2024.02 by @native-api in https://github.com/pyenv/pyenv/pull/2939 ## Release v2.3.36 * Add a Dependabot config to auto-update GitHub action versions by @kurtmckee in https://github.com/pyenv/pyenv/pull/2863 * Bump the github-actions group with 1 update by @dependabot in https://github.com/pyenv/pyenv/pull/2864 * Add installation prefix to `python-config --ldflags` output by @mhaeuser in https://github.com/pyenv/pyenv/pull/2865 * Add support for miniconda3 23.11.0-1, 23.11.0-2 with py3.11, py3.10, py3.9, py3.8 by @binbjz in https://github.com/pyenv/pyenv/pull/2870 * Add micropython 1.20.0 and 1.21.0 by @cpzt in https://github.com/pyenv/pyenv/pull/2869 * Make "Automatic installer" command in the README a copy-able code block by @ryan-williams in https://github.com/pyenv/pyenv/pull/2874 * Add PyPy 7.3.14 by @dand-oss in https://github.com/pyenv/pyenv/pull/2876 * Add graalpy-23.1.2 by @msimacek in https://github.com/pyenv/pyenv/pull/2884 * Add CPython 3.13.0a3 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2885 * Add PyPy v7.3.15 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2886 * Update pypy3.9-7.3.13 checksums by @ecerulm in https://github.com/pyenv/pyenv/pull/2887 * Add CPython 3.12.2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2899 * Add CPython 3.11.8 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2898 ## Release v2.3.35 * Add CPython 3.12.1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2861 ## Release v2.3.34 * Fix graalpy-community to use a separate package name by @native-api in https://github.com/pyenv/pyenv/pull/2855 * Move 3.11.5+ to OpenSSL 3 by default by @native-api in https://github.com/pyenv/pyenv/pull/2858 * Add CPython 3.11.7 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2860 ## Release v2.3.33 * Add miniforge3-23.3.1-1 by @goerz in https://github.com/pyenv/pyenv/pull/2839 * Add support for miniconda3-3.11-23.10.0-1 by @binbjz in https://github.com/pyenv/pyenv/pull/2843 * Add support for miniconda3 23.10.0-1 with py3.10、py3.9、py3.8 by @binbjz in https://github.com/pyenv/pyenv/pull/2844 * Add CPython 3.13.0a2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2849 * python-build: Document PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA and PYTHON_BUILD_HTTP_CLIENT by @native-api in https://github.com/pyenv/pyenv/pull/2853 ## Release v2.3.32 * Describe --no-rehash option in the manpage by @fsc-eriker in https://github.com/pyenv/pyenv/pull/2832 * Make adding $PYENV_ROOT/bin to PATH independent of other software by @native-api in https://github.com/pyenv/pyenv/pull/2837 * Make `pyenv init` output insertable to startup files by @native-api in https://github.com/pyenv/pyenv/pull/2838 ## Release v2.3.31 * Add new anaconda and miniconda definitions by @aphedges in https://github.com/pyenv/pyenv/pull/2824 ## Release v2.3.30 * Fix intermittent "broken pipe" in tests by @native-api in https://github.com/pyenv/pyenv/pull/2817 * Add CPython 3.13.0a1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2818 * Add PyPy 7.3.13 by @dand-oss in https://github.com/pyenv/pyenv/pull/2807 * Fix linking against Homebrew's Tcl/Tk 8.6.13 in MacOS by @startergo in https://github.com/pyenv/pyenv/pull/2820 ## Release v2.3.29 * Add CPython 3.11.6 by @thecesrom in https://github.com/pyenv/pyenv/pull/2806 * Add GraalPy 23.1.0 definition using the faster Oracle GraalVM distribution by @eregon in https://github.com/pyenv/pyenv/pull/2812 * Install ncurses from Homebrew, if available by @aphedges in https://github.com/pyenv/pyenv/pull/2813 ## Release v2.3.28 * Prioritize 'zlib from xcode sdk' flag correctly by @native-api in https://github.com/pyenv/pyenv/pull/2791 * Prefer OpenSSL 3 in Homebrew in 3.13-dev by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2793 * Add CPython 3.12.0rc3 by @saaketp in https://github.com/pyenv/pyenv/pull/2795 * Add graalpy-23.1.0 and split between graalpy and graalpy-community by @msimacek in https://github.com/pyenv/pyenv/pull/2796 * Update the OpenSSL dependency for Python 2.7.18 by @lpapp-foundry in https://github.com/pyenv/pyenv/pull/2797 * Add CPython 3.12.0 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2804 ## Release v2.3.27 * Prefer OpenSSL 3 in Homebrew since 3.12 by @native-api in https://github.com/pyenv/pyenv/pull/2781 * Fix get-pip urls for older pypy versions by @TimPansino in https://github.com/pyenv/pyenv/pull/2788 * Update openssl url for 3.12.0rc2 by @zsol in https://github.com/pyenv/pyenv/pull/2789 ## Release v2.3.26 * Prevent `grep` warning in `conda.bash` by @aphedges in https://github.com/pyenv/pyenv/pull/2768 * fix a typo in README.md by @xzmeng in https://github.com/pyenv/pyenv/pull/2769 * use -I with ensurepip by @xaocon in https://github.com/pyenv/pyenv/pull/2764 * Add CPython 3.12.0rc2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2778 ## Release v2.3.25 * Add CPython 3.8.18, 3.9.18, 3.10.13, 3.11.5 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2763 ## Release v2.3.24 * README update: Added UNIX reference near Automatic installer by @VictorieeMan in https://github.com/pyenv/pyenv/pull/2744 * Fix FreeBSD tests in MacOS CI by @native-api in https://github.com/pyenv/pyenv/pull/2748 * Add CPython 3.12.0rc1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2752 * [Add an updated Anaconda and Miniconda installers](https://github.com/pyenv/pyenv/commit/db871427c7a232e18ee7a6dc0182989a646ccca9) ## Release v2.3.23 * Add CPython 3.12.0b4 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2741 * Add new anaconda and miniconda definitions by @aphedges in https://github.com/pyenv/pyenv/pull/2742 ## Release v2.3.22 * Add CPython 3.12.0b3 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2730 * Add Cinder 3.10 and Cinder configure patches by @filips123 in https://github.com/pyenv/pyenv/pull/2739 ## Release v2.3.21 * Add graalpy-23.0.0 by @msimacek in https://github.com/pyenv/pyenv/pull/2724 * Add PyPy 7.3.12 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2726 * Fix occasional 'libexec/pyenv-latest: line 39: printf: write error: Broken pipe' by @native-api in https://github.com/pyenv/pyenv/pull/2729 ## Release v2.3.20 * Backport bpo-42351 to 3.5.10 by @native-api in https://github.com/pyenv/pyenv/pull/2717 * Add missing patches for Python 3.7/3.8/3.9 by @tomkins in https://github.com/pyenv/pyenv/pull/2718 ## Release v2.3.19 * Add CPython 3.7.17, 3.8.17 and 3.9.17 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2711 * Add CPython 3.11.4 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2715 * Add CPython 3.10.12 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2714 * Add CPython 3.12.0b2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2713 ## Release 2.3.18 * Fix not showing symlink contents for unselected versions in `pyenv versions` by @native-api in https://github.com/pyenv/pyenv/pull/2675 * Correct link in has_tar_xz_support else branch of 3.10.11 and 3.11.3 by @mirekdlugosz in https://github.com/pyenv/pyenv/pull/2677 * Fix #2682: Correct pyenv_user_setup.bash file by @tomschr in https://github.com/pyenv/pyenv/pull/2687 * fix: updating heredoc delimiter to be random and unique by @aviadhahami in https://github.com/pyenv/pyenv/pull/2691 * Support ksh alternative names by @kpschoedel in https://github.com/pyenv/pyenv/pull/2697 * Add CPython 3.12.0b1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2701 * Update 3.12-dev and add 3.13-dev by @t0b3 in https://github.com/pyenv/pyenv/pull/2703 ## Release 2.3.17 * Try locate `readlink` first in pyenv-hooks, fix #2654 by @Harry-Chen in https://github.com/pyenv/pyenv/pull/2655 * Add CPython 3.12.0a7 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2668 * Add CPython 3.11.3 by @mirekdlugosz in https://github.com/pyenv/pyenv/pull/2671 * Add CPython 3.10.11 by @mirekdlugosz in https://github.com/pyenv/pyenv/pull/2670 ## Release 2.3.16 * Add Miniforge3-22.11.1-4 by @jlec in https://github.com/pyenv/pyenv/pull/2642 * Add Anaconda3-2023.03 by @anton-petrov in https://github.com/pyenv/pyenv/pull/2648 ## Release 2.3.15 * Add miniconda 23.1.0-1 by @aphedges in https://github.com/pyenv/pyenv/pull/2635 * Add CPython 3.12.0a6 by @saaketp in https://github.com/pyenv/pyenv/pull/2638 ## Release 2.3.14 * Fix indentation by @rafrafek in https://github.com/pyenv/pyenv/pull/2620 * Support for "BusyBox version" of "head" by @schuellerf in https://github.com/pyenv/pyenv/pull/2629 * bpo-27987 for v3.5.10 and v3.6.15: align by 16bytes on 64bit platforms by @chaimleib in https://github.com/pyenv/pyenv/pull/2630 * bpo-36231 for v3.5.10: fix Unsupported MacOS X CPU type in ffi.h by @chaimleib in https://github.com/pyenv/pyenv/pull/2633 * README: clarify behavior of `pyenv latest` by @mrienstra in https://github.com/pyenv/pyenv/pull/2634 ## Release 2.3.13 * Fix pyenv-latest to ignore virtualenvs by @native-api in https://github.com/pyenv/pyenv/pull/2608 * Show symlink contents in non-bare `pyenv versions' by @native-api in https://github.com/pyenv/pyenv/pull/2609 * Ignore virtualenvs in `pyenv latest' in a clean way by @native-api in https://github.com/pyenv/pyenv/pull/2610 * Fix link resolving in pyenv-versions by @laggardkernel in https://github.com/pyenv/pyenv/pull/2612 * Add CPython 3.11.2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2615 * Add CPython 3.10.10 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2616 * Add CPython 3.12.0a5 by @Afront in https://github.com/pyenv/pyenv/pull/2614 ## Release 2.3.12 * Undefined name: do not forget self when accessing flavor by @cclauss in https://github.com/pyenv/pyenv/pull/2595 * Fix wrong libpython being linked to in MacOS by @native-api in https://github.com/pyenv/pyenv/pull/2596 * Fix `:latest` by @native-api in https://github.com/pyenv/pyenv/pull/2599 * Fix `pyenv which` to support auto-resolved prefixes by @native-api in https://github.com/pyenv/pyenv/pull/2601 * Add more recent build of nogil Python. by @colesbury in https://github.com/pyenv/pyenv/pull/2602 ## Release 2.3.11 * Add CPython 3.12.0a4 by @Afront in https://github.com/pyenv/pyenv/pull/2590 * Add a script to add the latest miniforge and mambaforge versions by @smcgivern in https://github.com/pyenv/pyenv/pull/2560 * Add missing Miniforge/Mambaforge versions (4.10.2-0 - 22.9.0-3) by @smcgivern in https://github.com/pyenv/pyenv/pull/2591 * Fix using dependencies from Ports in FreeBSD that are not searched with pkg-config by @native-api in https://github.com/pyenv/pyenv/pull/2593 * Fix priority for user-supplied configure and make flags by (**_only set --enable-shared if user hasn't supplied --disable-shared_**) @native-api in https://github.com/pyenv/pyenv/pull/2592 * Fix a compilation error in 3.8.10+ and 3.9.5+ when linking against Op… by @native-api in https://github.com/pyenv/pyenv/pull/2594 ## Release 2.3.10 * Remove stray newline after python-build installation by @tklauser in https://github.com/pyenv/pyenv/pull/2566 * Allow multiple versions for pyenv-install by @rockandska in https://github.com/pyenv/pyenv/pull/2568 * --enable-shared by default by @anton-petrov in https://github.com/pyenv/pyenv/pull/2554 * Fix non-bash output while detecting shell by @ianchen-tw in https://github.com/pyenv/pyenv/pull/2561 * add pypy 7.3.11 release by @dand-oss in https://github.com/pyenv/pyenv/pull/2576 * Mention how to build for maximum performance by @hauntsaninja in https://github.com/pyenv/pyenv/pull/2579 * Add miniconda 22.11.1-1 by @aphedges in https://github.com/pyenv/pyenv/pull/2583 * Add Fig as autocomplete suggestion by @brendanfalk in https://github.com/pyenv/pyenv/pull/2574 * Fix using dependencies from Ports in BSD with no pkg-config by @native-api in https://github.com/pyenv/pyenv/pull/2586 ## Release 2.3.9 * Add -latest suffix to miniforge3 by @nwh in https://github.com/pyenv/pyenv/pull/2551 * Add PyPy 7.3.10 by @dand-oss in https://github.com/pyenv/pyenv/pull/2553 * Add miniforge3 and mambaforge 22.9.0-2 by @smcgivern in https://github.com/pyenv/pyenv/pull/2559 * Fix compilation error when building OpenSSL 1.1.1q in MacOS 11+ for 3.9.16 by @lisbethw1130 in https://github.com/pyenv/pyenv/pull/2558 * Add `openssl` patches for 3.7.15, 3.7.16, and 3.8.16 by @samdoran in https://github.com/pyenv/pyenv/pull/2564 * Add support for Anaconda3-2022.10 by @huypn12 in https://github.com/pyenv/pyenv/pull/2565 ## Release 2.3.8 * Export detected shell environment in pyenv-init by @ianchen-tw in https://github.com/pyenv/pyenv/pull/2540 * Add CPython 3.12.0a3 by @saaketp in https://github.com/pyenv/pyenv/pull/2545 * Add CPython 3.11.1 by @anton-petrov in https://github.com/pyenv/pyenv/pull/2549 * Add CPython 3.10.9 by @rudisimo in https://github.com/pyenv/pyenv/pull/2544 * Add 3.7.16, 3.8.16, 3.9.16 by @chadac in https://github.com/pyenv/pyenv/pull/2550 ## Release 2.3.7 * Add Python version 3.11 to the macOS build by @jbkkd in https://github.com/pyenv/pyenv/pull/2510 * Don't use Zlib from XCode SDK if a custom compiler is used by @native-api in https://github.com/pyenv/pyenv/pull/2516 * Change line endings from CRLF to LF by @hoang-himself in https://github.com/pyenv/pyenv/pull/2517 * Fix resolution of a name that's a prefix of another name by @native-api in https://github.com/pyenv/pyenv/pull/2521 * GitHub Workflows security hardening by @sashashura in https://github.com/pyenv/pyenv/pull/2511 * Add nushell to activate list by @theref in https://github.com/pyenv/pyenv/pull/2524 * Fix compilation error when building OpenSSL 1.1.1q in MacOS 11+ for 3.9.15 and 3.8.15 by @twangboy in https://github.com/pyenv/pyenv/pull/2520 * Add simple `.editorconfig` file by @aphedges in https://github.com/pyenv/pyenv/pull/2518 * Support `aria2c` being a snap by @native-api in https://github.com/pyenv/pyenv/pull/2528 * Add CPython 3.12.0a2 by @saaketp in https://github.com/pyenv/pyenv/pull/2527 * Add --no-push-path option by @isaacl in https://github.com/pyenv/pyenv/pull/2526 * Fix typo in README.md by @weensy in https://github.com/pyenv/pyenv/pull/2535 * Copy auto installer oneliner to readme by @spookyuser in https://github.com/pyenv/pyenv/pull/2538 ## Release 2.3.6 * Add CPython 3.10.8 (#2480) * Add CPython 3.7.15, 3.8.15, and 3.9.15 (#2482) * Add CPython 3.11.0 (#2493) * Add CPython 3.12.0a1 (#2495) * Add graalpy-22.3.0 (#2497) * Auto-resolve prefixes to the latest version (#2487) * It must be a full prefix -- the actual searched prefix is `[-.]` * Other flavors are likely sorted incorrectly atm * Prereleases and versions with some suffixes (`-dev`, `-src`, `-latest`) are not searched * `pyenv uninstall` has been excluded from the resolution feature: deleting a dynamically selected installation could be problematic * Fix OpenSSL 1.1.1q compilation error in MacOS 11+ (#2500) * Link to Tcl/Tk from Homebrew via pkgconfig for 3.11+ (#2501) * Fix syntax error in `pyenv init -` if PYENV_ROOT has spaces (#2506) ## Release 2.3.5 * Add CPython 3.10.7 (#2454) * Docs: update Fish PATH update (#2449) * Add CPython 3.7.14, 3.8.14 and 3.9.14 (#2456) * Update miniconda3-3.9-4.12.0 (#2460) * Add CPython 3.11.0rc2 (#2459) * Add patches for 3.7.14 to support Apple Silicon (#2463) * Add ability to skip all use of Homebrew (#2464) * Drop Travis integration (#2468) * Build CPython 3.12+ with --with-dsymutil in MacOS (#2471) * Add Pyston 2.3.5 (#2476) ## Release 2.3.4 * Add CPython 3.11.0rc1 (#2434) * Add support for multiple versions in `pyenv uninstall` (#2432) * Add micropython 1.18 and 1.19.1 (#2443) * CI: support Micropython, deleted scripts; build with -v (#2447) * Re-allow paths in .python-version while still preventing CVE-2022-35861 (#2442) * CI: Bump OS versions (#2448) * Add Cinder 3.8 (#2433) ## Release 2.3.3 * Use version sort in `pyenv versions` (#2405) * Add CPython 3.11.0b4 (#2411) * Python-build: Replace deprecated git protocol use with https in docs (#2413) * Fix relative path traversal due to using version string in path (#2412) * Allow pypy2 and pypy3 patching (#2421, #2419) * Add CPython 3.11.0b5 (#2420) * Add GraalPython 22.2.0 (#2425) * Add CPython 3.10.6 (#2428) ## Release 2.3.2 * Add CPython 3.11.0b2 (#2380) * Honor CFLAGS_EXTRA for MicroPython #2006 (#2007) * Add post-install checks for curses, ctypes, lzma, and tkinter (#2353) * Add CPython 3.11.0b3 (#2382) * Add flags for Homebrew into `python-config --ldflags` (#2384) * Add CPython 3.10.5 (#2386) * Add Anaconda 2019.10, 2021.04, 2022.05; support Anaconda in add_miniconda.py (#2385) * Add Pyston-2.3.4 (#2390) * Update anaconda3-2022.05 MacOSX arm64 md5 (#2391) ## Release 2.3.1 * Version file read improvements (#2269) * Add CPython 3.11.0b1 (#2358) * Update 3.11-dev and add 3.12-dev (#2361) * Add CPython 3.9.13 (#2372) * Add miniconda 4.12.0 (#2371) * Fix endless loop in `pyenv init -` under SSH in some shell setups (#2374) * CI: Add tests for modified Python build scripts (#2286) ## Release 2.3.0 * Bump openssl 1.1 to 1.1.1n for CPython 3.7 3.8 3.9 (#2276) * Doc Fix: Escape a hash character causing unwanted GitHub Issue linking (#2282) * Add CPython 3.9.12 (#2296) * Add CPython 3.10.4 (#2295) * Add patch for 3.6.15 to support Xcode 13.3 (#2288) * Add patch for 3.7.12 to support Xcode 13.3 (#2292) * Add CONTRIBUTING.md (#2287) * Add PyPy 7.3.9 release 2022-03-30 (#2308) * Add Pyston 2.3.3 (#2316) * Add CPython 3.11.0a7 (#2315) * Add "nogil" Python v3.9.10 (#2342) * Support XCode 13.3 in all releases that officially support MacOS 11 (#2344) * Add GraalPython 22.1.0 (#2346) * Make PYENV_DEBUG imply -v for `pyenv install` (#2347) * Simplify init scheme (#2310) * Don't use Homebrew outside of MacOS (#2349) * Add `:latest` syntax to documentation for the `install` command (#2351) ## Release 2.2.5 * Add CPython 3.10.3 * Add CPython 3.9.11 * Add CPython 3.8.13 * Add CPython 3.7.13 * Add CPython 3.11.0a6 (#2266) * Add PyPy 7.3.8 (#2253) * Add miniconda3-3.7-4.11.0, miniconda3-3.8-4.11.0, miniconda3-3.9-4.11.0 (#2268) * Add pyston-2.3.2 (#2240) * Fix UnicodeDecodeError for CPython 3.6.15 and 3.7.12 (#2237) * python-build: add URL for get-pip for Python 3.6 (#2238) * Bump openssl to 1.1.1n for CPython 3.10.x ## Release 2.2.4 * Added docstrings to several undocumented functions (#2197) * Fix incorrect pypy 2.7-7.3.6 sha256 hashes (#2208) * Fix a regression in include paths when compiling ctypes in 3.6.15/3.7.12 (#2209) * Revert "Disable coreutils on M1 Apple Silicon with arm64 (#2020)" (#2212) * CPython 3.11.0a4 (#2217) * CPython 3.9.10 and 3.10.2 (#2219) * miniconda3-latest: added Linux-aarch64 (#2221) * Add GraalPython 22.0.0 (#2226) ## Release 2.2.3 * Add new pypy versions (pypy2.7-7.3.2~7.3.5) to the version list (#2194) * Fix Python 3.7.12 compilation on macOS arm64/M1. (#2190) * Fix Python 3.6.15 compilation on macOS arm64/M1. (#2189) * Add Anaconda3-2021.11 (#2193) * CPython 3.11.0a3 (#2187) * Fix errant "echo" in README install instructions (#2185) * Add Miniforge and Mambaforge 4.10.3-10 (#2184) * Add CPython 3.10.1 (#2183) * Fix 3.6.15 build on macOS (#2182) ## Release 2.2.2 * Add support for macOS Apple M1 (#2164) ## Release 2.2.1 * Add CPython 3.9.9 (#2162) * Add CPython 3.9.8 (#2152) * Add Add micropython 1.17 (#2158) * Add Add micropython 1.16 (#2158) * Patch 3.10.0 configure, fixes https://bugs.python.org/issue45350 (#2155) * Use command and type instead of which (#2144) * Add definition of pyenv help in COMMANDS.md #2139 * Use OpenSSL 1.0 for CPython 2.7.18 ## Release 2.2.0 * Adding PyPy release 7.3.7 (Python 3.7 and 3.8). (#2132) * Append Homebrew custom prefix to search path (#1957) * Add documentation for init command (#2125) * Add setup instructions for the case when one installs Pyenv as part of a batch job (#2127) * Add documentation for completions command (#2126) * Default --with-universal-archs to universal2 on Apple Silicon (#2122) * Update README.md (#2120) * Add GraalPython 21.3.0 (#2117) * Pypy ver 7.3.6 - python 3.7 and python 3.8 (#2111) * Discover Tcl/Tk reliably and use active version (#2106) * Fish installation instructions (#2104) * Add CPython 3.11.0a1 (#2099) ## Release 2.1.0 * Fix mambaforge-pypy3 build (#2096) * Add Python 3.10.0 (#2093) * Add documentation for exec command (#2090) * Add documentation for shims command (#2091) * Add documentation for hooks command (#2089) * Add documentation for root command (#2088) * Add documentation for prefix command (#2087) * Update to Pyston's v2 package of the 2.3.1 release (#2078) * Add pyston-2.3.1 support (#2075) * Don't update conda when installing pip (#2074) * Improve `add_miniconda.py` (#2072) * GitHub actions tests (#2073) * Fix sed commands (#2071) * macOS: fix the build of Python 2.7.18 on macOS 11.5.2 (Big Sur) + Apple Silicon (#2061) ## Release 2.0.7 * Update setup instructions in the Readme (#2067) * Allow tcl-tk as argument or try with homebrew by default (#1646) * Allow system Python in sbin (#2065) * Prevent addition of duplicate plugin dirs to PATH (#2045) * Disable coreutils on M1 Apple Silicon with arm64 (#2020) * Add Python 3.10.0rc2 (#2053) * Add space after `yes/no` prompt (#2040) * Add CPython v3.6.15 and v3.7.12 (#2052) * Add missing Python 2.6.x definitions and patches (#2051) * Fix build of ossaudiodev in Linux/FreeBSD for Python 2.6 (#2049) * Fix build of ossaudiodev in Linux/FreeBSD for Python 3.1 (#2047) ## Release 2.0.6 * Add CPython 3.9.7 (#2044) * Add CPython v3.8.12 (#2043) * Adapt conda.bash for bash associative array (#2037) ## Release 2.0.5 * Move man page to location where it can be automatically found by man (#2032) * Update checksums for CPython 3.10.0rc1 (#2025) * Remove 3.9.3 (#2022) * Add CPython 3.10.0rc1(#2023) ## Release 2.0.4 - Added scripts for rolling releases of Miniforge (#2019) - Update pyston-2.3 (#2017) - Add GraalPython 21.2.0 (#2018) - Add CPython 3.10.0b4 (#2013), (#2005) - Add Pyston 2.3 (#2012) ## Release 2.0.3 * Remove PATH warning (#2001) * Add Python 3.6.14, 3.7.11, 3.8.11, and 3.9.6 (#1996) * Miniforge minor update to 4.10.1-5 (#1992) * Suggest that fish users init in interactive mode (#1991) ## Release 2.0.2 * Miniforge minor update to 4.10.1-5 (#1992) * Suggest that fish users init in interactive mode (#1991) * Add 3.10.0b3 (#1988) * Revert "Drop inferring version to install from `pyenv local`" (#1984) * Use system Python3 for tests (#1979) * Check for shims in path with pure Bash (#1978) * Update setup instructions for debian, ubuntu etc. (#1977) ## Release 2.0.1 * Drop inferring version to install from `pyenv local` (#1907) * Create mambaforge-4.10.1-4 (#1971) * Add 3.10.0b2 recipe (#1966) * Fix .bashrc `echo` install syntax error (#1965) * Add explicit Zsh instructions for MacOS (#1964) * Install pip with pyston (#1955) * Mention log file if an error happened before building, too (#1537) * Add pypy3.7-7.3.5 (#1950) ## Release 2.0.0 * Support for CPython 3.9.5 has been added. * Support for CPython 3.8.10 has been added. * Support for CPython 3.10.0b1 has been added. * Support for GraalPython 21.1.0 has been added. * Support for Anaconda 2021.05 has been added. * Support for Miniforge3 4.10.1-1 has been added. * CPython 3.10-dev target branch renamed. * CPython 3.10-dev and 3.11-dev updated. * Bump OpenSSL to 1.1.1x for all Pythons that support MacOS 11 * Update generated configuration files before run ./configure * Full shell configuration instructions placed into `pyenv init` * Prevent build from installing MacOS apps globally * ldflags_dirs is not needed for Python and causes failures * Report cache filename at download * Add micropython 1.15 * Correct URLs for Stackless builds and add Stackless 2.7.16 ## Breaking changes * Split startup logic into PATH and everything else (https://github.com/pyenv/pyenv/issues/1649#issuecomment-694388530) ## 1.2.27 * Add GraalPython 21.1.0 (#1882) * Add CPython 3.10.0a7 (#1880) * Docs(README): fix info about version-file separator (#1874) * List versions starting with a dot (#1350) * Feat: support (skip) commented lines in version-file (#1866) * pypy3.7-7.3.4 (#1873) * Create miniforge3-4.10 (#1868) * Add CPython 3.9.4 (#1865) ## 1.2.26 * Add CPython 3.9.4 (#1865) ## 1.2.25 * bpo-43631: update to openssl 1.1.1k (#1861) * Add CPython 3.9.3 and 3.8.9 (#1859) * Add micropython 1.14 (#1858) * Shell detect improvements (#1835) * Test(init): remove misleading detect from parent shell case arg (#1856) * Add GraalPython 21.0.0 (#1855) ## 1.2.24 * GitHub Actions: Add $PYENV_ROOT/shims to $PATH (#1838) * Add Python 3.10.0a6 (#1839) * Remove the "Using script's directory as PYENV_DIR if shim is invoked with a script argument" feature (#1814) * Update GET_PIP_URL (#1844) * GitHub Action to build Python versions on Ubuntu (#1794) * Make work in nounset (-u) mode (#1786) * Update miniforge3-4.9.2 (#1834) * Added aarch64 for Linux in anaconda_architecture() (#1833) * Hook script to add latest suffix for install command (#1831) * Fix error link (#1832) * Clarify proxy variable names in readme (#1830) * Travis CI: Add Xcode 12 on macOS 10.15.5 (#1708) * Added --nosystem argument (#1829) * Add CPython 3.8.8 (#1825) * Add CPython 3.9.2 (#1826) * Add manpage (#1790) ## 1.2.23 + python-build: Add CPython v3.7.10 (#1818) + python-build: Add CPython v3.6.13 (#1817) * python-build: Add PyPy 3.7-c-jit-latest (#1812) * python-build: Add PyPy 3.7 (#1718, #1726, #1780) * python-build: Add miniconda3 4.9.2 (#1763) * python-build: Add miniconda3 4.8.3 (#1763) * python-build: Add miniconda3 4.8.2 (#1763) * python-build: Add Miniforge3-4.9.2 (#1782) * python-build: Fix download links for some PyPy and Stackless versions (#1692) * python-build: Add PYENV_DEBUG option (#1806) * python-build: Fix get-pip which dropped support for legacy Python (#1793) * pyenv-help: Fix `sed: RE error: illegal byte sequence` (#1714) * pyenv-versions: Fix not printing asterisk for current version in Bash 3 (#1815) * pyenv-prefix: "system" python - support cases where python3 is in PATH but not python (#1655) * pyenv-which: Added fallback to system executable (#1797) * pyenv-rehash: Use associative arrays for better performance on bash >= 4 (#1749) * pyenv-rehash: Try to sleep in 0.1 sec steps when acquiring lock (#1798) * pyenv: Use a better PS4 as recommended by Bash Hackers Wiki (#1810) ## 1.2.22 + python-build: Add LDFLAGS for zlib on macOS >= 1100 (#1711) + python-build: Add the CPython 3.9.1 (#1752) + python-build: Change order of LDFLAGS paths (#1754) + python-build: Docker config for testing python-build (#1548) + python-build: Put prerequisite for installation before install (#1750) + python-build: Add GraalPython 20.3 (#1736) + python-build: Add CPython 3.8.7 + python-build: Added anaconda3-2020.11 (#1774) + python-build: Added arm64 architecture support in python-build for macOS (#1775) ## 1.2.21 * python-build: Add CPython 3.9.0 (#1706) * python-build: Add CPython 3.8.6 (#1698) * python-build: Add CPython 3.7.9 (#1680) * python-build: Add CPython 3.6.12 (#1680) * python-build: Add CPython 3.5.10 (#1690) * python-build: Add Jython 2.7.2 (#1672) * python-build: Add Graalpython 20.1.0 (#1594) * python-build: Add Graalpython 20.2.0 (#1594) * python-build: Add Anaconda3-2020.07 (#1684) * python-build: Add micropython-1.13 (#1704) * python-build: Fix PyPy download links (#1682) * python-build: Support for `PYTHON_BUILD_MIRROR_URL` when checksums do not exist (#1673) * pyenv: Search for plugins in `PYENV_DIR` and `PYENV_ROOT` (#1697) * pyenv-help: Fix 'sed: RE error: illegal byte sequence' (#1670) ## 1.2.20 * python-build: Add CPython 3.8.5 (#1667) * python-build: Add CPython 3.8.4 (#1658) * python-build: Add CPython 3.7.8 * python-build: Add CPython 3.6.11 * pyenv-install: Make grep detection more robust (#1663) * python-build: Fix has_tar_xz_support function on FreeBSD. (#1652) ## 1.2.19 * python-build: Add CPython 3.8.3 (#1612) * python-build: Add CPython 2.7.18 (#1593) * python-build: Add CPython 3.10-dev (#1619) * python-build: Add anaconda3-2020.02 (#1584) * python-build: Add stackless 3.7.5 (#1589) ## 1.2.18 * python-build: Update download URLs for old OpenSSL releases (#1578) * python-build: Prevent `brew: command not found` messages that are not errors (#1544) ## 1.2.17 * python-build: Add CPython 3.8.2 * python-build: Add CPython 3.7.7 (#1553) * python-build: Add Miniconda versions newer than 4.3.30 (#1361) * python-build: Add Micropython 1.12 (#1542) * python-build: Add Add CPython 3.9.0a4 * pyenv: Fix sed illegal byte sequence error (#1521) ## 1.2.16 * python-build: Add CPython 3.8.1 (#1497) * python-build: Add CPython 3.7.6 (#1498) * python-build: Add CPython 3.6.10 (#1499) * python-build: Add CPython 3.5.9 (#1448) * python-build: Add PyPy 7.3.0 (1502) ## 1.2.15 * python-build: Add CPython 3.7.5 (#1423) * python-build: Add CPython 2.7.17 (#1433) * python-build: Add CPython 3.5.8 (#1441) * python-build: Add PyPy 7.2.0 (#1418) * python-build: Add anaconda3-2019.10 (#1427) * pyenv-help: Show text for all pyenv commands in pyenv-help (#1421) ## 1.2.14 * python-build: Add CPython 3.8.0 (#1416) * python-build: Add Anaconda-2019.07 (#1382) * python-build: Add Micropython 1.11 (#1395) * python-build: Fix compatibility issues with Homebrew installed Tcl/Tk (#1397) * pyenv-exec: Do not use `exec -a`, do not mangle PATH for system Python (#1169) ## 1.2.13 * python-build: Add CPython 3.7.4 * python-build: Add CPython 3.6.9 ## 1.2.12 * python-build: Find zlib from Xcode or brew on Mojave (#1353) * python-build: Add PyPy 7.1.1 (#1335) * python-build: Add CPython 3.8.0b1 ## 1.2.11 * python-build: Fix `posix_close` name collision in 2.4 builds (#1321) * python-build: Add CPython 3.4.10 (#1322) * python-build: Add Anaconda 2019.03 * python-build: Allow overriding the preference of OpenSSL version per definition basis (#1302, #1325, #1326) * python-build: Imported changes from rbenv/ruby-build 20190401 (#1327) * python-build: Use GNU Readline 8.0 on macOS if brew's package isn't available (#1329) ## 1.2.10 * python-build: Force y, Y, yes or YES to confirm installation (#1217) * python-build: Add PyPy 7.0.0, 7.1.0 * python-build: Add CPython 2.7.16, 3.5.7 and 3.7.3 * python-build: Install `python-gdb.py` (#1190, #1289) * python-build: Add micropython 1.10 * python-build: Prefer Homebrew's OpenSSL 1.1 over 1.0 (#839, #1302) ## 1.2.9 * python-build: Add CPython 3.7.2 and CPython 3.6.8 (#1256) * python-build: Add anaconda[23]-5.3.1 (#1246) * python-build: Add Anaconda 2018.12 (#1259) * python-build: Fix ironpython-dev git repo url (#1260) * python-build: Add `OPENSSL_NO_SSL3` patch for CPython 3.3.7 (#1263) ## 1.2.8 * python-build: Add CPython 3.7.1 * python-build: Add CPython 3.6.7 * python-build: Add anaconda[23]-5.3.0 (#1220) ## 1.2.7 * python-build: Add CPython 3.5.6 (#1199) * python-build: Add CPython 3.4.9 ## 1.2.6 * python-build: Added CPython 3.6.6 (#1178) * python-build: Check wget version iff wget is going to be used (#1180) ## 1.2.5 * python-build: Add CPython 3.7.0 (#1177) * python-build: Add micropython 1.9.4 (#1160) * python-build: Add anaconda[23]-5.2.0 (#1165) * pyenv: Fix `seq(1)` is not available on OpenBSD (#1166) ## 1.2.4 * python-build: Add CPython 2.7.15 * python-build: Add PyPy 6.0.0 * python-build: Allow overriding HTTP client type based on environment variable `PYTHON_BUILD_HTTP_CLIENT` (#1126) * python-build: Use version-specific `get-pip.py` when installing 2.6 and 3.2 (#1131) * pyenv: Merge rbenv master (#1151) * pyenv: Make `pyenv-rehash` safer for multiple processes (#1092) ## 1.2.3 * python-build: Add CPython 3.6.5 * python-build: Set openssl PKG_CONFIG_PATH for python 3.7 (#1117) * python-build: Add ActivePython versions 2.7.14, 3.5.4, 3.6.0 (#1113) * python-build: Unset `PIP_VERSION` before invoking `get-pip.py` as a workaround for `invalid truth value` error (#1124) ## 1.2.2 * python-build: Add PyPy3 5.10.1 (#1084) * python-build: Add CPython 3.5.5 (#1090) * python-build: Add Anaconda[23]-5.1.0 (#1100) * python-build: Fix checksum issue for CPython 3.4.8 (#1094) * python-build: Prevent Anaconda from installing a `clear` shim (#1084) ## 1.2.1 * python-build: Add CPython 3.6.4 * python-build: Add PyPy[23] 5.10 ## 1.2.0 * python-build: Import changes from ruby-build v20171031 (#1026) * python-build: Ignore LibreSSL bundled with macOS 10.13 (#1025) * python-build: Skip passing `--enable-unicode` to CPython 3.3+ (#912) * python-build: Add CPython 3.3.7 (#1053) * python-build: Add micropython 1.9.3 * python-build: Add PyPy 5.9.0 * python-build: Add Miniconda[23] 4.3.14, 4.3.21, 4.3.27, 4.3.30 * python-build: Add Anaconda[23] 5.0.1 * python-build: Update Anaconda[23] 5.0.0 to 5.0.0.1 bugfix release ## v1.1.5 * python-build: Add CPython 3.6.3 * python-build: Add CPython 3.7.0a1 * python-build: Add Anaconda[23] 5.0.0 ## v1.1.4 * pyenv: Workaround for scripts in `$PATH` which needs to be source'd (#100, #688, #953) * python-build: Add support for PyPy3 executables like `libpypy3-c.so` (#955, #956) * python-build: Add CPython 2.7.14, 3.4.7, 3.5.4 (#965, #971, #980) * python-build: Add Jython 2.7.1 (#973) ## v1.1.3 * python-build: Add CPython 3.6.2 (#951) ## v1.1.2 * pyenv: Fix incorrect `pyenv --version` output in v1.1.1 (#947) ## v1.1.1 * python-build: Update links to Portable Pypy 5.8-1 bugfix release, affects pypy2.7-5.8.0 and pypy3.5-5.8.0 definitions (#939) ## v1.1.0 * python-build: Add PyPy 5.7.1 (#888) * pyenv: Merge rbenv master (#927) * python-build: Add PyPy 5.8.0 (#932) * python-build: Anaconda[23] 4.4.0 * python-build: Add micropython-dev ## 1.0.10 * python-build: Add Anaconda2/Anaconda3 4.3.1 (#876) * python-build: Make miniconda-latest point to miniconda2-latest (#881) * python-build: Fix typo in MacOS packages for anaconda2-4.3.0/4.2.0 (#880) ## 1.0.9 * pyenv: Migrate project site from https://github.com/yyuu/pyenv to https://github.com/pyenv/pyenv * python-build: Add PyPy2 5.7.0 (#872, #868) * python-build: Add PyPy3 5.7.0-beta (#871, #869) * python-build: Add CPython 3.6.1 (#873) * python-build: Add Pyston 0.6.1 (#859) * python-build: Change default mirror site URL from https://yyuu.github.io/pythons to https://pyenv.github.io/pythons * python-build: Upgrade OpenSSL from 1.0.2g to 1.0.2k (#850) ## 1.0.8 * pyenv: Fix fish subcommand completion (#831) * python-build: Add Anaconda2/Anaconda3 4.3.0 (#824) * python-build: Use CPython on GitHub as the source repository of CPython development versions (#836, #837) * python-build: Fix checksum verification issue on the platform where OpenSSL isn't available (#840) ## 1.0.7 * python-build: Add CPython 3.5.3 (#811) * python-build: Add CPython 3.4.6 (#812) * python-build: Fix tar.gz checksum of CPython 3.6.0 (#793) * python-build: Jython installer workaround (#800) * python-build: Disable optimization (`-O0`) when `--debug` was specified (#808) ## 1.0.6 * python-build: Add CPython 3.6.0 (#787) ## 1.0.5 * python-build: Add CPython 2.7.13 (#782) * python-build: Add CPython 3.6.0rc2 (#781) * python-build: Add Anaconda 4.2.0 (#774) * python-build: Add Anaconda3 4.2.0 (#765) * python-build: Add IronPython 2.7.7 (#755) ## 1.0.4 * python-build: Add PyPy 5.6.0 (#751) * python-build: Add PyPy3 3.5 nightlies (`pypy3.5-c-jit-latest` #737) * python-build: Add Stackless 2.7.12 (#753) * python-build: Add Stackless 2.7.11 * python-build: Add Stackless 2.7.10 * python-build: Add Pyston 0.6.0 * python-build: Add CPython 3.6.0b4 (#762) ## 1.0.3 * python-build: Add CPython 3.6.0b3 (#731, #744) * python-build: Add PyPy3.3 5.5-alpha (#734, #736) * python-build: Stop specifying `--enable-unicode=ucs4` on OS X (#257, #726) * python-build: Fix 3.6-dev and add 3.7-dev (#729, #730) * python-build: Add a patch for https://bugs.python.org/issue26664 (#725) * python-build: Add Pyston 0.5.1 (#718) * python-build: Add Stackless 3.4.2 (#720) * python-build: Add IronPython 2.7.6.3 (#716) * python-build: Add Stackless 2.7.9 (#714) ## 1.0.2 * python-build: Add CPython 3.6.0b1 (#699) * python-build: Add anaconda[23] 4.1.1 (#701, #702) * python-build: Add miniconda[23] 4.1.11 (#703, #704, #706) * python-build: Remove `bin.orig` if exists to fix an issue with `--enable-framework` (#687, #700) ## 1.0.1 * python-build: Add CPython 3.6.0a4 (#673) * python-build: Add PyPy2 5.4, 5.4.1 (#683, #684, #695, #697) * python-build: Add PyPy Portable 5.4, 5.4.1 (#685, #686, #696) * python-build: Make all HTTP source URLs to HTTPS (#680) ## 1.0.0 * pyenv: Import latest changes from rbenv as of Aug 15, 2016 (#669) * pyenv: Add workaround for system python at `/bin/python` (#628) * python-build: Import changes from ruby-build v20160602 (#668) ## 20160726 * python-build: pypy-5.3.1: Remove stray text (#648) * python-build: Add CPython 3.6.0a3 (#657) * python-build: Add anaconda[23]-4.1.0 * pyenv: Keep using `.tar.gz` archives if tar doesn't support `-J` (especially on BSD) (#654, #663) * pyenv: Fixed conflict between pyenv-virtualenv's `rehash` hooks of `envs.bash` * pyenv: Write help message of `sh-*` commands to stdout properly (#650, #651) ## 20160629 * python-build: Added CPython 2.7.12 (#645) * python-build: Added PyPy 3.5.1 (#646) * python-build: Added PyPy Portable 5.3.1 ## 20160628 * python-build: Added PyPy3.3 5.2-alpha1 (#631) * python-build: Added CPython 2.7.12rc1 * python-build: Added CPython 3.6.0a2 (#630) * python-build: Added CPython 3.5.2 (#643) * python-build: Added CPython 3.4.5 (#643) * python-build: Added PyPy2 5.3 (#626) * pyenv: Skip creating shims for system executables bundled with Anaconda rather than ignoring them in `pyenv-which` (#594, #595, #599) * python-build: Configured GCC as a requirement to build CPython prior to 2.4.4 (#613) * python-build: Use `aria2c` - ultra fast download utility if available (#534) ## 20160509 * python-build: Fixed wrong SHA256 of `pypy-5.1-linux_x86_64-portable.tar.bz2` (#586, #587) * python-build: Added miniconda[23]-4.0.5 * python-build: Added PyPy (Portable) 5.1.1 (#591, #592, #593) ## 20160422 * python-build: Added PyPy 5.1 (#579) * python-build: Added PyPy 5.1 Portable * python-build: Added PyPy 5.0.1 (#558) * python-build: Added PyPy 5.0.1 Portable * python-build: Added PyPy 5.0 Portable * python-build: Added anaconda[23]-4.0.0 (#572) * python-build: Added Jython 2.7.1b3 (#557) ## 20160310 * python-build: Add PyPy-5.0.0 (#555) * pyenv: Import recent changes from rbenv 1.0 (#549) ## 20160303 * python-build: Add anaconda[23]-2.5.0 (#543) * python-build: Import recent changes from ruby-build 20160130 * python-build: Compile with `--enable-unicode=ucs4` by default for CPython (#257, #542) * python-build: Switch download URL of Continuum products from HTTP to HTTPS (#543) * python-build: Added pypy-dev special case in pyenv-install to use py27 (#547) * python-build: Upgrade OpenSSL to 1.0.2g (#550) ## 20160202 * pyenv: Run rehash automatically after `conda install` * python-build: Add CPython 3.4.4 (#511) * python-build: Add anaconda[23]-2.4.1, miniconda[23]-3.19.0 * python-build: Fix broken build definitions of CPython/Stackless 3.2.x (#531) ### 20151222 * pyenv: Merge recent changes from rbenv as of 2015-12-14 (#504) * python-build: Add a `OPENSSL_NO_SSL3` patch for CPython 2.6, 2.7, 3.0, 3.1, 3.2 and 3.3 series (#507, #511) * python-build: Stopped using mirror at pyenv.github.io for CPython since http://www.python.org is on fast.ly ### 20151210 * pyenv: Add a default hook for Anaconda to look for original `$PATH` (#491) * pyenv: Skip virtualenv aliases on `pyenv versions --skip-aliases` (pyenv/pyenv-virtualenv#126) * python-build: Add CPython 2.7.11, 3.5.1 (#494, #498) * python-build: Update OpenSSL to 1.0.1q (#496) * python-build: Adding SSL patch to build 2.7.3 on Debian (#495) ### 20151124 * pyenv: Import recent changes from rbenv 5fb9c84e14c8123b2591d22e248f045c7f8d8a2c * pyenv: List anaconda-style virtual environments as a version in pyenv (#471) * python-build: Import recent changes from ruby-build v20151028 * python-build: Add PyPy 4.0.1 (#489) * python-build: Add `miniconda*-3.18.3` (#477) * python-build: Add CPython 2.7.11 RC1 ### 20151105 * python-build: Add anaconda2-2.4.0 and anacondaa3-2.4.0 * python-build: Add Portable PyPy 4.0 (#472) ### 20151103 * python-build: Add PyPy 4.0.0 (#463) * python-build: Add Jython 2.7.1b2 * python-build: Add warning about setuptools issues on CPython 3.0.1 on OS X (#456) ### 20151006 * pyenv: Different behaviour when invoking .py script through symlink (#379, #404) * pyenv: Enabled Gitter on the project (#436, #444) * python-build: Add Jython 2.7.1b1 * python-build: Install OpenSSL on OS X if no proper version is available (#429) ### 20150913 * python-build: Add CPython 3.5.0 * python-build: Remove CPython 3.5.0 release candidates * python-build: Fixed anaconda3 repo's paths (#439) * python-build: Add miniconda-3.16.0 and miniconda3-3.16.0 (#435) ### 20150901 * python-build: Add CPython 3.5.0 release candidates; 3.5.0rc1 and 3.5.0rc2 * python-build: Disabled `_FORTITY_SOURCE` to fix CPython >= 2.4, <= 2.4.3 builds (#422) * python-build: Removed CPython 3.5.0 betas * python-build: Add miniconda-3.10.1 and miniconda3-3.10.1 (#414) * python-build: Add PyPy 2.6.1 (#433) * python-build: Add PyPy-STM 2.3 and 2.5.1 (#428) * python-build: Ignore user's site-packages on ensurepip/get-pip (#411) * pyenv: Import recent changes from ruby-build v20150818 #### 20150719 * python-build: Add CPython `3.6-dev` (#413) * python-build: Add Anaconda/Anaconda3 2.3.0 * python-build: Fix download URL of portable PyPy 2.6 (fixes #389) * python-build: Use custom `MACOSX_DEPLOYMENT_TARGET` if defined (#312) * python-build: Use original CPython repository instead of mirror at bitbucket.org as the source of `*-dev` versions (#409) * python-build: Pin pip version to 1.5.6 for python 3.1.5 (#351) #### 20150601 * python-build: Add PyPy 2.6.0 * python-build: Add PyPy 2.5.1 portable * python-build: Add CPython 3.5.0 beta releases; 3.5.0b1 and 3.5.0b2 * python-build: Removed CPython 3.5.0 alpha releases * python-build: Fix inverted condition for `--altinstall` of ensurepip (#255) * python-build: Skip installing `setuptools` by `ez_setup.py` explicitly (fixes #381) * python-build: Import changes from ruby-build v20150519 #### 20150524 * pyenv: Improve `pyenv version`, if there is one missing (#290) * pyenv: Improve pip-rehash to handle versions in command, like `pip2` and `pip3.4` (#368) * python-build: Add CPython release; 2.7.10 (#380) * python-build: Add Miniconda/Miniconda3 3.9.1 and Anaconda/Anaconda3 2.2.0 (#375, #376) #### 20150504 * python-build: Add Jython 2.7.0 * python-build: Add CPython alpha release; 3.5.0a4 * python-build: Add CPython 3.1, 3.1.1, and 3.1.2 * python-build: Fix pip version to 1.5.6 for CPython 3.1.x (#351) #### 20150326 * python-build: Add Portable PyPy binaries from https://github.com/squeaky-pl/portable-pypy (#329) * python-build: Add CPython alpha release; 3.5.0a2 (#328) * python-build: Add pypy-2.5.1 (fixes #338) * pyenv: Import recent changes from rbenv 4d72eefffc548081f6eee2e54d3b9116b9f9ee8e #### 20150226 * python-build: Add CPython release; 3.4.3 (#323) * python-build: Add CPython alpha release; 3.5.0a1 (#324) * python-build: Add Miniconda/Miniconda3 3.8.3 (#318) #### 20150204 * python-build: Add PyPy 2.5.0 release (#311) * python-build: Add note about `--enable-shared` and RPATH (#217) * python-build: Fix regression of `PYTHON_MAKE_INSTALL_TARGET` and add test (#255) * python-build: Symlink `pythonX.Y-config` to `python-config` if `python-config` is missing (#296) * python-build: Latest `pip` can't be installed into `3.0.1` (#309) #### 20150124 * python-build: Import recent changes from ruby-build v20150112 * python-build: Prevent adding `/Library/Python/X.X/site-packages` to `sys.path` when `--enable-framework` is enabled on OS X. Thanks @s1341 (#292) * python-build: Add new IronPython release; 2.7.5 #### 20141211 * pyenv: Add built-in `pip-rehash` feature. You don't need to install [pyenv-pip-rehash](https://github.com/pyenv/pyenv-pip-rehash) anymore. * python-build: Add new CPython release; 2.7.9 (#284) * python-build: Add new PyPy releases; pypy3-2.4.0, pypy3-2.4.0-src (#277) * python-build: Add build definitions of PyPy nightly build #### 20141127 * python-build: Add new CPython release candidates; 2.7.9rc1 (#276) #### 20141118 * python-build: Fix broken `setup_builtin_patches` (#270) * python-build: Add a patch to allow building 2.6.9 on OS X 10.9 with `--enable-framework` (#269, #271) #### 20141106 * pyenv: Optimize pyenv-which. Thanks to @blueyed (#129) * python-build: Add Miniconda/Miniconda3 3.7.0 and Anaconda/Anaconda3 2.1.0 (#260) * python-build: Use HTTPS for mirror download URLs (#262) * python-build: Set `rpath` for `--shared` build of PyPy (#244) * python-build: Support `make altinstall` when building CPython/Stackless (#255) * python-build: Import recent changes from ruby-build v20141028 (#265) #### 20141012 * python-build: Add new CPython releases; 3.2.6, 3.3.6 (#253) #### 20141011 * python-build: Fix build error of Stackless 3.3.5 on OS X (#250) * python-build: Add new Stackless releases; stackless-2.7.7, stackless-2.7.8, stackless-3.4.1 (#252) #### 20141008 * python-build: Add new CPython release; 3.4.2 (#251) * python-build: Add new CPython release candidates; 3.2.6rc1, 3.3.6rc1 (#248) #### 20140924 * pyenv: Fix an unintended behavior when user does not have write permission on `$PYENV_ROOT` (#230) * pyenv: Fix a zsh completion issue (#232) * python-build: Add new PyPy release; pypy-2.4.0, pypy-2.4.0-src (#241) #### 20140825 * pyenv: Fix zsh completion with multiple words (#215) * python-build: Display the package name of `hg` as `mercurial` in message (#212) * python-build: Unset `PIP_REQUIRE_VENV` during build (#216) * python-build: Set `MACOSX_DEPLOYMENT_TARGET` from the product version of OS X (#219, #220) * python-build: Add new Jython release; jython2.7-beta3 (#223) #### 20140705 * python-build: Add new CPython release; 2.7.8 (#201) * python-build: Support `SETUPTOOLS_VERSION` and `PIP_VERSION` to allow installing specific version of setuptools/pip (#202) #### 20140628 * python-build: Add new Anaconda releases; anaconda-2.0.1, anaconda3-2.0.1 (#195) * python-build: Add new PyPy3 release; pypy3-2.3.1 (#198) * python-build: Add ancient CPython releases; 2.1.3, 2.2.3, 2.3.7 (#199) * python-build: Use `ez_setup.py` and `get-pip.py` instead of installing them from tarballs (#194) * python-build: Add support for command-line options to `ez_setup.py` and `get-pip.py` (#200) #### 20140615 * python-build: Update default setuptools version (4.0.1 -> 5.0) (#190) #### 20140614 * pyenv: Change versioning schema (`v0.4.0-YYYYMMDD` -> `vYYYYMMDD`) * python-build: Add new PyPy release; pypy-2.3.1, pypy-2.3.1-src * python-build: Create symlinks for executables with version suffix (#182) * python-build: Use SHA2 as default digest algorithm to verify downloaded archives * python-build: Update default setuptools version (4.0 -> 4.0.1) (#183) * python-build: Import recent changes from ruby-build v20140524 (#184) #### 0.4.0-20140602 * python-build: Add new Anaconda/Anaconda3 releases; anaconda-2.0.0, anaconda3-2.0.0 (#179) * python-build: Add new CPython release; 2.7.7 (#180) * python-build: Update default setuptools version (3.6 -> 4.0) (#181) * python-build: Respect environment variables of `CPPFLAGS` and `LDFLAGS` (#168) * python-build: Support for xz-compressed Python tarballs (#177) #### 0.4.0-20140520 * python-build: Add new CPython release; 3.4.1 (#170, #171) * python-build: Update default pip version (1.5.5 -> 1.5.6) (#169) #### 0.4.0-20140516 * pyenv: Prefer gawk over awk if both are available. * python-build: Add new PyPy release; pypy-2.3, pypy-2.3-src (#162) * python-build: Add new Anaconda release; anaconda-1.9.2 (#155) * python-build: Add new Miniconda releases; miniconda-3.3.0, minoconda-3.4.2, miniconda3-3.3.0, miniconda3-3.4.2 * python-build: Add new Stackless releases; stackless-2.7.3, stackless-2.7.4, stackless-2.7.5, stackless-2.7.6, stackless-3.2.5, stackless-3.3.5 (#164) * python-build: Add IronPython versions (setuptools and pip will work); ironpython-2.7.4, ironpython-dev * python-build: Add new Jython beta release; jython-2.7-beta2 * python-build: Update default setuptools version (3.4.1 -> 3.6) * python-build: Update default pip version (1.5.4 -> 1.5.5) * python-build: Update GNU Readline (6.2 -> 6.3) * python-build: Import recent changes from ruby-build v20140420 #### 0.4.0-20140404 * pyenv: Reads only the first word from version file. This is as same behavior as rbenv. * python-build: Fix build of Tkinter with Tcl/Tk 8.6 (#131) * python-build: Fix build problem with Readline 6.3 (#126, #131, #149, #152) * python-build: Do not exit with errors even if some of modules are absent (#131) * python-build: MacOSX was misspelled as MaxOSX in `anaconda_architecture` (#136) * python-build: Use default `cc` as the C Compiler to build CPython (#148, #150) * python-build: Display value from `pypy_architecture` and `anaconda_architecture` on errors (pyenv/pyenv-virtualenv#18) * python-build: Remove old development version; 2.6-dev * python-build: Update default setuptools version (3.3 -> 3.4.1) #### 0.4.0-20140317 * python-build: Add new CPython releases; 3.4.0 (#133) * python-build: Add new Anaconda releases; anaconda-1.9.0, anaconda-1.9.1 * python-build: Add new Miniconda releases; miniconda-3.0.4, miniconda-3.0.5, miniconda3-3.0.4, miniconda3-3.0.5 * python-build: Update default setuptools version (3.1 -> 3.3) #### 0.4.0-20140311 * python-build: Add new CPython releases; 3.3.5 (#127) * python-build: Add new CPython release candidates; 3.4.0rc1, 3.4.0rc2, 3.4.0rc3 * python-build: Update default setuptools version (2.2 -> 3.1) * python-build: Update default pip version (1.5.2 -> 1.5.4) * python-build: Import recent changes from ruby-build v20140225 #### 0.4.0-20140211 * python-build: Add new CPython release candidates; 3.3.4, 3.4.0b3 * python-build: Add [Anaconda](https://store.continuum.io/cshop/anaconda/) and [Miniconda](http://repo.continuum.io/miniconda/) binary distributions * python-build: Display error if the wget does not support Server Name Indication (SNI) to avoid SSL verification error when downloading from https://pypi.python.org. (#60) * python-build: Update default setuptools version (2.1 -> 2.2) * python-build: Update default pip version (1.5.1 -> 1.5.2) * python-build: Import recent changes from ruby-build v20140204 #### 0.4.0-20140123 * pyenv: Always append the directory at the top of the `$PATH` to return proper value for `sys.executable` (#98) * pyenv: Unset `GREP_OPTIONS` to avoid issues of conflicting options (#101) * python-build: Install `pip` with using `ensurepip` if available * python-build: Add support for framework installation (`--enable-framework`) of CPython (#55, #99) * python-build: Import recent changes from ruby-build v20140110.1 * python-build: Import `bats` tests from ruby-build v20140110.1 #### 0.4.0-20140110.1 * python-build: Fix build error of CPython 2.x on the platform where the `gcc` is llvm-gcc. #### 0.4.0-20140110 * pyenv: Reliably detect parent shell in `pyenv init` (#93) * pyenv: Import recent changes from rbenv 0.4.0 * pyenv: Import `bats` tests from rbenv 0.4.0 * python-build: Add new CPython releases candidates; 3.4.0b2 * python-build: Add ruby-build style patching feature (#91) * python-build: Set `RPATH` if `--enable-shared` was given (#65, #66, 82) * python-build: Update default setuptools version (2.0 -> 2.1) * python-build: Update default pip version (1.4.1 -> 1.5) * python-build: Activate friendly CPython during build if the one is not activated (8fa6b4a1847851919ad7857c6c42ed809a4d277b) * python-build: Fix broken install.sh * python-build: Import recent changes from ruby-build v20131225.1 * version-ext-compat: Removed from default plugin. Please use [pyenv-version-ext](https://github.com/pyenv/pyenv-version-ext) instead. #### 0.4.0-20131217 * python-build: Fix broken build of CPython 3.3+ on Darwin * python-build: Not build GNU Readline uselessly on Darwin #### 0.4.0-20131216 * python-build: Add new CPython releases; 3.3.3 (#80) * python-build: Add new CPython releases candidates; 3.4.0b1 * python-build: Add new PyPy releases; pypy-2.2.1, pypy-2.2.1-src * python-build: Update default setuptools version (1.3.2 -> 2.0) * python-build: Imported recent changes from ruby-build v20131211 * pyenv: Fix pyenv-prefix to trim "/bin" in `pyenv prefix system` (#88) #### 0.4.0-20131116 * python-build: Add new CPython releases; 2.6.9, 2.7.6 (#76) * python-build: Add new CPython release candidates; 3.3.3-rc1, 3.3.3-rc2 * python-build: Add new PyPy releases; pypy-2.2, pypy-2.2-src (#77) * python-build: Update default setuptools version (1.1.6 -> 1.3.2) * python-build: Imported recent changes from ruby-build v20131030 #### 0.4.0-20131023 * pyenv: Improved [fish shell](http://fishshell.com/) support * python-build: Add new PyPy releases; pypy-2.1, pypy-2.1-src, pypy3-2.1-beta1, pypy3-2.1-beta1-src * python-build: Add ancient versions; 2.4, 2.4.1, 2.4.3, 2.4.4 and 2.4.5 * python-build: Add alpha releases; 3.4.0a2, 3.4.0a3, 3.4.0a4 * python-build: Update default pip version (1.4 -> 1.4.1) * python-build: Update default setuptools version (0.9.7 -> 1.1.6) #### 0.4.0-20130726 * pyenv: Fix minor issue of variable scope in `pyenv versions` * python-build: Update base version to ruby-build v20130628 * python-build: Use brew managed OpenSSL and GNU Readline if they are available * python-build: Fix build of CPython 3.3+ on OS X (#29) * python-build: Fix build of native modules of CPython 2.5 on OS X (#33) * python-build: Fix build of CPython 2.6+ on openSUSE (#36) * python-build: Add ancient versions; 2.4.2 and 2.4.6. The build might be broken. (#37) * python-build: Update default pip version (1.3.1 -> 1.4) * python-build: Update default setuptools version (0.7.2 -> 0.9.7) #### 0.4.0-20130613 * pyenv: Changed versioning schema. There are two parts; the former is the base rbenv version, and the latter is the date of release. * python-build: Add `--debug` option to build CPython with debug symbols. (#11) * python-build: Add new CPython versions: 2.7.4, 2.7.5, 3.2.4, 3.2.5, 3.3.1, 3.3.2 (#12, #17) * python-build: Add `svnversion` patch for old CPython versions (#14) * python-build: Enable mirror by default for faster download (#20) * python-build: Add `OPENSSL_NO_SSL2` patch for old CPython versions (#22) * python-build: Install GNU Readline on Darwin if the system one is broken (#23) * python-build: Bundle patches in `${PYTHON_BUILD_ROOT}/share/python-build/patches` and improve patching mechanism (`apply_patches`). * python-build: Verify native extensions after building. (`build_package_verify_py*`) * python-build: Add `install_hg` to install package from Mercurial repository * python-build: Support building Jython and PyPy. * python-build: Add new CPython development versions: 2.6-dev, 2.7-dev, 3.1-dev, 3.2-dev, 3.3-dev, 3.4-dev * python-build: Add new Jython development versions: jython-2.5.4-rc1, jython-2.5-dev, jython-2.7-beta1, jython-dev * python-build: Add new PyPy versions: pypy-1.5{,-src}, pypy-1.6, pypy-1.7, pypy-2.0{,-src}, pypy-2.0.1{,-src}, pypy-2.0.2{,-src} * python-build: Add new PyPy development versions: pypy-1.7-dev, pypy-1.8-dev, pypy-1.9-dev, pypy-2.0-dev, pypy-dev, pypy-py3k-dev * python-build: Add new Stackless development versions: stackless-2.7-dev, stackless-3.2-dev, stackless-3.3-dev, stackless-dev * python-build: Update default pip version (1.2.1 -> 1.3.1) * python-build: Update default setuptools version (0.6.34 (distribute) -> 0.7.2 ([new setuptools](https://bitbucket.org/pypa/setuptools))) #### 0.2.0 (February 18, 2013) * Import changes from rbenv 0.4.0. #### 0.1.2 (October 23, 2012) * Add push/pop for version stack management. * Support multiple versions via environment variable. * Now GCC is not a requirement to build CPython and Stackless. #### 0.1.1 (September 3, 2012) * Support multiple versions of Python at a time. #### 0.1.0 (August 31, 2012) * Initial public release. pyenv-2.5.4/COMMANDS.md000066400000000000000000000264411476513315000144220ustar00rootroot00000000000000# Command Reference Like `git`, the `pyenv` command delegates to subcommands based on its first argument. The most common subcommands are: * [`pyenv help`](#pyenv-help) * [`pyenv commands`](#pyenv-commands) * [`pyenv local`](#pyenv-local) * [`pyenv global`](#pyenv-global) * [`pyenv shell`](#pyenv-shell) * [`pyenv install`](#pyenv-install) * [`pyenv uninstall`](#pyenv-uninstall) * [`pyenv rehash`](#pyenv-rehash) * [`pyenv version`](#pyenv-version) * [`pyenv versions`](#pyenv-versions) * [`pyenv which`](#pyenv-which) * [`pyenv whence`](#pyenv-whence) * [`pyenv exec`](#pyenv-exec) * [`pyenv root`](#pyenv-root) * [`pyenv prefix`](#pyenv-prefix) * [`pyenv latest`](#pyenv-latest) * [`pyenv hooks`](#pyenv-hooks) * [`pyenv shims`](#pyenv-shims) * [`pyenv init`](#pyenv-init) * [`pyenv completions`](#pyenv-completions) ## `pyenv help` List all available pyenv commands along with a brief description of what they do. Run `pyenv help ` for information on a specific command. For full documentation, see: https://github.com/pyenv/pyenv#readme ## `pyenv commands` Lists all available pyenv commands. ## `pyenv local` Sets a local application-specific Python version by writing the version name to a `.python-version` file in the current directory. This version overrides the global version, and can be overridden itself by setting the `PYENV_VERSION` environment variable or with the `pyenv shell` command. $ pyenv local 2.7.6 When run without a version number, `pyenv local` reports the currently configured local version. You can also unset the local version: $ pyenv local --unset Previous versions of pyenv stored local version specifications in a file named `.pyenv-version`. For backwards compatibility, pyenv will read a local version specified in an `.pyenv-version` file, but a `.python-version` file in the same directory will take precedence. ### `pyenv local` (advanced) You can specify multiple versions as local Python at once. Let's say if you have two versions of 2.7.6 and 3.3.3. If you prefer 2.7.6 over 3.3.3, $ pyenv local 2.7.6 3.3.3 $ pyenv versions system * 2.7.6 (set by /Users/yyuu/path/to/project/.python-version) * 3.3.3 (set by /Users/yyuu/path/to/project/.python-version) $ python --version Python 2.7.6 $ python2.7 --version Python 2.7.6 $ python3.3 --version Python 3.3.3 or, if you prefer 3.3.3 over 2.7.6, $ pyenv local 3.3.3 2.7.6 $ pyenv versions system * 2.7.6 (set by /Users/yyuu/path/to/project/.python-version) * 3.3.3 (set by /Users/yyuu/path/to/project/.python-version) venv27 $ python --version Python 3.3.3 $ python2.7 --version Python 2.7.6 $ python3.3 --version Python 3.3.3 You can use the `-f/--force` flag to force setting versions even if some aren't installed. This is mainly useful in special cases like provisioning scripts. ## `pyenv global` Sets the global version of Python to be used in all shells by writing the version name to the `~/.pyenv/version` file. This version can be overridden by an application-specific `.python-version` file, or by setting the `PYENV_VERSION` environment variable. $ pyenv global 2.7.6 The special version name `system` tells pyenv to use the system Python (detected by searching your `$PATH`). When run without a version number, `pyenv global` reports the currently configured global version. ### `pyenv global` (advanced) You can specify multiple versions as global Python at once. Let's say if you have two versions of 2.7.6 and 3.3.3. If you prefer 2.7.6 over 3.3.3, $ pyenv global 2.7.6 3.3.3 $ pyenv versions system * 2.7.6 (set by /Users/yyuu/.pyenv/version) * 3.3.3 (set by /Users/yyuu/.pyenv/version) $ python --version Python 2.7.6 $ python2.7 --version Python 2.7.6 $ python3.3 --version Python 3.3.3 or, if you prefer 3.3.3 over 2.7.6, $ pyenv global 3.3.3 2.7.6 $ pyenv versions system * 2.7.6 (set by /Users/yyuu/.pyenv/version) * 3.3.3 (set by /Users/yyuu/.pyenv/version) venv27 $ python --version Python 3.3.3 $ python2.7 --version Python 2.7.6 $ python3.3 --version Python 3.3.3 ## `pyenv shell` Sets a shell-specific Python version by setting the `PYENV_VERSION` environment variable in your shell. This version overrides application-specific versions and the global version. $ pyenv shell pypy-2.2.1 When run without a version number, `pyenv shell` reports the current value of `PYENV_VERSION`. You can also unset the shell version: $ pyenv shell --unset Note that you'll need pyenv's shell integration enabled (step 3 of the installation instructions) in order to use this command. If you prefer not to use shell integration, you may simply set the `PYENV_VERSION` variable yourself: $ export PYENV_VERSION=pypy-2.2.1 ### `pyenv shell` (advanced) You can specify multiple versions via `PYENV_VERSION` at once. Let's say if you have two versions of 2.7.6 and 3.3.3. If you prefer 2.7.6 over 3.3.3, $ pyenv shell 2.7.6 3.3.3 $ pyenv versions system * 2.7.6 (set by PYENV_VERSION environment variable) * 3.3.3 (set by PYENV_VERSION environment variable) $ python --version Python 2.7.6 $ python2.7 --version Python 2.7.6 $ python3.3 --version Python 3.3.3 or, if you prefer 3.3.3 over 2.7.6, $ pyenv shell 3.3.3 2.7.6 $ pyenv versions system * 2.7.6 (set by PYENV_VERSION environment variable) * 3.3.3 (set by PYENV_VERSION environment variable) venv27 $ python --version Python 3.3.3 $ python2.7 --version Python 2.7.6 $ python3.3 --version Python 3.3.3 ## `pyenv install` Install a Python version (using [`python-build`](https://github.com/pyenv/pyenv/tree/master/plugins/python-build)). Usage: pyenv install [-f] [-kvp] pyenv install [-f] [-kvp] pyenv install -l|--list -l/--list List all available versions -f/--force Install even if the version appears to be installed already -s/--skip-existing Skip the installation if the version appears to be installed already python-build options: -k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation (defaults to $PYENV_ROOT/sources) -v/--verbose Verbose mode: print compilation status to stdout -p/--patch Apply a patch from stdin before building -g/--debug Build a debug version To list the all available versions of Python, including Anaconda, Jython, pypy, and stackless, use: $ pyenv install --list Then install the desired versions: $ pyenv install 2.7.6 $ pyenv install 2.6.8 $ pyenv versions system 2.6.8 * 2.7.6 (set by /home/yyuu/.pyenv/version) You can also install the latest version of Python in a specific version line by supplying a prefix instead of a complete name: $ pyenv install 3.10 See the [`pyenv latest` documentation](#pyenv-latest) for details on prefix resolution. An older option is to use the `:latest` syntax. For example, to install the latest patch version for Python 3.8 you could do: pyenv install 3.8:latest To install the latest major release for Python 3 try: pyenv install 3:latest ## `pyenv uninstall` Uninstall Python versions. Usage: pyenv uninstall [-f|--force] ... -f Attempt to remove the specified version without prompting for confirmation. If the version does not exist, do not display an error message. ## `pyenv rehash` Installs shims for all Python binaries known to pyenv (i.e., `~/.pyenv/versions/*/bin/*`). Run this command after you install a new version of Python, or install a package that provides binaries. $ pyenv rehash ## `pyenv version` Displays the currently active Python version, along with information on how it was set. $ pyenv version 2.7.6 (set by /home/yyuu/.pyenv/version) ## `pyenv versions` Lists all Python versions known to pyenv, and shows an asterisk next to the currently active version. $ pyenv versions 2.5.6 2.6.8 * 2.7.6 (set by /home/yyuu/.pyenv/version) 3.3.3 jython-2.5.3 pypy-2.2.1 ## `pyenv which` Displays the full path to the executable that pyenv will invoke when you run the given command. $ pyenv which python3.3 /home/yyuu/.pyenv/versions/3.3.3/bin/python3.3 Use --nosystem argument in case when you don't need to search command in the system environment. ## `pyenv whence` Lists all Python versions with the given command installed. $ pyenv whence 2to3 2.6.8 2.7.6 3.3.3 ## `pyenv exec` Usage: pyenv exec [arg1 arg2...] Runs an executable by first preparing PATH so that the selected Python version's `bin` directory is at the front. For example, if the currently selected Python version is 3.9.7: pyenv exec pip install -r requirements.txt is equivalent to: PATH="$PYENV_ROOT/versions/3.9.7/bin:$PATH" pip install -r requirements.txt ## `pyenv root` Displays the root directory where versions and shims are kept. $ pyenv root /home/user/.pyenv ## `pyenv prefix` Displays the directories where the given Python versions are installed, separated by colons. If no version is given, `pyenv prefix` displays the locations of the currently selected versions. $ pyenv prefix 3.9.7 /home/user/.pyenv/versions/3.9.7 ## `pyenv latest` Displays the latest installed or known version with the given prefix Usage: pyenv latest [-k|--known] [-q|--quiet] -k/--known Select from all known versions instead of installed -q/--quiet Do not print an error message on resolution failure Only full prefixes are searched: in the actual name, the given prefix must be followed by a dot or a dash. Prereleases and versions with specific suffixes (e.g. `-src`) are ignored. ## `pyenv hooks` Lists installed hook scripts for a given pyenv command. Usage: pyenv hooks ## `pyenv shims` List existing pyenv shims. Usage: pyenv shims [--short] $ pyenv shims /home/user/.pyenv/shims/2to3 /home/user/.pyenv/shims/2to3-3.9 /home/user/.pyenv/shims/idle /home/user/.pyenv/shims/idle3 /home/user/.pyenv/shims/idle3.9 /home/user/.pyenv/shims/pip /home/user/.pyenv/shims/pip3 /home/user/.pyenv/shims/pip3.9 /home/user/.pyenv/shims/pydoc /home/user/.pyenv/shims/pydoc3 /home/user/.pyenv/shims/pydoc3.9 /home/user/.pyenv/shims/python /home/user/.pyenv/shims/python3 /home/user/.pyenv/shims/python3.9 /home/user/.pyenv/shims/python3.9-config /home/user/.pyenv/shims/python3.9-gdb.py /home/user/.pyenv/shims/python3-config /home/user/.pyenv/shims/python-config ## `pyenv init` Configure the shell environment for pyenv Usage: eval "$(pyenv init [-|--path] [--no-push-path] [--no-rehash] [])" - Initialize shims directory, print PYENV_SHELL variable, completions path and shell function --path Print shims path --no-push-path Do not push shim to the start of PATH if they're already there --no-rehash Add no rehash command to output ## `pyenv completions` Lists available completions for a given pyenv command. Usage: pyenv completions [arg1 arg2...] pyenv-2.5.4/CONDUCT.md000066400000000000000000000064641476513315000143230ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting one of the project maintainers listed below. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Project Maintainers * Yamashita, Yuu <> * Daniel Hahler <> * Josh Friend <> ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ pyenv-2.5.4/CONTRIBUTING.md000066400000000000000000000151601476513315000151240ustar00rootroot00000000000000General guidance ================ * The usual principles of respecting existing conventions and making sure that your changes are in line with the overall product design apply when contributing code to Pyenv. * We are limited to Bash 3.2 features That's because that's the version shipped with MacOS. (They didn't upgrade past it and switched to Zsh because later versions are covered by GPLv3 which has additional restrictions unacceptable for Apple.) You can still add performance optimizations etc that take advantage of newer Bash features as long as there is a fallback execution route for Bash 3. * Be extra careful when submitting logic specific for the Apple Silicon platform As of this writing, Github Actions do not support it and only one team member has the necessary hardware. So we may be unable to test your changes and may have to take your word for it. Formatting PRs ============== We strive to keep commit history one-concern-per-commit to keep it meaningful and easy to follow. If a pull request (PR) addresses a single concern (the typical case), we usually squash commits from it together when merging so its commit history doesn't matter. If however a PR addresses multiple separate concerns, each of them should be presented as a separate commit. Adding multiple new Python releases of the same flavor is okay with either a single or multiple commits. Authoring installation scripts ============================== Adding new Python release support --------------------------------- The easiest way to add support for a new Python release is to copy the script from the previous one and adjust it as necessary. In many cases, just changing version numbers, URLs and hashes is enough. Do pay attention to other "magic numbers" that may be present in a script -- e.g. the set of architectures and OS versions supported by a release -- since those change from time to time, too. Make sure to also copy any patches for the previous release that still apply to the new one. Typically, a patch no longer applies if it addresses a problem that's already fixed in the new release. For prereleases, we only create an entry for the latest prerelease in a specific version line. When submitting a newer prerelease, replace the older one. Adding version-specific fixes/patches ------------------------------------- We accept fixes to issues in specific Python releases that prevent users from using them with Pyenv. In the default configuration for a Python release, we strive to provide as close to vanilla experience as practical, to maintain [the principle of the least surprise](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). As such, any such fixes: * Must not break or degrade (e.g. disable features) the build in any of the environments that the release officially supports * Must not introduce incompatibilities with the vanilla release (including binary incompatibilities) * Should not patch things unnecessarily, to minimize the risk of the aforementioned undesirable side effects. * E.g. if the fix is for a specific environment, its logic ought to only fire in this specific environment and not touch execution paths for other environments. * As such, it's advisable to briefly explain in the PR what each added patch does and why it is necessary to fix the declared problem Generally, version-specific fixes belong in the scripts for the affected releases and/or patches for them -- this guarantees that their effect is limited to only those releases.

Backporting upstream patches

Usually, this is the easiest way to backport a fix for a problem that is fixed in a newer release. * Clone Python, check out the tag for the appropriate release and create a branch * Apply existing patches if there are any (with either `patch` or `git am`) and commit * Cherry-pick the upstream commit that fixes the problem in a newer release * Commit and `git format-patch` * Commit the generated patch file into Pyenv, test your changes and submit a PR Deprecation policy ------------------ We do not provide official support for EOL releases and environments or otherwise provide any kind of extended support for old Python releases. We do however accept fixes from interested parties that would allow running older, including EOL, releases in environments that they do not officially support. In addition to the above requirements for release-specific fixes, * Such a fix must not add maintenance burden (e.g. add new logic to `python-build` that has to be kept there indefinitely) * Unless the added logic is useful for both EOL and non-EOL releases. In this case, it will be considered as being primarily an improvement for non-EOL releases. * Support is provided on a "best effort" basis: we do not actively maintain these fixes but won't actively break them, either, and will accept any corrections. Since old releases never change, it's pretty safe to assume that the fixes will continue to work until a later version of an environment introduces further incompatible changes. Advanced changes / adding new Python flavor support --------------------------------------------------- An installation script is sourced from `python-build`. All installation scripts are based on the same logic: 1. Select the source to download and other variable parameters as needed. This includes showing an error if the user's environment (OS, architecture) is not supported by the release. Binary releases that only officially support specific distro(s) typically show a warning in other distros instead. 2. Run one of the `install_*` shell functions `install_*` shell functions defined in `python-build` install Python from different kinds of sources -- compressed package (binary or source), upstream installation script, VCS checkout. Pick one that's the most appropriate for your packaging. Each of them accepts a couple of function-specific arguments which are followed by arguments that constitute the build sequence. Each `` in the build sequence corresponds to the `install_*_` function in `python-build`. Check what's available and add any functions with logic specific to your flavor if needed. We strive to keep out of `python-build` parts of build logic that are release-specific and/or tend to change abruptly between releases -- e.g. sets of supported architectures and other software's versions. This results in logic duplication between installation scripts -- but since old releases never change once released, this doesn't really add to the maintenance burden. As a rule of thumb, `python-build` can host parts of logic that are expected to stay the same for an indefinite amount of time -- for an entire Python flavor or release line. pyenv-2.5.4/Dockerfile000066400000000000000000000012501476513315000146600ustar00rootroot00000000000000FROM ubuntu:18.04 LABEL maintainer="Chris L. Barnes " ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update -y \ && apt-get install -y \ make \ build-essential \ libssl-dev \ zlib1g-dev \ libbz2-dev \ libreadline-dev \ libsqlite3-dev \ wget \ curl \ llvm \ libncurses5-dev \ libncursesw5-dev \ xz-utils \ tk-dev \ libffi-dev \ liblzma-dev \ python-openssl \ git \ && rm -rf /var/lib/apt/lists/* ENV PYENV_ROOT "/pyenv" ENV PATH "$PYENV_ROOT/bin:$PATH" COPY . /pyenv RUN eval "$(pyenv init -)" pyenv-2.5.4/LICENSE000066400000000000000000000021041476513315000136720ustar00rootroot00000000000000Copyright (c) 2013 Yamashita, Yuu Copyright (c) 2013 Sam Stephenson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pyenv-2.5.4/MAINTENANCE.md000066400000000000000000000021171476513315000147350ustar00rootroot00000000000000Creating a release ================== The release of the new version of Pyenv is done via GitHub Releases. Release checklist: * Start [drafting a new release on GitHub](https://github.com/pyenv/pyenv/releases) to generate a summary of changes. Type the would-be tag name in the "Choose a tag" field and press "Generate release notes" * The summary may need editing. E.g. rephrase entries, delete/merge entries that are too minor or irrelevant to the users (e.g. typo fixes, CI) * Update `CHANGELOG.md` with the new version number and the edited summary (only the changes section) * Push the version number in `libexec/pyenv---version` * Minor version is pushed if there are significant functional changes (not e.g. bugfixes/formula adaptations/supporting niche use cases). * Major version is pushed if there are breaking changes * Commit the changes locally into `master` * Create a new tag locally with the same name as specified in the new release window * Push the changes including the tag * In the still open new release window, press "Publish release". The now-existing tag will be used.pyenv-2.5.4/Makefile000066400000000000000000000016401476513315000143310ustar00rootroot00000000000000.PHONY: test test-build test-unit test-plugin # Do not pass in user flags to build tests. unexport PYTHON_CFLAGS unexport PYTHON_CONFIGURE_OPTS test: test-unit test-plugin test-unit: bats PATH="./bats/bin:$$PATH" test/run test-plugin: bats cd plugins/python-build && $(PWD)/bats/bin/bats $${CI:+--tap} test PYTHON_BUILD_ROOT := $(CURDIR)/plugins/python-build PYTHON_BUILD_OPTS ?= --verbose PYTHON_BUILD_VERSION ?= 3.8-dev PYTHON_BUILD_TEST_PREFIX ?= $(PYTHON_BUILD_ROOT)/test/build/tmp/dist test-build: $(RM) -r $(PYTHON_BUILD_TEST_PREFIX) $(PYTHON_BUILD_ROOT)/bin/python-build $(PYTHON_BUILD_OPTS) $(PYTHON_BUILD_VERSION) $(PYTHON_BUILD_TEST_PREFIX) [ -e $(PYTHON_BUILD_TEST_PREFIX)/bin/python ] $(PYTHON_BUILD_TEST_PREFIX)/bin/python -V [ -e $(PYTHON_BUILD_TEST_PREFIX)/bin/pip ] $(PYTHON_BUILD_TEST_PREFIX)/bin/pip -V bats: git clone --depth 1 --branch v1.2.0 https://github.com/bats-core/bats-core.git bats pyenv-2.5.4/README.md000066400000000000000000000705051476513315000141560ustar00rootroot00000000000000# Simple Python Version Management: pyenv [![Join the chat at https://gitter.im/yyuu/pyenv](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/yyuu/pyenv?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well. This project was forked from [rbenv](https://github.com/rbenv/rbenv) and [ruby-build](https://github.com/rbenv/ruby-build), and modified for Python. ### What pyenv _does..._ * Lets you **change the global Python version** on a per-user basis. * Provides support for **per-project Python versions**. * Allows you to **override the Python version** with an environment variable. * Searches for commands from **multiple versions of Python at a time**. This may be helpful to test across Python versions with [tox](https://pypi.python.org/pypi/tox). ### In contrast with pythonbrew and pythonz, pyenv _does not..._ * **Depend on Python itself.** pyenv was made from pure shell scripts. There is no bootstrap problem of Python. * **Need to be loaded into your shell.** Instead, pyenv's shim approach works by adding a directory to your `PATH`. * **Manage virtualenv.** Of course, you can create [virtualenv](https://pypi.python.org/pypi/virtualenv) yourself, or [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv) to automate the process. ---- ## Table of Contents * **[Installation](#installation)** * [Getting Pyenv](#a-getting-pyenv) * [Linux/UNIX](#linuxunix) * [Automatic Installer](#1-automatic-installer-recommended) * [Basic GitHub Checkout](#2-basic-github-checkout) * [MacOS](#macos) * [Homebrew in macOS](#homebrew-in-macos) * [Windows](#windows) * [Set up your shell environment for Pyenv](#b-set-up-your-shell-environment-for-pyenv) * [Restart your shell](#c-restart-your-shell) * [Install Python build dependencies](#d-install-python-build-dependencies) * [Upgrade Notes](#e-upgrade-notes) * **[Usage](#usage)** * [Install additional Python versions](#install-additional-python-versions) * [Prefix auto-resolution to the latest version](#prefix-auto-resolution-to-the-latest-version) * [Switch between Python versions](#switch-between-python-versions) * [Making multiple versions available](#making-multiple-versions-available) * [Uninstall Python versions](#uninstall-python-versions) * [Other operations](#other-operations) * [Upgrading](#upgrading) * [Upgrading with Homebrew](#upgrading-with-homebrew) * [Upgrading with Installer or Git checkout](#upgrading-with-installer-or-git-checkout) * [Uninstalling pyenv](#uninstalling-pyenv) * [Pyenv plugins](#pyenv-plugins) * **[How It Works](#how-it-works)** * [Understanding PATH](#understanding-path) * [Understanding Shims](#understanding-shims) * [Understanding Python version selection](#understanding-python-version-selection) * [Locating Pyenv-provided Python Installations](#locating-pyenv-provided-python-installations) * [Advanced Configuration](#advanced-configuration) * [Using Pyenv without shims](#using-pyenv-without-shims) * [Environment variables](#environment-variables) * **[Development](#development)** * [Contributing](#contributing) * [Version History](#version-history) * [License](#license) ---- ## Installation ### A. Getting Pyenv ---- #### Linux/Unix
The Homebrew option from the [MacOS section below](#macos) would also work if you have Homebrew installed. ##### 1. Automatic installer (Recommended) ```bash curl -fsSL https://pyenv.run | bash ``` For more details visit our other project: https://github.com/pyenv/pyenv-installer ##### 2. Basic GitHub Checkout This will get you going with the latest version of Pyenv and make it easy to fork and contribute any changes back upstream. * **Check out Pyenv where you want it installed.** A good place to choose is `$HOME/.pyenv` (but you can install it somewhere else): ``` git clone https://github.com/pyenv/pyenv.git ~/.pyenv ``` * Optionally, try to compile a dynamic Bash extension to speed up Pyenv. Don't worry if it fails; Pyenv will still work normally: ``` cd ~/.pyenv && src/configure && make -C src ```
#### MacOS
The options from the [Linux section above](#linuxunix) also work but Homebrew is recommended for basic usage. ##### [Homebrew](https://brew.sh) in macOS 1. Update homebrew and install pyenv: ```sh brew update brew install pyenv ``` If you want to install (and update to) the latest development head of Pyenv rather than the latest release, instead run: ```sh brew install pyenv --head ``` 3. Then follow the rest of the post-installation steps, starting with [Set up your shell environment for Pyenv](#b-set-up-your-shell-environment-for-pyenv). 4. OPTIONAL. To fix `brew doctor`'s warning _""config" scripts exist outside your system or Homebrew directories"_ If you're going to build Homebrew formulae from source that link against Python like Tkinter or NumPy _(This is only generally the case if you are a developer of such a formula, or if you have an EOL version of MacOS for which prebuilt bottles are no longer provided and you are using such a formula)._ To avoid them accidentally linking against a Pyenv-provided Python, add the following line into your interactive shell's configuration: * Bash/Zsh: ~~~bash alias brew='env PATH="${PATH//$(pyenv root)\/shims:/}" brew' ~~~ * Fish: ~~~fish alias brew="env PATH=(string replace (pyenv root)/shims '' \"\$PATH\") brew" ~~~
#### 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 running in a virtual machine -- 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.
### B. Set up your shell environment for Pyenv ---- The below setup should work for the vast majority of users for common use cases. See [Advanced configuration](#advanced-configuration) for details and more configuration options. #### Bash
Stock Bash startup files vary widely between distributions in which of them source which, under what circumstances, in what order and what additional configuration they perform. As such, the most reliable way to get Pyenv in all environments is to append Pyenv configuration commands to both `.bashrc` (for interactive shells) and the profile file that Bash would use (for login shells). 1. First, add the commands to `~/.bashrc` by running the following in your terminal: ```bash echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc ``` 2. Then, if you have `~/.profile`, `~/.bash_profile` or `~/.bash_login`, add the commands there as well. If you have none of these, create a `~/.profile` and add the commands there. * to add to `~/.profile`: ``` bash echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile echo 'eval "$(pyenv init - bash)"' >> ~/.profile ``` * to add to `~/.bash_profile`: ```bash echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(pyenv init - bash)"' >> ~/.bash_profile ``` **Bash warning**: There are some systems where the `BASH_ENV` variable is configured to point to `.bashrc`. On such systems, you should almost certainly put the `eval "$(pyenv init - bash)"` line into `.bash_profile`, and **not** into `.bashrc`. Otherwise, you may observe strange behaviour, such as `pyenv` getting into an infinite loop. See [#264](https://github.com/pyenv/pyenv/issues/264) for details.
#### Zsh
```zsh echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init - zsh)"' >> ~/.zshrc ``` If you wish to get Pyenv in noninteractive login shells as well, also add the commands to `~/.zprofile` or `~/.zlogin`.
#### Fish
1. If you have Fish 3.2.0 or newer, execute this interactively: ~~~ fish set -Ux PYENV_ROOT $HOME/.pyenv fish_add_path $PYENV_ROOT/bin ~~~ 2. Otherwise, execute the snippet below: ~~~ fish set -Ux PYENV_ROOT $HOME/.pyenv set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths ~~~ 3. Now, add this to `~/.config/fish/config.fish`: ~~~ fish pyenv init - fish | source ~~~
### C. Restart your shell ---- for the `PATH` changes to take effect. ```sh exec "$SHELL" ``` ### D. Install Python build dependencies ---- [**Install Python build dependencies**](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) before attempting to install a new Python version. You can now begin using Pyenv. ### E. Upgrade Notes ---- **if you have upgraded from pyenv version 2.0.x-2.2.x**
The startup logic and instructions have been updated for simplicity in 2.3.0. The previous, more complicated configuration scheme for 2.0.0-2.2.5 still works. * Define environment variable `PYENV_ROOT` to point to the path where Pyenv will store its data. `$HOME/.pyenv` is the default. If you installed Pyenv via Git checkout, we recommend to set it to the same location as where you cloned it. * Add the `pyenv` executable to your `PATH` if it's not already there * run `eval "$(pyenv init -)"` to install `pyenv` into your shell as a shell function, enable shims and autocompletion * You may run `eval "$(pyenv init --path)"` instead to just enable shims, without shell integration
---- ## Usage ![Terminal output example](/install_local_python.gif) ### Install additional Python versions To install additional Python versions, use [`pyenv install`](COMMANDS.md#pyenv-install). For example, to download and install Python 3.10.4, run: ```sh pyenv install 3.10.4 ``` Running `pyenv install -l` gives the list of all available versions. ----
Notes about python releases **NOTE:** Most Pyenv-provided Python releases are source releases and are built from source as part of installation (that's why you need Python build dependencies preinstalled). You can pass options to Python's `configure` and compiler flags to customize the build, see [_Special environment variables_ in Python-Build's README](plugins/python-build/README.md#special-environment-variables) for details. **NOTE:** If you are having trouble installing a Python version, please visit the wiki page about [Common Build Problems](https://github.com/pyenv/pyenv/wiki/Common-build-problems). **NOTE:** If you want to use proxy for download, please set the `http_proxy` and `https_proxy` environment variables. **NOTE:** If you'd like a faster interpreter at the cost of longer build times, see [_Building for maximum performance_ in Python-Build's README](plugins/python-build/README.md#building-for-maximum-performance).
---- #### Prefix auto-resolution to the latest version All Pyenv subcommands except `uninstall` automatically resolve full prefixes to the latest version in the corresponding version line. `pyenv install` picks the latest known version, while other subcommands pick the latest installed version. E.g. to install and then switch to the latest 3.10 release: ```sh pyenv install 3.10 pyenv global 3.10 ``` You can run [`pyenv latest -k `](COMMANDS.md#pyenv-latest) to see how `pyenv install` would resolve a specific prefix, or [`pyenv latest `](COMMANDS.md#pyenv-latest) to see how other subcommands would resolve it. See the [`pyenv latest` documentation](COMMANDS.md#pyenv-latest) for details.
Python versions with extended support For the following Python releases, Pyenv applies user-provided patches that add support for some newer environments. Though we don't actively maintain those patches, since existing releases never change, it's safe to assume that they will continue working until there are further incompatible changes in a later version of those environments. * *3.7.8-3.7.15, 3.8.4-3.8.12, 3.9.0-3.9.7* : XCode 13.3 * *3.5.10, 3.6.15* : MacOS 11+ and XCode 13.3 * *2.7.18* : MacOS 10.15+ and Apple Silicon
---- ### Switch between Python versions To select a Pyenv-installed Python as the version to use, run one of the following commands: * [`pyenv shell `](COMMANDS.md#pyenv-shell) -- select just for current shell session * [`pyenv local `](COMMANDS.md#pyenv-local) -- automatically select whenever you are in the current directory (or its subdirectories) * [`pyenv global `](COMMANDS.md#pyenv-shell) -- select globally for your user account E.g. to select the above-mentioned newly-installed Python 3.10.4 as your preferred version to use: ~~~bash pyenv global 3.10.4 ~~~ Now whenever you invoke `python`, `pip` etc., an executable from the Pyenv-provided 3.10.4 installation will be run instead of the system Python. Using "`system`" as a version name would reset the selection to your system-provided Python. See [Understanding shims](#understanding-shims) and [Understanding Python version selection](#understanding-python-version-selection) for more details on how the selection works and more information on its usage. ---- #### Making multiple versions available You can select multiple Python versions at the same time by specifying multiple arguments. E.g. if you wish to use the latest installed CPython 3.11 and 3.12: ~~~bash pyenv global 3.11 3.12 ~~~ Whenever you run a command provided by a Python installation, these versions will be searched for it in the specified order. [Due to the shims' fall-through behavior]((#understanding-python-version-selection)), `system` is always implicitly searched afterwards. ---- ### Uninstall Python versions As time goes on, you will accumulate Python versions in your `$(pyenv root)/versions` directory. To remove old Python versions, use [`pyenv uninstall `](COMMANDS.md#pyenv-uninstall). Alternatively, you can simply `rm -rf` the directory of the version you want to remove. You can find the directory of a particular Python version with the `pyenv prefix` command, e.g. `pyenv prefix 2.6.8`. Note however that plugins may run additional operations on uninstall which you would need to do by hand as well. E.g. Pyenv-Virtualenv also removes any virtual environments linked to the version being uninstalled. ---- ### Other operations Run `pyenv commands` to get a list of all available subcommands. Run a subcommand with `--help` to get help on it, or see the [Commands Reference](COMMANDS.md). Note that Pyenv plugins that you install may add their own subcommands. ## Upgrading ### Upgrading with Homebrew If you've installed Pyenv using Homebrew, upgrade using: ```sh brew upgrade pyenv ``` To switch from a release to the latest development head of Pyenv, use: ```sh brew uninstall pyenv brew install pyenv --head ``` then you can upgrade it with `brew upgrade pyenv` as usual. ### Upgrading with Installer or Git checkout If you've installed Pyenv with Pyenv-installer, you likely have the [Pyenv-Update](https://github.com/pyenv/pyenv-update) plugin that would upgrade Pyenv and all installed plugins: ```sh pyenv update ``` If you've installed Pyenv using Pyenv-installer or Git checkout, you can also upgrade your installation at any time using Git. To upgrade to the latest development version of pyenv, use `git pull`: ```sh cd $(pyenv root) git pull ``` To upgrade to a specific release of Pyenv, check out the corresponding tag: ```sh cd $(pyenv root) git fetch git tag git checkout v0.1.0 ``` ## Uninstalling pyenv The simplicity of pyenv makes it easy to temporarily disable it, or uninstall from the system. 1. To **disable** Pyenv managing your Python versions, simply remove the `pyenv init` invocations from your shell startup configuration. This will remove Pyenv shims directory from `PATH`, and future invocations like `python` will execute the system Python version, as it was before Pyenv. `pyenv` will still be accessible on the command line, but your Python apps won't be affected by version switching. 2. To completely **uninstall** Pyenv, remove _all_ Pyenv configuration lines from your shell startup configuration, and then remove its root directory. This will **delete all Python versions** that were installed under the `` $(pyenv root)/versions/ `` directory: ```sh rm -rf $(pyenv root) ``` If you've installed Pyenv using a package manager, as a final step, perform the Pyenv package removal. For instance, for Homebrew: ``` brew uninstall pyenv ``` ## Pyenv plugins Pyenv provides a simple way to extend and customize its functionality with plugins -- as simple as creating a plugin directory and dropping a shell script on a certain subpath of it with whatever extra logic you need to be run at certain moments. The main idea is that most things that you can put under `$PYENV_ROOT/` you can also put under `$PYENV_ROOT/plugins/your_plugin_name/`. See [_Plugins_ on the wiki](https://github.com/pyenv/pyenv/wiki/Plugins) on how to install and use plugins as well as a catalog of some useful existing plugins for common needs. See [_Authoring plugins_ on the wiki](https://github.com/pyenv/pyenv/wiki/Authoring-plugins) on writing your own plugins. ---- ## How It Works At a high level, pyenv intercepts Python commands using shim executables injected into your `PATH`, determines which Python version has been specified by your application, and passes your commands along to the correct Python installation. ### Understanding PATH When you run a command like `python` or `pip`, your shell (bash / zshrc / ...) searches through a list of directories to find an executable file with that name. This list of directories lives in an environment variable called `PATH`, with each directory in the list separated by a colon: /usr/local/bin:/usr/bin:/bin Directories in `PATH` are searched from left to right, so a matching executable in a directory at the beginning of the list takes precedence over another one at the end. In this example, the `/usr/local/bin` directory will be searched first, then `/usr/bin`, then `/bin`. ### Understanding Shims pyenv works by inserting a directory of _shims_ at the front of your `PATH`: $(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin Through a process called _rehashing_, pyenv maintains shims in that directory to match every Python command across every installed version of Python—`python`, `pip`, and so on. Shims are lightweight executables that simply pass your command along to pyenv. So with pyenv installed, when you run, say, `pip`, your operating system will do the following: * Search your `PATH` for an executable file named `pip` * Find the pyenv shim named `pip` at the beginning of your `PATH` * Run the shim named `pip`, which in turn passes the command along to pyenv ### Understanding Python version selection When you execute a shim, pyenv determines which Python version to use by reading it from the following sources, in this order: 1. The `PYENV_VERSION` environment variable (if specified). You can use the [`pyenv shell`](https://github.com/pyenv/pyenv/blob/master/COMMANDS.md#pyenv-shell) command to set this environment variable in your current shell session. 2. The application-specific `.python-version` file in the current directory (if present). You can modify the current directory's `.python-version` file with the [`pyenv local`](https://github.com/pyenv/pyenv/blob/master/COMMANDS.md#pyenv-local) command. 3. The first `.python-version` file found (if any) by searching each parent directory, until reaching the root of your filesystem. 4. The global `$(pyenv root)/version` file. You can modify this file using the [`pyenv global`](https://github.com/pyenv/pyenv/blob/master/COMMANDS.md#pyenv-global) command. If the global version file is not present, pyenv assumes you want to use the "system" Python (see below). A special version name "`system`" means to use whatever Python is found on `PATH` after the shims `PATH` entry (in other words, whatever would be run if Pyenv shims weren't on `PATH`). Note that Pyenv considers those installations outside its control and does not attempt to inspect or distinguish them in any way. So e.g. if you are on MacOS and have OS-bundled Python 3.8.9 and Homebrew-installed Python 3.9.12 and 3.10.2 -- for Pyenv, this is still a single "`system`" version, and whichever of those is first on `PATH` under the executable name you specified will be run. **NOTE:** You can activate multiple versions at the same time, including multiple versions of Python2 or Python3 simultaneously. This allows for parallel usage of Python2 and Python3, and is required with tools like `tox`. For example, to instruct Pyenv to first use your system Python and Python3 (which are e.g. 2.7.9 and 3.4.2) but also have Python 3.3.6, 3.2.1, and 2.5.2 available, you first `pyenv install` the missing versions, then set `pyenv global system 3.3.6 3.2.1 2.5.2`. Then you'll be able to invoke any of those versions with an appropriate `pythonX` or `pythonX.Y` name. You can also specify multiple versions in a `.python-version` file by hand, separated by newlines. Lines starting with a `#` are ignored. [`pyenv which `](COMMANDS.md#pyenv-which) displays which real executable would be run when you invoke `` via a shim. E.g. if you have 3.3.6, 3.2.1 and 2.5.2 installed of which 3.3.6 and 2.5.2 are selected and your system Python is 3.2.5, `pyenv which python2.5` should display `$(pyenv root)/versions/2.5.2/bin/python2.5`, `pyenv which python3` -- `$(pyenv root)/versions/3.3.6/bin/python3` and `pyenv which python3.2` -- path to your system Python due to the fall-through (see below). Shims also fall through to anything further on `PATH` if the corresponding executable is not present in any of the selected Python installations. This allows you to use any programs installed elsewhere on the system as long as they are not shadowed by a selected Python installation. ### Locating Pyenv-provided Python installations Once pyenv has determined which version of Python your application has specified, it passes the command along to the corresponding Python installation. Each Python version is installed into its own directory under `$(pyenv root)/versions`. For example, you might have these versions installed: * `$(pyenv root)/versions/2.7.8/` * `$(pyenv root)/versions/3.4.2/` * `$(pyenv root)/versions/pypy-2.4.0/` As far as Pyenv is concerned, version names are simply directories under `$(pyenv root)/versions`. ---- ## Advanced Configuration Skip this section unless you must know what every line in your shell profile is doing. Also see the [Environment variables](#environment-variables) section for the environment variables that control Pyenv's behavior. `pyenv init` is the only command that crosses the line of loading extra commands into your shell. Coming from RVM, some of you might be opposed to this idea. Here's what `eval "$(pyenv init -)"` actually does: 1. **Finds current shell.** `pyenv init` figures out what shell you are using, as the exact commands of `eval "$(pyenv init -)"` vary depending on shell. Specifying which shell you are using (e.g. `eval "$(pyenv init - bash)"`) is preferred, because it reduces launch time significantly. 2. **Sets up the shims path.** This is what allows Pyenv to intercept and redirect invocations of `python`, `pip` etc. transparently. It prepends `$(pyenv root)/shims` to your `$PATH`. It also deletes any other instances of `$(pyenv root)/shims` on `PATH` which allows to invoke `eval "$(pyenv init -)"` multiple times without getting duplicate `PATH` entries. 3. **Installs autocompletion.** This is entirely optional but pretty useful. Sourcing `/completions/pyenv.bash` will set that up. There are also completions for Zsh and Fish. 4. **Rehashes shims.** From time to time you'll need to rebuild your shim files. Doing this on init makes sure everything is up to date. You can always run `pyenv rehash` manually. 5. **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. This is required for some commands like `pyenv shell` to work. The sh dispatcher doesn't do anything crazy like override `cd` or hack your shell prompt, but if for some reason you need `pyenv` to be a real script rather than a shell function, you can safely skip it. `eval "$(pyenv init --path)"` only does items 2 and 4. To see exactly what happens under the hood for yourself, run `pyenv init -` or `pyenv init --path`. `eval "$(pyenv init -)"` is supposed to run at any interactive shell's startup (including nested shells -- e.g. those invoked from editors) so that you get completion and convenience shell functions. `eval "$(pyenv init --path)"` can be used instead of `eval "$(pyenv init -)"` to just enable shims, without shell integration. It can also be used to bump shims to the front of `PATH` after some other logic has prepended stuff to `PATH` that may shadow Pyenv's shims. * In particular, in Debian-based distributions, the stock `~/.profile` prepends per-user `bin` directories to `PATH` after having sourced `~/.bashrc`. This necessitates appending a `pyenv init` call to `~/.profile` as well as `~/.bashrc` in these distributions because the system's Pip places executables for modules installed by a non-root user into those per-user `bin` directories. ### Using Pyenv without shims If you don't want to use `pyenv init` and shims, you can still benefit from pyenv's ability to install Python versions for you. Just run `pyenv install` and you will find versions installed in `$(pyenv root)/versions`. You can manually execute or symlink them as required, or you can use [`pyenv exec `](COMMANDS.md#pyenv-exec) whenever you want `` to be affected by Pyenv's version selection as currently configured. `pyenv exec` works by prepending `$(pyenv root)/versions//bin` to `PATH` in the ``'s environment, the same as what e.g. RVM does. ### Environment variables You can affect how Pyenv operates with the following environment variables: name | default | description -----|---------|------------ `PYENV_VERSION` | | Specifies the Python version to be used.
Also see [`pyenv shell`](COMMANDS.md#pyenv-shell) `PYENV_ROOT` | `~/.pyenv` | Defines the directory under which Python versions and shims reside.
Also see [`pyenv root`](COMMANDS.md#pyenv-root) `PYENV_DEBUG` | | Outputs debug information.
Also as: `pyenv --debug ` `PYENV_HOOK_PATH` | [_see wiki_][hooks] | Colon-separated list of paths searched for pyenv hooks. `PYENV_DIR` | `$PWD` | Directory to start searching for `.python-version` files. See also [_Special environment variables_ in Python-Build's README](plugins/python-build/README.md#special-environment-variables) for environment variables that can be used to customize the build. ---- ## Development The pyenv source code is [hosted on GitHub](https://github.com/pyenv/pyenv). It's clean, modular, and easy to understand, even if you're not a shell hacker. Tests are executed using [Bats](https://github.com/bats-core/bats-core): bats test bats/test/.bats ### Contributing Feel free to submit pull requests and file bugs on the [issue tracker](https://github.com/pyenv/pyenv/issues). See [CONTRIBUTING.md](CONTRIBUTING.md) for more details on submitting changes. ### Version History See [CHANGELOG.md](CHANGELOG.md). ### License [The MIT License](LICENSE) [pyenv-virtualenv]: https://github.com/pyenv/pyenv-virtualenv#readme [hooks]: https://github.com/pyenv/pyenv/wiki/Authoring-plugins#pyenv-hooks pyenv-2.5.4/bin/000077500000000000000000000000001476513315000134405ustar00rootroot00000000000000pyenv-2.5.4/bin/pyenv000077700000000000000000000000001476513315000174312../libexec/pyenvustar00rootroot00000000000000pyenv-2.5.4/completions/000077500000000000000000000000001476513315000152245ustar00rootroot00000000000000pyenv-2.5.4/completions/pyenv.bash000066400000000000000000000006261476513315000172300ustar00rootroot00000000000000_pyenv() { COMPREPLY=() local word="${COMP_WORDS[COMP_CWORD]}" if [ "$COMP_CWORD" -eq 1 ]; then COMPREPLY=( $(compgen -W "$(pyenv commands)" -- "$word") ) else local words=("${COMP_WORDS[@]}") unset words[0] unset words[$COMP_CWORD] local completions=$(pyenv completions "${words[@]}") COMPREPLY=( $(compgen -W "$completions" -- "$word") ) fi } complete -F _pyenv pyenv pyenv-2.5.4/completions/pyenv.fish000066400000000000000000000010351476513315000172370ustar00rootroot00000000000000function __fish_pyenv_needs_command set cmd (commandline -opc) if [ (count $cmd) -eq 1 -a $cmd[1] = 'pyenv' ] return 0 end return 1 end function __fish_pyenv_using_command set cmd (commandline -opc) if [ (count $cmd) -gt 1 ] if [ $argv[1] = $cmd[2] ] return 0 end end return 1 end complete -f -c pyenv -n '__fish_pyenv_needs_command' -a '(pyenv commands)' for cmd in (pyenv commands) complete -f -c pyenv -n "__fish_pyenv_using_command $cmd" -a \ "(pyenv completions (commandline -opc)[2..-1])" end pyenv-2.5.4/completions/pyenv.zsh000066400000000000000000000004521476513315000171140ustar00rootroot00000000000000if [[ ! -o interactive ]]; then return fi compctl -K _pyenv pyenv _pyenv() { local words completions read -cA words if [ "${#words}" -eq 2 ]; then completions="$(pyenv commands)" else completions="$(pyenv completions ${words[2,-2]})" fi reply=(${(ps:\n:)completions}) } pyenv-2.5.4/install_local_python.gif000066400000000000000000020461341476513315000176120ustar00rootroot00000000000000GIF89a1        "     "!!!#'!  !"!".#$'"7%'?# ,G&,,(+- /K 5V!! "!+"0#(<#8$&"$8Y%%.%>c&(3&?''/'E((%(('()*(,<(Dm*)1*-3*Ju++(++4+C+F+F+N|,Q--+-L..0./3.T//-/Q0/80X0[2202^2_33/3c43<45/4504524g5525645Z6636646676G 6[6^76276476?7867b7d7f7h8618m 997:9@;^;d;g<<<>c&(3&?''/'E((%(('()*(,<(Dm*)1*-3*Ju++(++4+C+F+F+N|,Q--+-L..0./3.T//-/Q0/80X0[2202^2_33/3c43<45/4504524g5525645Z6636646676G 6[6^76276476?7867b7d7f7h8618m 997:9@;^;d;g<<<>)eTNieX^e\}dRه s_saGtigz$Ȍ|~ 蠂J衆&袊6裎F 餒VJ饖f馚v駞 *㝨ֹrߌ:r: '̡Gl&̺Q]F[VKfv!nnn{n"1hn*F&K®9Ǟ{(l,~p?,qOlq_q&0'qƪp "\p"ζꫢ|Q&s@3(HsJ7NG ü:sX 4(8GipZώ!:ێ衣_+|wi2N'7Gߘ !ϙΉ(y~h `w~_ĶբMٓO';5 }O{|;栤f6b1|/F/~k"ڦ3ϿpY@C*wMN}:1Mz^ҵGQ!g= 6bW8R,8 t{0JHhoR`(": =Z@ H!ڂV7"x]1a" G6qSϓ؈V e@C (&7M6P ܶG#*D> 6 }F xC`;CVt*߸!) \#-Hr! eC xAP5F-A FKDn2gjAwق6[ Xa8[Fɱ=X?VRs3q8GVqe CH$AIÒ1E?6ylzHΒ󤊋/Q aD3<)h4 f@D/x<+ܠ a0x A0.( iPQC?q~4Cޘh4C8ޱVU]@z^_3X J#F-ٳRb+&3|Z$)Y}t8H( GMw6J"+E !@hAŲ7yTcѐ6`g'aE?@QQpw¨7@CG6xûsh<vdChB>1ocL4r~2yO0ӁG>F>ra4poVT?5ޖ:ڡI#jNżZ+ۏQ\iG|9Q ~(@<j$:G!JcHľ1uHCd:+$+:;r&a+)*+ &4*|z*}ڧ]#z8Jrj*orsjG:Zzک:ZzZ7b~: #Z6~rpR, 0XHDa(aZjzښܺڭ:Zzꚮ캮ڮ:*8#5&R+\TZt[E Z԰k۱ ;"[${&(*۲,.0;;6{8:4۳Eb`VB{A,&P%%I۴JIIk/@PW˴`$pG˵N[P{fOk]۶l˶f%@$Pu{vxz۷|~;[{۸;[{۹" )KȒ&'`%%%@ %!(I%`!0. K4ۼ%@[+K˺H([{蛾껾۾;[{ۿܿ(ę"2&/P8)P%P))1<`G Qp&) 77 "@ 39704L85\5@1@̽K6?l@2M,0X`{2Z\^`bd^~ >^~^E P m, f @ GO(W0 "p PO W@e` W O o0P  Q0 Yp &<%0G 5.  `DrL %@݃^{舾>^~閞阾>^~ꦞ꨾n! z}7)  @ <ɩڝ @ 0pooo` ( q j M Pp~ B3ȻL@a U P  ?"-`#.` p @ o p 34 0>EN Q Y `dP@  @)9pdK * xp a]$?/"Nq7` j tp <8` Ӥ@ <@ OO¨ 0 qQ  ,0` ï"¬3  J O   9 ݀˕O_@ DxPaB 6P!ie[8q츁@H%M$iG%WDɂț2W%N7G4)&Ovy2፩2<AFM1F:뤷ֺk]AjUPo][|;nlnulgE&|p G9# mOr/>q}m`"%HJr$5YIN~Oc'EIR^%(UYJVc*eJZ1,uYK^6ue/Kbr.5a6ϬؚE?tf6ref3iHk%7AwHtӜ!Nws;O{1+g?98ohB Qz UhDhP!hZyf]!EfQlaˎԤ/HCFR:jSޔdNfԨ=]Nӣ6hT>Փ)PҪvժx*UznJ=(S˺V&-*[Vrj\4&D^WWb}C ;XAǺX6VCv)^-[Y6񱽋lE'YvV4fM[ZVjeh2ﰎ %mg[ȼlmpy[JUEn}+27-.\nvksu/an7.k^u+ymoS[7V_t n pF/8mplat´; Gn"Fq;?T&-qN<ksŁ 1uC5qBolȳqf|d&rP l$fRr),wUNɕeAnd3"(1f4sUوmsYϴ#g?;BEd\hBK2йetg5Zҋ|4/miRӛd OӤFuE=Tz&`\jW3qn5xj]:{=GXvgd7[VghW[ЖHlwֶ p|mVwЭxWo~w p_/xpk o8q_U+qXM<?>ry$'Or,G_>s;Ѣ]4u>4|{9ns[?/cٛ;IG:؍Aw:P˱~7}_ֹv_N}:N'^x3=4}/|xՊ<o N,+OL~oNNs՞ӫ>ٛCr9n}c=9?˟~;_~<8ǿ 86$K7T@{ 6 | 7 @|t5r 6t;$5Djk6tl4A_,5d!3!V+$l4$4BZ['D3'dBP*3*BK-2-H020B=313$C:K6426T1{909C2?@AB%C5DEEUFeGuHIJKLMNOPQUG]9S7X9X9u$8U[\]^_`a%b5cEdUeefughij}VmmPXuq%r5sEtUuevuwxE0:{|}~׀؁؂%؃5؄E؅U؆e؇u؈؉ر؋،؍؎X1ב%ْ5ٓEٔUٕeٖuٜٟٗ٘ٙٚٛٝٞڠڡ%ڢ5ڣEڤUڥeڦuڧڨکڪګڬڭڮگ۰۱%۲5۳E۴U۵e۶u۷۸۹ۺۻۼ۽۾ۿ%5Eܚ ! ,! MH*\ȰÇ#JHŋ3jȱǏ Cn ɓ(S\ɲ˗0cR@R͛8sɳϟiJѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐs;"a̹ϠCO'ȥN^8 ! ,y*gП48 \$PŋI"G9>E"  [I:Gf= )ر"G= ;Rh`Cwt䰺uLLuQQp]+A>bArp+e.,U 26uAiEJpmT߷q)f]p+vjF(Dn ط $ tcX^A"C]NyxA#G("B)Rq"lj0',= _"ID! ,}*G 3?| 3b 2hPǏ$I R"] r鲲 -r%B%p(ѡ%ÂM(B% (!4&GjDJ0CG=j؁A}hkVlj PXс+篯Z?N8^D6`ߵ~7"9ҕ:0)&g! _Q@i 1曜:k{b2'Dfn!q3sPDlPDU菇lP ʤltӫ `PAFS5>%07TUQR $T ;ᆆr 1U=TAАRKX` 8Pc $KpPexD iF&iP@! ,! ,*HO #OCJT8hѢ]qcB.\t2K"ZPق bx(1DPņك@8b(!ď)] C @w(qcGk=( j ` J:/-*o"yuJrp jCAf.häES0cW`FS" mqDgp ‰'آ&[Ba͆m\@;vnH0 [ٴ-? oگ9n!,@{1B /@PpAU P8 9@m1$( 2 +p ڦHB ш@! ,! ,+G@PPࢁ-(Q.](@.]@ ٢ʼn-6"%bIÍa8q A&G% ѣƍ;tABI=6Tx! Gۀ!T^zٷۥ|&֝ߵھ(Ӛmo!RpYihE-[pr!ȏRk1kJfTj2ַ27 %I:;2p88w(jH9l7vt2[B% P)a0@288`P"P`@ >A@QB'ȄK 0!P '4@*Dَ Q@! ,+A}$L8PE#.DbC\dHF@'N@%P@Qa0S2p1ٿ@9!`Ǎ; ٿ}ESh:"Xd1zl֦9~ˑ l2n]{!n! ,! ,! ,+ #PAJt„\<9Ѣ TAQa S[R$ho>7T͛I? %*Cfj*D4Br3Svm@ұDplv5Ү7bDÇ{"P "!7tF'`Ȩ!CgON! ,+H@CE(RŊ:±c-ZhGcPɲ^ņ,ƊB dɳFzuW;hPJyE.QXk@mX8qDŽY: ʷ5;p+@G'r;xpG2/ '(A4 l@ 0n0*ax e8B4ee !C`1%d sm@@t2[F㶍?P2SWl G77߁D``@N 7蠂lga 5Dѣ'J8a4G ?IZLӃdʕF%h4(A˿h !G/jc+ Tвo AAG1 UI+ÒQL_P(XWl8+Ccˈ`B]-c,+J5XТ~n}9Bzk[9b$v wp׀W!zؕ7En]2 7J/8f$4sL343 ԥǖ %@p  f1(U= 'l%XZeH@b n<%$CVJf)Ö U}T Xeee 7p=YBWΩi.TxP@! ,) h&*#>}, QA-9HNFHF@.\ҲE6[Pĉ1|nA@aH#A5hȸQBƏiZBhǑ[L؄j𐠀iL\bnR9/L anԜl12n@ XڰfvCnFB1g~c 6= Ru쾏Ih%Y)"?IcJgᲉ'kG81{ P‚2z!zуG P1T0cTU 2PCd *! ,! ,)(h G!‡|(Q@.hDB^ti.(p!0a"ĉ%Nl8QįcÂ;5^(!}F]72hH \*HABGh\)aGH̭[@$xƎU5i naj<@9{X5!$h=,qP\O&-@ӢPJ=ѻa+T(Vz8>pڥ"РhqG#G5N|G2Φ%<4ᡌ9n[!i 1UP00L5C 7C >A1Xx! ,)$PA*A #3QE}d̨pѠD<.tIRII$vҥe'ZȔD%`l8qdÂ+fB/^Đ!GcJ-ՠFA^a(b" ϟ?$R]n5.;:𬚰hG׽/rs SΛx@qP"hfnZ+7!`oVJ@C])]N, ̘ ;ôt@DeD| T `]p9zp^8Uz)9r?N4 D`1L 5$VDp !P@! ,! ,! ,! ,! ,)#H*\ȰÇ#JPŋ3jȱ?Hɓ(%!ȧ/SʜI&A-9Ȧϟ@kЅ .d ʴӋNq0V'bD^T">y 3)E t=d#NeCU$MsK:|&EW2e\)Cc$sPY z*vZ +<㨡q&*+h)uQJ*(s6`c$d`@:@xh ?C kfPj lz! ,7$  (*\ȰÇ#JHŋ3j1"tIɓ(S\Ѓ %I͛89vPCŊ7JJ探c Mt 7l  W9fݸB@׊4R8HcaH9y0H7E"?En (tx!PRo:zoeP]zBp: @uboo@Eo dPsQV7!D8ьЀ ۭBmbC3X &:1!=2^֐um\k/P5ʱ6bF9b  "0@γ;@{ a` pP 0Xe` = P72PYܗ\ 90  ! 0 0G`G q5%s ՠ Wp T֐$p" ! pBP V@V`ar` 0'Ͱ P#V!#B Bq`UA lA1 .9@@ ]F..#!ˁ*"0-")J&@*1`?Qq#`SGa"dV0pLYm4߈jL6=+)}i`z: dq8e4S p "M7*E|Hq<:ȣm%P) `,, 0 ; 6 #O 0 " ʭ9&ʓ)9:5 1$$ J36,'`[S>B90Y l  YEBBs D0 fq0l-Il@l01bJ60EsA;G %7@ ͐ 0%Kkўi{zz-9@ ௱0 l P S [ EP S >@ ໔ 70j"0 p@ C["@v #.@C @}z$;/{90 g spB0Q @ 9p " `S Yl h@ I0 4[B p-  E >P> >>q`t@`Pc  aKZ [࿎ O ,p0 ` pQ`:lqŽ`P  0 sh@ B@ pp "@cFC0tP6PrY01kWlź̲0 B q ` -p0S A nl Ǵ  @ |ͬ[` >Y0s0". B:ਹƓ RP70 e9V3[*,LQL0glB l2']{`0fIm:p!%0S6ͼ2 XyD>]yA4PO=E>8TKHIW! ,! ,! ,! ,v>HP`h@"1P%` -Xo(J ˛2Z&ʖ4d<%B2n,  Zj TiRz;S׮ ߎe Vڸvq+&޾bú3!჆uȗjÀ! ,! ,! ,! ,! ,! ,vE=j\ D@4[l39d0ܱտ(SOW u4ϟ? C1}sgҟQ(OQ.yTUU ק@5*kΎM;5lץ8FK_,a~X Wl1nD0 ! ,! ,v>HP`0A5,p 8Ȉႁ902JPYgPt!)KX`@Q% 2hDlSf<,ۺueF[ކ+bhРdA[Ȼ߾ X٣AyÆ1_a܄Nحd ~]s`گrz? .t'S;rL-t/lر񃰅}A C \1F n% -YQ`1ȰUTaPA .h 1Ph@! ,}>XbcqB]' (CM84ȱ %9R` h)(͔q=؁! @(ĀFq%dٲ˜ijp%vDh~* rۻ_r+pĂ0rpϟ{,CA/"t ?g ,GF:V4YD(`-XaD#>Ϡ* mY0܀kS l3t:hGTpaPD5ΐa SF68MW@%d(0ߵ]u0T^scq~! ,! ,E($/*(@QAÁ0J("Ŏ€H%J!4j֠0ٲf˖1RC7JC4q1ٿXE0:P;vq?0>z" 08`PDh֟z*pBR;a+Zp\ I0M)lB#Af {+lgHc@i€NKGбl`f f+@9 iĨs`RNYi*`mYPpḄGFxELҀpBw) 214  %C Pl4x1ԈCQ:d =!rp-'@mF%C (ZG-FXjRT_ G!KCްc ! ,! ,DH`(Q"%%`CǏ=p$XF @t@0Q 'b֐ðfr6AqĈ㥎 )Un@@ =(t~D1P pX-zqo[` Τ9- pkwIv w! ٫1G&\9!Oc4,a$#Ԑ㲾p ٛ{|;(;/RZp-jVhJ?@CW1c! ,DHQvℌ8HB(€@ :vرf˖5S,Lo脱D ~JTWc!L# tGu߿S v |cG%єDϟUV qA)g$E?V tlAO3uP HWlZ1*Z\`+&26a1  wo##gjqd3bJܺr $`á-CIg (i8eт%{WZ +O+Dlq ! ,! ,EQC2v\x#ƏVqC1JQ" %zP"@C7h8A34[sY3Enl, 4O!@GMJ]6@%nM?zDo} A  d @m=tHfa8,L|MV ~cmGa~9_d+: {lF`(i߸AQdZw$8En*p(wWV3JM00sJN X. zNEq =,Po8V5$0_=C];,P8Ce`x]Ԋ $P FZX! "9.$@`@!Ԏ.bC 0! ,EQ(@JqȎ@~(č28(@((kAUe0QbI'*82 ݿ?0q7fz$ǧ`VY `NQszAܱ?<ܑ`Da0ܺݐPf\N%+XgJh9wDAN,ʁؤM37A! fm?X %pTH'^,AaǪXPh 3 ɉݑwzcw)! ,=(p PF‡ @@MkQQFFA9m`o`|1PρJa20JA;J@RH r.1D2j(ѡ@nDXC5J8D nY ސ 78hG?=8XGi8 P℆pϟ} |ʆ2Ě0ڶ?ܺ{ TrձSԎ0~< dhJ5no[WNĎ Ѭb-Lmy 0'νq L)椣{w21 1T@ {% І^;VBx xc}(Za(Aԋ0Y`dpЏ>pC K.P@! ,?HPgs\C Ab@(6谐ǂ  NBb1n,9@zs頃C3E# 'h (0@iĠǎ<[l#^>QC @ @m* C e%R@2g.CA@ؠWS\篵?ƆP[5ű] d֠p"6*|QSvn{%: |{k #p\ P7ظc;f t@C %Ћ3;*\(`Ç#B\ 1m*V,qC L!"?z`a7p(D (P g S8G $1[ƴ-:P Q"G r8W8Xadž[xm}p`0@:@LB{+X t(_ ϭ+J@2 'cBqj7X2]v8б#f ;Rx,:BSgc c8i>̫Y 8(YnG@ ^xT7JĀ#).Q2|Ve@QC%X`P`Ip1Cl! ,! ,E# 0p`6 ?(ĉ J(p8 1b舠ٲe.iQ4j@@Jf%``ؿ}P `GpА!M'jѫ#HAD[ X\S @+`]+l໅V豷װs<0(lצ5m\,E[3\Xpy֭h֏mv]^bi-aaZ)`Bq ! ,! ,ElL%n ;J`س9rܐ 7b࠱׳eʖ5A@:TLc@SC Gd߾1C@ HO@?`KQ@YcP>S ^uǠ2HX}nR*Cƅ^71_;()SÖb={C=TW `7vmzq0kˮ1qo+J0Z[ k*TȾ]oH)~! ,! ,EQ48d :J$q$97p` .܀!EJvAKe/apC )Xϟa4aP߾JC =KQ%!D5t Ďvu/ز2d0{`۸sDY}̜XpabȈqB(tY,al(L&aA8{F:m=D=8hyex&e*Klܸ 0P"v˸A:! ,! ,! ,! ,E( G{(@F ::pcA8P 7dԀ#­fb2#vB0r!Ə #0X"FG,C= H?z P!`?(#Բg !Ё@NiȐv,^z%ҨW@4RРkY% LУ ޽x 81i]×VA2MRz.+C` \}+V1JXXsb E/~L-_t2v|9ٴ[<5P%MU2ʆV, -Z(7ѲK% 8{C0TP^Czqp! ,! ,C8Hx8h&ď=zx! PD 8`܈ACJ9[Fs2" СRJ J bQ"F: d0eT`=!"]OU-.umرE[pr{h^M~6Vj{VݶVg}lYaʉ c*@c9`F '+C@ (`[@%|>0 ! ,! ,EH@J\p9J@iHqm(sa`7)Z' 6Nd(L09”a%=(i 6 !7nD$%<G@m A%b$Pm9(p0JqCf˖)k֋  ፼-6qA1cB;zqBǎ:"u z,.Xvx1!A9 "!0T&-;}_'1{5B%PTNز` n9Eª(  gͽ7i@ 8zA8 2C (@/(_qu'-) @@( q /Ћh,Ӌl]5 00 @xo  @@ _W *7B1Е֚VX -IW|bЧX 1ze! ,DHp` (2zrD ,,c 9 B %jA b-9 cHD:Gh8#7t Ҁտ}Xӕ V(q ϟV] pb^~qۮ kCfz=ָN֞uPۭšihnRRx!rBy!˞3GI$b4uko (X @m i%@8<zh2 ?`9 d߀2PA HI1$݃pC b`@! ,)$KH PpÆJHqŊ/j" 68rAPT ˗0cD> 3 >6ЇͣB"])ӧNB**իVbgсKX鳶LpƝ+.ݻvݫ/߿~ pKxu8?lD9,z`i̘O64ρMMۥ\{[xƓsw_cߎ]`ӽwa>~| 8>F ß_"~}ߗ~{&8 6_~Rh` $`a"އA8@C '*. @0H6:>8#C‘H @ 6Y% C =heZ8!\^x])~Z9h F.J:)gL@CYai矀*^B L0ȰfVj)fxi{n*@M)) ꫮ 묲J뭦*k*;+P , !B +vކ nFIj㚛+[+ok拀9x+0;{p #<@!g‹.K*ǭ!, owr,s4ǻp4ڢ|rW|{mx /}׳al ޒ8hVf?󙏁\̞|z3&EtX8D xBL"(2-F̢KE#Pj9ߝE)Z @h.z͍pbǜȻ񵱃TZh;qpL e<ry8C` 0 򏏌dsT2Q!"辦 B$7HI̶gqЂ8EH2t,C21}_V> "#!)iI`# y?`1T[6<_2 l ]ތ8l2s$_*Wx-vk%:)Kš"Pi@3_@(+I [ 36^Tʬ9KG`A@ nhѥ%"HdVZL(;-cU D%I'QTS`)4,[ {%6l5xTHQdd(Ő<KEBuk=I͡ ] INIaHG4( ]?ƯQl`m6ة b\K ұ3d:YӫZ"bZSC;NSܦ9UEMZek~칙mkEڱvf0k6u" qKgEFS&dڳt6,,9hFŞmHCN OQSo\wp@e7`,g4HzX,ظ'`qKcX8 6d0`OL0i$,v NIGYTRLTҞ^a=V%s^ZN^' tRU9?.b?`p別: n :8Ce nr@JXte.RpiK&fh" |X#s26`PDz;B@8o`%.X 70rCۙ18H(`MuO= trK$hG:P(A@(@0 AP ([+  @ ,(ʀ#nP]_=B j D@Ba ` V7$PE6b Ё́em@6r8@x+x?h| (87 J5qD@0$"m?؀&xV< 7a`@8p@Epp,t Ѓ 7,0G4N<iLC8X nPC B5ҡd5V`6 klc (ЋaD`ytbh@ ы$c r~P; :PZ Jp Vs  @NvP   P@ P @Jq `s 0 @ P 0V` ԐX: iw,s 6  PP}D 0 p lކ 0mz@ ` hP ~"Pe ̰R7Q8 ` à P 0 t v:ҰJpp א?P 0"Tކ4  p ۰p   h ˰a`Vp蠅( r0 p ?{ ^PÐ@ p 0hp  z 0@e 0 2@w n͐Ұΰ @ P ~X w0 ?  xL  J0 UaΰҀ0e@P k DP ?p@D9  z  ~@ٚB&P*mD @ `% ` wD  P D@nP @AkB=p ܀  ~zp `0  G Pk?` 9wyN:IdmmG  0JPGpG6d%puFvJ0o0 l`upd0@Gh@GГ&&i>$Vit's0J*=?' #9 d~na PpZNIm%v ' &yJĐuI8*4t6wE*=z  b6QʨlA  P1ibp* j  0 mjʺUc Һp ƬؚU#кԪ Z(ڭJjtJ$Z׺;.p ˮ˰K: ;kj** ;'K{+غVq6:2ؚn)B;`}fiA;J;N˦WR7VQ{Z+7! ,*fHÆ}$Hŋ3fPǏiIɓ\ɗ0cʜI&;< {숡ΞG ͊7n CpQD vCƎR + W,NQ#B6_`U* x )o[a0pB eqCEBdh |Ǎc8ZV2PQcRAqc Ѐe^: @0@dȨ0 ڤjNJAY ,8:+Y\p0ҁ ]@  @nK8VA BZ` ƀ.堣Vܢ?袄 CL`E3X ` + ,Ӌ@)Ĕ (Q( A)˜Q q  K2zn(#G@ +?C2AA p2(&)9!(  V@ PC 5$`:P :7h1XðWpJ=`J3D P1A rsD 8PPL:ŘKx=JD XÌ9rp6L) D3XD. 8M22.7@4 7<J=4 7 PNp,4$A )t6ܛؔW3 a'' D3 :uP pM1,T D3 hN M|(23t2PK10-N)pC909R.M_8@61B :XN ADgr6@Ā979psJĴCM58y[`cN4@C zE.dM( !9xzd@ͬC 5X5<fD(-" lLb>6XL H\ m(:v7+c8PC pDȁ &0^K8ht]-m - @_ MTP@5Q@ ej\]$`Ұ"z2q!Mb(ŲP n# h5Ba yXA @X:n( nRpa#:6g Jf,樜"Xaj 7QD@G) g, h5! @B 8^ehnfz.f (AJ)!D/^› ³ e$`E3ZXF( (a@‚6 ET872&PthnV A/bxw2+~Af . qbu@ _J  j @`ZJ?M@$?RSl@z$@j*F@5 N Hu@3eF+ȁ2 p?@NL#l`)Hv7`([ ЂA (`kCg|4A Vpp{ sX#;.l\ ڪNj`ZC hM 1ǬDHZ`(A@b~! s(CV BP8=z8ca%+ r4{s wl@Q<@10P"^C{! 0ckvv4%jy<"T\y'%@:enYA X1l>)3YFC(AH\`^2I䃸x*8Z"%[f1~&8F0Pӂ`h( x86m`A&j n iq pa @ʄ5 ݁`Hc.`tc`TARӇ$jxύS @<즛Q%g44p:߁Xr6JpĠ0uȲ7f%R Yg BG0De!,eP ˀ3s1 sGp:\Tp ̰bv\$ ]9Bũ!p ˰MJ` : % { q@ vbXR p ]b%t p\ BǠ)50 B; 0 ŧ B+W$k0 bR˵Sr  P}BA[ ?% 0 Yv%cc0TPUƶEi%z%0$Bfb* 4Jp, Y ,]V $|Ѐ 5 F]k<P}ۡzЬ(R;Jz`GpðK`5鰐)ae '~[ m|А5CtD EW hǪ h$GQ` ^;|$%rK @ ` vv GDR ZV@rnÀbT?P (C0 v fz `E У9$  IC^ߠ 90b-$2e)!':!yEr;fC)*K=d\̾!, b2Qq|70h `u˵  ĐA)@:-q]@ @ v `!cO&Hp]6's8u+8z' zؒ+r[0Šv穓pBR |0pp ! @mR0 ?@ ^\|0 @Ql%ʀR,;嗱p @18 C?  ` @  Z6 [Ń˟aSjЎ@ Jg.pa9@ar a );'Z `kJKͲ NU'lw&-MYIЄl6 a. tlG@zaD`r+r$-r p ~`>V ֐}8Pr 7 Ok0C@ ] Ԑi]Fkpr~3$ 0  зQ&Ġ Ӈ߅+x  :F 0")du@[k^0&kX\$$ ͪ\@) @qGP )&nD` a`κ?sзiZ- x7aP 7;@] ª azűH&keE 5ȵ !'X> !G hd ?hP^`%ð ^ZrqC! 10(`G9pAuLN '~RH%MDy0 @+A5DsfmG 20h)SET)I%z` 1z4T'pܴo۬`TZ%c܈1@J5 9Cƍ&Eڳ;>6F Ԣ9Ď钶NW8HS:D% -hA@ ࠩYj넁PX PM@JWpT!˔/R8u@"]ʕDjrfPCuH4AiJ p jTBIRg@jO[":M5^B^|h{Υ#&9q6ʸ$"@,.YapF#?"aL^褑< A~``^t_LcnȩK׮` &@H1 DJP4cHH g,`LEP=+ $Lt+ A000,(L"鈆c$,aH7ơDYZ%͙CAdB8.zhBʠI<CV y>2镃D1`[%GQk2&A}4$s۟@J $; 'TN:A6lkֱ lDwċ%$7s:7. !5x@/agg|hܪ`xjl/?O lX+/t vV 3tQs7ta{zMR@6Q/h+OOp\rPJdp$^-F1"F#);)Np3B;\@Êg1: gaTvl6 B+hTAEYD6, `C/ 6}NI@y%7G+yo3ABFoy(G`Dӧ2ȉ㣝ijn#glQffXȨY$M`D)"@^PMx3j 1t(h"V?P( lu2yAjt'| s?YC v 8(142}*m3!H32!x`j !Z'#00X=@#(:$0#nHg ǂa@=`t";/уIP2x؁2P9!L2hЂd,lZx0 AkI1I I%7-Ya%+wc/ prkKدA9X V`P&0H{1j0i0@ӂu݁SH6+x0hY%@ (B."TRВ(щd@S2/ .H!qrvkQ!'rh27ȤA.-L sm3K7hj6BC8-n KMTIp:[@)〒3"@^ nɢ'˃Á&)$8umP;p %="+Ѕy(;ؖŢpa2KT! ьBj- EH`ʸȁ)8Sb(uaP Ϡr5RymO(UlsY|j+ +=`U%@Ђ{+-ЃO +(% ` S<Ќk;?S2w@.J{1G~kH-?h'E($ I VJMhi0i8ujX80y2v¹0Pc!+б@ծj <u5,b_`l$ {&}j@TTj'%RPWu!2%T`("Akv jPױ dVpK+聟 t`i Xs١PfЅav P_Xdu IvpQ۔&Fi`L/ii8dg4˘a0?l>)(ȁ?\;!Y?X%|?[U2Ǧ;"v A[^3} J/s F@ʳŧPP-BBM*bPa`088lh0dP$7DMAܔ%m *)e^0(tp;(s^tpTl pJC0(jp kpŶFn,5V8 aAj%'8l`8TbP;A5f(CRmMP OvrvΑy0m0`HQ#9(986ۄ2!3+(LFf (9߃hV%DGù/(h*m  úЄ^8 IRUI] a༼oo m1k%8ĺh9A@+K&oPQht 9RmHnR•?IgyP 4,u,m:b"p8Xau(( bxj[˃- t„jw)`[kٗRg>qR@C`PIuk(fX4[h-Pxgxh 怂dR( A?ap^^оI~X]3G#y/X"VNؕ(ȡldZVьV%`Vא:hn؆RЄj(jh^hpx;ф`_`1Tb ea+Rt8!5lP8xa :62tFu"udap98ia2  &Qy l؀2(!2_HN1! (a vhv"; e؀#h@fؕױ1 [?+#b 1TyІo@-*yrEENJ=uV_s J+I#PKvW<#ۍ>(:/smn|VSJnmxpM>)aЅHPVpȉ(8iCSxd5i` #ghBYH%L  ɐ+Q PeccsPPQ?8i`y6兡%IЅv`v݈Ptρ b-%4"`^ 2hgdxq;2x_yxaX7R ^YIƀ;·f`Tf"TaxPȩ8`h6׷0NNݍ]-^H^vd^_%i^a*QGN4"B8p R ځjKj#Es978ff-腲Kgp8"У6r"Pkj PٰDRWPs=80 %$b]Taejt`k~»58ցQ](F{ yЃe"` „ 2l!ĈqDRNW'` GV( V́JPTGS8h&Μop +:btLOVҝX= `=spC'ذbh ޶o4aQ^)=(*WnMYĊ)R5F ; 8#n@Ԫ#z ugĐQ 1@66ށB?v0ȇSWxP /v􊏜:֋Ȇ 1*v(;vX)7M88p 7pM28p hL3˴L8M (!CDJ$CrD pf 0(j$ ihl7˜ `A?467$ t݅;49.rKabÀ]ک ހYAm1:@IEErcMw:cMԃG$34`Jx ʜ(B34#kasJL2(b @s I$( 3n$@$ض0:CRT^A UVP X tnBްCsT@Go囼Pmt1 B AN<"fYB7@lPM"`8Pm a^ppqet}4P|3b+Q%PN0'E鰒C6D59PA|eSG 2p`HLlh-rf5Ӥ$% 6D ŰCjj$BC44m%Q1dޝWrVJ JvsT R(P+xd;uAa2?hPHe98ϔrsNpLN6jA"p p#: XZ54:Ϲ`ep i6 NE18h9  `)"D86a â831  :(S#msޝt+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViX^W@ɀÙ #A &Tiɉ! ,! ,! ,! ,}t(D 8ha 2,0ċư8QbB1:2Th#F+J+ɑ )x1 1 P`) 7hA ?ب4OEVB>!VCa@! ,! ,! ,! ,! ,! ,zxC@ &d(Ǐ-6,# PG_ϚtvC$" fzFqW u 7/+4nºՂ`U*=#(*d}QV`1 ΦztG=枨P Wjё2D[GSr(cN r{ 3g v@h (?Jqב+:QbP&L*CPXb O/AD*pR` '`#7`D .@À! ,! ,! ,xH *!A2 ʠ@P 06XB@e8Q#l P[9s6$,0͛7~EA@ %np47^x! F*ءg6 jG#l8@ &Kـ'. q )Ӕ@}SVE91֙Se۬xYzP džQâ?ώO@rB Ean}uc)1p7A%nAA2jr[u`%v07EaĠ hʼ2q԰afyCA%(@ڇA1p9a)X%W 9 C 7`Ŋ,AM |e7v%xV1pB^# 7 Ð=vDT DRhQ)@@! ,} 1(oaP@ 14T Pp[q flH4v$5! ,! ,xHp *\HF J\P 6qa  D'@I nA@=0.QǑ#@v8XB&?b=Kxag K (0`; )M1vYN9*@8"A wۀ# Pz5ʾǏQ+ࡀtqCB}s,}RW2Ak t8A#7L;qj[%`xd|fZ7sm6 ujʢĞ.1l-b+ҁS/:9'J)Ӂp @|0@ X : #xF@\B`q0ReY9p 4 @(|0ی8D ;cGC4T&SN47@aŖPhAD 0P 3ViAli QUq1 PW٧Q! , ^H*\ȰÇ#JHŋ3jȱǏ CTH`ɓ(S\ɲ˗0cʼH̛8sɳϟ@ִѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#K˘3ϠC}2ӨCJͺװc˞M۸sͻ Nȓ+_μ -H@ֳc߮;Ã/<ӣ_=ß/|A4ПAH"߁ }G! Ih^ana ~(b$hb(b,b0(c4hc8ިc$HtD(RI2dP>)eB!ɠBB$`9%afjn rytx z~ 蠂J衆&袊6裎F 餒VJBNR}$\)*B :$-RGctVA]pEv!*lkll.묯 5+Nkmzpm~+n;N B @ @뮽+ k0pǀo $ cqoq ,r$lr(r,r0,s4 AȀP %  C'C K7@L%U-4M'ffA0-tm7x߭w|w߀-xnxx/x?.y?. %@!@ ro =B =:p?P݁ #1=B q78C? C 2 Q|#- {ڋC :L ( X2 '( RD N< sll@v{"*4` (0o<$[؀uH‚80(0i @ 8;$h<5sc(:v#>~ $ )BL$"F2#0'#8bܰt!lrP1@ A8`D0@" ITTh7@&2I]X :@ XB' ̣A X.%@!4@>~ (E j`Y2O:8vQ n؆As@1!$*8A BQ  3A u$t \5>"j JթZXVխZU`=H yf/T29 zE~%AJdpIZ.:h31d!q $8@P, $HA1Zv@K0*f+-nw .p+M.r2΍.t+R6baHo @a`w&e@(Ѿs}1]R @5zIPpѤ-KT iP_aM1U uL!MO0HɆ@~ltXMI l E?_dX h6@v-0ƦNT MrָqH : "X6πMAЈ>E;ѐ~#MI[Q$H/ ېb(x(!0^ `Pd8 i3tW9̧NdCwQ*7+t4 \RP~RȹQ⊃,_»+ D )&j1n []9 tWM  r@.y@Ȃka$A Zy<@Ɲi5` b  % րoi ,/xZk2@DD4eq2n 0AL{R ] N!ʙE Syoq_}R6 'v/A 6HV!a<B!4B$UHJP$PTW_ ̯_g{.W} >AЁv Ѡ63zեgE!U PnrZb4vVa=>޳}4 1EPf;VW*7f :~e3r{]6{/&~J#,qW78 cS'5(G?"T.H04pSPh>HFP@N&Pf/3n5Dpt(Y1n"0F" ;2Pr"KD"(:/2{;=`=zt،x%؉{@ w̶;\zXQxQ;#WQ( /Z X` yS GR9Sr7G5^.@@9@4S4 ʤAe!{)(`ʦʛ{6;;9ioO'ZC:Fup |'U] Z LU52 Qjjjv yTC$Q~ڞ:#56f??rЭ7:A={4f G`PPLBM)OT^ ] jW.+ ΠD4h7Я{+=W*6&R'0O8W~ey^2 .kPp:[[QG 1M{;\($O8@f/w:}ڵ& ?g>F#ʳ9/ AX qIK*0SL*Ǡ2pJg RD PgT8t[ F5pE 9ey+KPT$ y&u[1t`*0& Y C +l6aF bI% KOI GE+`[c jTH4OI:6a:=&7p^ @~5g|*wuk̻ҹ/y.:'`G- 2w?LIDzy+67Kl|kfr7nU\/\YU Lw_FRa|SSgf8 ր#ԷYc9x=JSCiIDƈLp_\ ({=pș䶣e\FD%%2DZ$J\4n< 0 pmc kH_ˉ<ˣXG wtp0^X@DW WvrKNe0EZ@gԠগ Cc4S zI% 4D/cy uPpsPMjMv}pJ %y,;aMc i8wRG=oGeՔ:Y-e4f^z04].5<}=^qҍp'ce][:i-aea͗4uDzW+ @ iD<تb DY1j@kYnnK\u S +K`_3n[Op1 fU5lq70Eѐ^'? V5tqPjJXi"=P;3 VΟɮu/ Qr?{>x5!@@ DPB >QD-^ĘQF=~ QAWK(1 .PL &8;CTPEETq+* 'MRA K~VXe*)M2 "0%]ވpJjeEXbƍ?V`Z-\ 4 zN@oMFZjilK` ¸K# Zpō(٠l2~$!_Ǟ]vŮMd>TXà ]]|wT^XP)88hQF p/B ';/Rb s"F fRG*dE_t,?fF pN ~q^8F%dI.-C*`  0*@rL3D!JRvIK|L3O=lʂbkNs2>E4MH` }P@ASO @☁4gfՅSYg,Fd虄SJ ;hGGkE6Ye) uQ h 7Ωv!.ce7\nV '>g8;*+Rqwfǔr&*aAnPAx {(nq7b%W!4NaQQ6P^y'f<._HM bm ]ay PbfZϊ02jr ting k (RHA %b`Ulvn=6=sʑ(XƻqDZ[ftA`<=^NiƼaNTtgo,r23\(.ai'xH?l}$05h c m(b7>|"ۧ$A$XH~B AAM"AV%.V@zvWc) E9Jbdu a!?66@D6TJ! Bְ!HC/Rg0#G(>*u6䤁L8Yt 8 !fJ'H-/W0tl8 #)L:/HFd*aAv4Tza ˤh KmjVMX5AijZTPPZa88uA5Q@B&{_k& y(pdCWANr-ֳg*h0 f n@LDSgyYSsLVIua @r0Cmt-$?I::0 D E} ٞrXS°~(k$CA@NXlXvت x^A\E^gXHp%b T: ݠ LZ x8"  a9 ؄;x5lߠtGf L|Q ؕwHYʁZ^cP#Ipl3$$[iJbw. [KPWxRp<VmHEsp'hP"З>JC͚S/ 8B)y.itI=؜tJsc[ <6th2v DGX=V!R: tpv#T*'9hbL\@@Wclan 4%@7%>dʺ AwւXr`"T}r=Ar5եA4QĎ  dPpΙ?W rD$x'ХO1$R [JO)* b#X ޑa\ ^iF|rу(t!yW  L`@ @Ttij_L .& DnHЋm?BaFx!?På@HvE83RX^ LP+Ax8VwaSE~\v Icj~j%0ȁk8ȁ?k2}1@k@+h M :0 TZCkx(8Vk.R9'6M"PP(ؙ$z3 4;~ڀ޸ a&8 {CA[[IC(I8B**N@LUʆo#AHta Bb`7869LуN !8/ xL)#})$(7 eRzDɤ)ƫH; ` uRRpRxq+j-dr6U΄`` D@-V; uNRsԱO4JzB)HNZLŨ[ 3uj+U+j8Rtȉ軑s<>^,7<KI 9WWb+(XK7/;]MKءrRodEX m,2XBMٌj vHhԿқ}+ AYmA# $Z2"#ܨ]0*H Ó 2ف0#|j,"(^X:) ۊN% P)CѸ^FL\T/x؆aQ@9 ](H%-@kL] udj 8M#rq`$0t^tb+pL ]iRaU[d9)(Al_Ozk 8".Wi_H,ށ TF&!M1 b@R=şH${$z adZ/$:R ;t2xchi)i?bO XsqAVAiH2.c-DK9,)C9ny17a$?cY + Y\dGR2 M~O xy ti63䥠 " v2HRGq1UCg6zD8,۲ ;@z{e\]d-{6-**yhA֘h,I~4 xSB_GRk( si/1jzkl8]`Tr=r/+C^1tAG P-=89켮NhfwdFݿr^Ǧ_}耛h܊Sm±N>k@G8wxמf( !"PG a (𫀸b%6 ؉y[)B.q¤.o3d#(5lrrZJiok^v 8,FDupp  S_q @2Ѕv ElK{h &y*K @rq *=r QWYc"1wNPO j-NJ'rszʐiFH"0X 8A)jiМL ŒXɍt}ràhh\og=:X_"^XډD (iٹ-bp"@)0SSXap؇uv8#`pȔH lhjHhuwwklZ)ЁqQ سhe@xIodwI0"((I CP9vy/y ( Ք;"kgxOi BBP ػ ؁Ae` rPHwz hfzK^(2p$l[p[@{wg߀0@+ P {sr$#Pze08ʯv|Xk:,"a c`(}|}B? HPHKY$YєR/O跛?1QdF#8gO2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ2t 4^ΛJ`س'CBobѣ=T2m)ԨRRj*VNHbg%`- Cٴhגm[r8.޼zS蚂El5` ,̚7s3hU(DӦnBgӮm67‡g! ,! MH*\ȰÇ#JHŋ3jȱǏ Cn ɓ(S\ɲ˗0cR@R͛8sɳϟiJѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐs;"a̹ϠCO'ȥN^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.WngwS+CārD@ U3M%@B P%4- %0 1@ @=7t4^ L3?8h45C%>_?;ľp }(-`@=#  z1aA .h= ЃtcHfh rPc;a tV~& @7N@ LB9Ht=@AF V- $ a,W,6 C~A x`jTN d <5Gݘ4p`*2i  R(X)vhoI )L09FL B ! ,?} {@@nCB# ! ,3yHP@h.C 8P E2<`B#8у8(A# %:Aa@8`H90F ;v'Z͞S 0( uؿXY1!p:tMv׿}h;` (nx8N1e'~O\o!oa$(loߵm p-;x_i~)$9ؕod8,Q!gX{~ Xx7bZC^xl{f-AsKODn^%pƉ $<_JHg=$p^ZTOzV@Ѡ=P 0Px laHB4҈4ܐÉQ$F,€P@! ,! ,)gHPpÆJHqŊ/j! -0RH#S\)@HIsM|n3g͟: JtѢA;$Ù,*ХՖXj#U}TJٳh"CPլ- Dݻx]t7@p LxˆBE\KG˖3W3gΘ/ݢqӒQNzkJ_ˆM%N(w Jzޫ‰ qA[ 뾳c߮N{'nQ0J舠^}'}WO( 0P 0`>(aJXB 5Bh 22hO5L<##44l3<< 3У9“PF)TViXRi$)0Ϗ3=r;) =4H5V( 5 % .h>*iNjiu40S<^'?γ$؎Q<'/)4K&6K>+@[*)*<+oVɏBI5aN=4 4o+plpeWh'q9P@:q n&1a  )v+ :.M; ЎCe7kq p1"qt p$>)s @ exO4p p tEJub2 @ 8uE= ̀ |?P#p ʅp0 D@@ p @z  # d@ gZ ɠG 0m@0 Š Ćz0 \u 9`}= Pt J`10 0 GP`àub{fqxÉ eRV kgh0k P 0r8FnV1=Ќ9R7i=nvd)n&7Ќ!7? Jv/7$eP$: 7"Lf2pY01G@O6 b'Lh8[P0  0_ G7JP aEgTG ` T6& V@z H 5J$V@ae44;/@ PB/ 4 wZVp _tG@ @  ; SEaP @$` p8k? 0 7P0ZdQ%pb 7&D&Br%v 'J0 p Z`V0 JP~QdI İ<FUq$7;PP ]X`P98 p ǐ~Q4 P/Qp ːX /sVp 0 zpV   @dQ `` F 0o` Vpr0T 0@; +5Q&f?`HR?pdFFR>'7TP1 n BgaZN"8p45Dp,'-pkyiC&:;DMXX:[Q H$kXy P0)|Qfi!YP`<0!YP /y 8rfԤ qH"͈fŠoP 0fU%' Ӏ@ЁlfvP ԰Q&j@60r18X( Ee ` 0!aGP ` pƥeJp P H@geSv%Ye wPp m\gP; @siX eUh1^P #=xkMp IVp psGUZ& /԰  F;P6!,DPi| 1(֠  Ф ) @ 9 0 p۠  [bkv% `T07 `F PP\ wG`V`P-P$"؀f ܠ8?@P 0  NĠ7@ p Ҡ P!YZ Op!H=@p p @ ISaF z0`O9   @ xà!YH38PUTZ E20`& @Zڴ 'uQxkQ5=,$hZ+U llmքh i#|G0V*u`oC`k(P,`lHvc+ܝycdg6&Aj1)&ƪ)VH,YV0 P eY6)0 Vu! :9 ,khX +:PJP~JAR rց4 p 0 Tw2pA Ր5 Ѱ 8^e [54r DP ׉# P Ր mP' W a z )O5Ȼ (` 'A]6P Se T DR}'SaZ ;\b? Аe}Jz np  Pp  Fv 0 ذ(X'   cణ"H»tҠ 5(2BqXe@ ^ʗ րƨ@lA)rbEZ R೸mJuJ1N*=&a":dGQ  Dȸݐ! ձJ=bȅe|aA"$G[Z"Xp\(# 2H owv=ZЍN !?Y"r Ѡ c&JНa p @ U"!K ?k0`ڏsa Xoepu Mhˠ e ϐRJP ٹŠ~np#Q Tn@P 0u X P4ѐ_ `aPp  zȨmZ ( R_ j R?`PP  > нP%pp "Y_X:UpX%` < JWW PJ #yڻ' U(+DG@  ` gӄPZҰ` 6Qk0 A ՠ 0a \p ߰ @R!y P` C @\R, p 5V à  h' rP: ]vtr  P`77eڕ޹! Ƒ `({r ^ύ7=)R!t Xo*0M"TE{ti H!rh%,0"@_L!@`  V!XN$a잍eHʨ P ZF"8t܉F6 !a)桋b)|C: Bnz`56ыTJa z@Ẕ#t 7#tF +4B:Ph4:c@@PPmP< 8 A x pkPP jJ lӄ SL hF`PEX`^"``Ђ[Ѕ^*S+JStp8V=(SlB$%P9P =(I]EH](G, Є2 >, 4Jin!9(.Ёtد "x{€p[2 ʥrdk3 X): |j 00X@(IX@€0 {j, c1@8۠GP nbHڀPz|/H ͛{.\sZ4br : M̩hf +8NsAúY+Κ4:P뒱X )+Ё9j|-PǨfP(iЅ HP3 px (!ЌT %s(kT 1QXȁR I`ec8PXWcZjfg1 epx j87Ђ?\v8qxomH8lHYcb`t4<* ՂgyL(_Hzt(~of(x[8j(6x9=0hI+ЅI -M9 ,0@HP`/ ]Sy/Tah(hR[HT8  p/cNH #6fOw9}hG* Ǖ\%3 8 g 't~>{萾 i%k i'k6ȩZlA R`"8Fˆ%7r#7n(QF2 H2pĐQf1JА!D(PL1e@XIz~x؈#E?*dW408p ,* 5dԬC7.@ Ɔ v047(<htQBv `W6XB0&ݸF"=vZ0dE n4BhIcpSFX7dOb%ªeNSBc J) @a#DlA{4P LS2ҀL3 5]L9H cM8n$:l 4DR ]10%!(aA)b3DZBĩcE|MzeN)L JFpL/r$VȠ:04cP274C&[6E@P0it(10ҬAt +BSN#ZXC3R5741M5Τ#άx-$0 5@Rs2p4 q3BP <(L(Cz3-:*;$p50.P3̫470M2[40I:2 7[F:J 443pg)m dÖ $ P44:h0l+ 7DBO@)DPJ9P21 1D0H:cP0GC#D03UA,M7Rqcsn4`/ Ѱs^BD* X8"]"@t dK?0 @B<,%*` $Rd3ag5فB)"4Ɂt@7@b]1"2NlCؤ^HfXEDadL- ,ÏrBD~Xċ#.u0$4`&%4u#UCsjb&+08 iDR@8"THjnGDs )Lu?bQ4Îl D@4`CɔZU3(C5X`@1(3PJXC/"H5 036t@ 4 ,CKMD @fEA@A5ViԞ]VB+iP>@+L$C)$@1h^e30'C;(`@$Ê`-BԔAc0̇5X5|7xPA9tUjth7t0FP8 ỉHC]4FV%JfK̓&<܌IxiX:lC/p6@(hUfZ& P5@ +(W(Or3=M3HU4@AnA%",0l$Q9ăPsFZ9@Z7:&-Eɻf)Yi!"MTG((_ @A@ `"hhA g)*B(NARȁu`A("$M+S 1IaJpk!=R^DiP@a)իAD@pD|~3Rtc$nDQ\u {9Q*2iD]Qi1t<,r!UT ), $^jg5qʌh:;kوD@b!DDwLQ ͎ՄyN"@)B)HG\*At/C n'q@  5(\F@ @p .;3"`éC3-熀d%Å)-H[(h6T t$· dCAZhAAa2  `CX TuDft9 ~gZ4L9 9J5`A@4|X(|H;:D:DrIC3HȾnxo (+2 Ts.7D'' 3J TRGކ)y,JAϯP E(]ʜRԐr5ŭ9X1ьQt#y}! ^ GSE~Ru'[QG A Ѐ ܀)Y8݀$:+ҽv31a^IMPkI*J̡B1L`)|@0`5pF8 ]F47:vZ0Dp]ЅhD pmu`P?)0`DR$A*0:H )A*p`q0K6(.xhVࢃbuZ"$F$ڠp`Tj%)xvA-{!7hn(> 5wW o (@vh@ R ;p2 0${jl)8R D2^RJP/$Ay@X!^5 XI B79 G)@ Sx &`n[p"x4ܡ@*aDM5D4 '00?(V7-nA( b91AN ]!=LBDZ zHh4a?xG: Є:Ѐo c mU:X4z4εe<Hh5!%b(@ 05ʀHш sL(@dDLhL$PF(4@CaJpopˠHH9 7hZ8+qLcUPS8f@p F(JXp :B:7`NX0`j$e틀q st iqJ"pD`o ;9F9"h$|9p r$@@_3S@@؆3nPL0u7\s*Yaj2L]EY7j$MH@(9.*5p 4h@4( P BhPEn@wP޲DAfc;3@(ʡṾ?A3XA (Qqǖ*hF n0o&0`F;`oz fC K1glmlZ? &S(@n!a @1` @/HS fAeI ^PF/,-*OtZ%LC€r 8@(cPxb«:NtvZ ܭu _LPxҀu` p@U[0E p"\Dصk? 괘P);zI`Z/tGoMPtpnOˋRHQr3iLe_b%d*7ȼuЃBS$Bm$"! Ǥ['1 Q\SbXl΂[@2_G 2*rP{n@7;$hJ`]~A yp06zq9PK!)h D'/ @@*9l@ L 2ˀ[B,0%E(X;zr\ A.@@e# BM1 Q .iTo0ED8@`cxF\kB$فs8t5GIH ơd`Ρ.av@/JX!`~"%ء J!@acI4H e8` Ds0# G!?E4R̖#]``#r`xɱ@I@c C?Nn@X!bHk5b|8@ ЁnaB q@A \z#ardB`H+II JNڃ"`p%`P4r)n:HPn|p AD!`O6 t @~E`VE\V>逧FA(`k ~A(T^%bQ Ae1Jh@ ҁ`eFbA +_zaG#`z$ܡY&-n`8؁cpʡv#Q#) bz \vo4@ L ވ`wG(@v&&ElVTIN @0= +@kh1U  qkGs|&OpDmtO(gxr/f@(rp@V8TON66ejv4u:@uTlnoH8ڇ+HF q`G0.7V(+$tB3~@Dx^"@~jb*b<3 )d`-!J6ȭ{H腼MrNj=swܓdN@v;GC-؈ Nt) 8N!6@eb X*0$v@Ch "@iB9`* (nHJ?a@aJ(aJdHow`@~J`Iyz PmWJAS p"0 UNNfIn/꒨D&Ar@^RQ :@A0V2š&" "aK !aSFa3@YW2!z X@,*xsX`nnJm& \T\6 4d~ jA  ^ !&SA`XJ!6r`gg#FJ8-$*M>tp%FDp;/ʁk`"I(&a4+t)x@F{lB(ҁa6d8x !pJ'PDa\FaQS>O~*Tʠ GdW%t@B!T !`ń<@@ n&`ZV0 <nAH4A Ғg؏FL53a=N(r``Ba&R A tʂpoAhna4d@fzAz!@!&`&Jp f6~Κ0>AČj&ʀEA:!J:@a>e:@E$`΁(a!Z{!@CExP!d!aJzap*uc`*;K.mP~-@`@ hZ @hFQ\6z@ B (M.`½{ ʠcp)G Bà:z  D{>ݡ]GplH@L.n6) VvIpZ*j\Ghtiyp<5g6;9WACSBDr>5x Bx>'y0N!r~Vh8Kz&ĵM~p䙍9m/Aa^l ԓAH}Dnb}BzʧLoL= "y&XavtLz .k:y.~K  ҈@(`S@*: 6i? '^!!f-!4a8)vgA@89@nAyXaD䠇g@`8I"nDuG2…J[20| 3̙4caٰe֠4e 0;F 9akMKhߜ4``ҬmЬ3vy6Y5" 0ސCV`(R舜f-H780W;^(cC^( @)n8hK̕A:+Q[#( n% 05.hoQ+a%~ f8x20*,9] ,wlg eRNPSߔQ:>#Ì0@| /(I8P{`#Xy8tD|wX0# e@/@5ŦD:G@5rX8d49DpP|C&1a%Tm @LR@K<.ʘ| 1 1sJ/H2VlpM5#@`3(4h5T72pT$D1r@Lc 1$qL;ҜC[ S 2J4B+/b.T2Cr 9! Հ_ E,ۈ9ӆjPkAyGc@]HG;ҡ  hFhFpcDj_ G<@7! 0G C~W#ha8~d{AA :A 0Ѓ22`-y!@*Dl( Gr^(+xkH HP@q8I:PP$ FZry0C$p΋6?ɥ5C@#pS Raю)%F_R=ԑ˞4'jȐU4QUO T0&0xA Omn48~r \w0 If9Scx&J8ݘuv1LA<.s-RVnAUAbMDbI PnhR [8(q2PÑ&\ < Bاo%QA8P9$ap&Gf8T‰_ >37<4 /PV):4 o7kt20)4X8lbi-]CVpc=rq2C@paod*P@%i'C2j@t( p$)$; ߠ /}" Qz <!ah<}BG@3J-sSDZC(1p'`/"(Qf5@SEH?uy"z n 0 D<q 3} 2 XNW# 7b*D ;p  PIJ@ wZs80%]6s3 ` $L JYGa0 Wذ zuMING@ > p\N?pOOp겝 xp2G 9 P 0Q_( װQ ( =@1 @  Pz/ R:up ?52ETnt - +9p1;1 ШE1L pNO*iE Vp )W>(P{ [R T  TX Pךpaj#|#JK  >Z0 P A> q '0~X ɥ80d$ @,PAD0`G XP Z P "Q DPPxP0  ؀?w7 P"h]%`a\QOZ 0b2i:q bjB",@z@p@$2.Pm*,PrJiDp FZ :p(@`$:J-;JP0:m/@_w=y0b}R9ypCfا@A %<2,% ,*Px'/F ?kSIl=r9qsv ٓ1MG:6A82A&>=Q>,5. KO @UH.16AN9s2C9nՙn8#=𾽄b%{xK?P  G͓15 :m3Rm 50Psl\7K-15cqG 9 H @i!B u Zt @Y `2Q ur T ˠ? {   K%q r}!>u G=;|Et7f8   0tܠ @ P Y p @ daSMO\-AW] J1x鰍̕L(r HXpA10V @"̯=e h~E( rԃb q$iۑ1U^ _jWp x b ݐQD"rR ų R 0 !9ЈҐ#8 =D`-0h׊JЁ5˒#W$ p /KVQi| 9%(bZX}g&VPX'uBJК bp@9%h k S ԓ20|@0 @ N gJ`خ0 0 ñ> 0 , 9=@!*MZ౑ a =0 P 4'}?}  @kGú0 J[ 1Lɠ͠%àO-1e0& +qm ,ppP=P0% 7u2 5\CK23i9vpSA.w?V2m_6rO;#.s: ݭ*ͨ A9NlL>I0I1P&o?\; ;I>c.I6518HOU0q"'q6zp'c;̣9v>'s2 U@ #`w! eq23AP  34@n  9;+5:Gpt$D@DdKESm0EO6֐  ^7B J v]J  >y;VJÀP  "<g m6P6A  o` ]8HXE5nH0iJ0ZaSF9]& Ed%nl@uDS]/(FS:E4(@@ tB;ƪ/ndH(#t2]y+}Aę5jt,'enf@n}+0Z%ʄAd1iKY59HoF8ޚ+ՌnѥC0n@"\U0E i0V Fs ،Z(ÜSشf a%~f hfii v8av)Xfhbࠡt)ZkfPB)(b dR%p @FsNQ? yJh@Df!DFt0'/arh@6"frP (ƙ ì!g46%nQ"SG%EуP'ƚfrؒ8(j %х(dr)&fݸgr PpHzs1` p(q(- J8+!!bwߥ%8ݽ,nW{>tQ]f|! ̑fi T_t_!W2( u@Os(6 -h;`? ?(Q;sLlA*σ3 dD!U> 4$bEF,)&߂D!b4D jЁ[?(S 'D;b aE8R34czr'y ^bH0w ZHxQ$Bz$ ( `@,YITY& h Xp\qbe\YDEi<1YLd3 ! ,! ,! ,! ,! ,y8P QGa #*4h 0XB;dxQ`(Ԙ&[n!G'Khɛ%2 ,OH Rq@;r 2R+CRn4 ׊/c)Y aMmV+aJ+1 ! ,*f4HE$%2Р#Dq?}0JȱǏ 9c.LrJ@(ɐ8si0B Z4(ѣF"]:tQIJjG.Tju׮`r+.T]%:ĐF %Ǝya^)dx؁l#K6(#FC%hphPA%dB'NࠀSА-F 0Ԧmy8fHStЃF Al,8wctैʈ(¤jϸa#kgEe9f :

,Gap p eb,%&Be ;` % -57{` P$&DjD[> qG0y0@yҲP@Ԡ p 0=1 g9 @ C 0 ` xdҜ^k]+ ` p5epJ٠9` п0 0 Xp<0 hP b}I+[<| !h0 XV i1`rP  Dp1P*7 9JP e`P ҌB+ =yw ,r눛yKP @ p 1 z@0 x\5Rv ıMZ cC3x0W%D~ZE-v F-S(ݿT$$xo'-%x9s!gw \˶9v(&-$u2MEu+ڽkʙvzExvq&x& q]Zx cUߩe1 5r jKa'q ڧ m39 QA ! "*@z p )T6bp ? Їy:dͰCEf:P l@gPDѰ F ` -X5j?L.E   LN p_e"`s  0 '֐ 9纠(.p)"pѠu t Jq Vp4 ̶a^-4`  c~ǮPh .I% # ;P ~G` )K`x1 c5 rV 齈,`(T @ 0Nvڟ>Xe٥[~1ʹ1 `]z)r#/<'r G`V*!A KW}ML/ՠ *ZKcr t p)g7 ]/yZ= 5u1/P $ ФhsP ߀," 0gmxO+% " VJ^!K,1?H0=me   ՙA 1_,= % P!P85`+q@2p)zMu ۧrWaM"(!0DPBa܀ACF:`!a7.X"eB@=tHN=XaX"=09Yד;zEv !̓NMڠ7.ܚ61OP r/MvPXC)ޮX"HKzf@Iq  b F {`i0ӚlJMp(`bYy&P*&9%QD tHfs]Xƚj po "+8Ay88x+怺o8 n(GR!9@š>!hh*s/a1ƥC;=h2(9f|*J9=`4A|'`ϰRpKL47$ &XxLEk`c8t9X6P@jHr7 u"?p5I/t BiC (î g(@"'!`jh#aHE鐆@kC9W<0B,XtP VL/PEB:BJRtD )X("8,h:=BP$b=be$VMz JS87E, ((.с Wd([ " $^0p/ R0#@:y+Q DD8 %p@G*ИE4^b .p R`YA%S6ӓ=8A&Bݪ@jWV80ඃ&mO6*)@Eғ$4I?x a‚heS(ֳ%f62 O0,,PUᦀ1]n j{r5@/ %Ånt˓ķ^+I׻@+.xջ^؆Ja'xůzڋt`FGؒ_{n2nn+5ğpEY贏ÏULPe/ aPL.qaSu5ALn# 핇nr h CZ;W|ki S`@a z*? XMsت+7Ё@:Aw>\81Ŝs2J;7"4@ \c:p#EnDtPRXuI5XED9iPE S8UHH:th'ş  v Pb 2@`FƯ:ƯXo HV=! gsЃClǙ vГeN(#RIp,K(jƬX QwM1@I t ȉpt(i7t#u . ȡK]St&.M2K$Pu XjEf(3 I(D*DhXZMPF0 ]tPfā Gw}9 l(a [(u-Fcu(% `Pt== fX8 p(:-bn8IlH3CEÁ[p_)Q u)Ut/::Hj!Tz+f,AtЅ#H>@ bȁjĠr(g F t`tx("V$((@}M"b tP, ;|O %6<( ſɧ^ >(`ཛ pt7ӊn`s2H+@9@_s ; H Q(h({\ gh8-<#`gXI( DF7XluGrJw1+8˽XT ؀ :K htЃvʠXZLkh8 ~XCPjLEho[tl(`VA"xEV,B.S°bBS(a@$-"a @ҞsX􈊘fQqNvgHkjL gK u`ZU]89hXXxhl+VuЁ+M:qNĻ`3ȁ@s:o `R'`qŵ&-8v)t QPHA 7:,ZKXc%(MZQlPI(®CX8o)ta`jwC5TlavX3Ix%h!aPM ` j;Jld0eeVkЦ##phy Á: { 9s@[j_xfog Nbo HЁX؇ygd(}}^p z`+ Jc & ppo>$U_DEx 8/qwo?r!_Hp$e%+r(`g[^Hxڨ fvE ! ,S`2HʐA0F‡#JHQC Aqc Ê C9(8KwlXf[ 2`t(Oj\T `N%5U``}#&ZXê@*ApXK7b`@R_`x!Ƒ (AAŎ&P2d̹ϠCi-ZհcW+{ڸsͻ Nȓ+_μУKNسkνËOӫ EvWk;=7Ͽ(JTmW8 C9_Ҩ %Ж tXpZC?Fb!h ] ^hh֚meل_,]`L6PF)TViXf\v`[ $dуbcvIZ:)tixH6ɓ]~j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰A*무j뭸뮼ҹvRg@0\MwVAx0lu*VkfRlRhnv! ,! ,-RH 䢰Ç#JH8tȱǏ (b4h\ɲ%ƪD .sypGV՞FϣH¤rAPciҫ;c4%N%`tI)hMFN P'zPЄm]=dqD:Q ;W69`[F @#8 (@%b(# !76@H#]:N̅M]! `PP,78qba uDxL|fTL/?,CnQ@ܙ&up p Pa`S mC$ 6 ; 7e頣C=$IW1Xz-[nݰ䓊 'p% - B*h4*6pfX*P $p@T@ 'ܤ @ 1T"jdz2T5| xʤ$pK X e7``:D@bXR)QAObyJ0X4pPCJ24Î2ddI-Ɂ$P; :VDA h2{3d;M)p `AM:T`t7Űb HM=0=l3< tJX#,4҈.c ;,9D (ЈC(@4Tn6o6ŀCrcl rFGB9Ө- @NDX ; E4rP  9h=pP:E'\3 G)XS $YQ-}8`P;4Ǥ9(P ;ۘS9@K;=8s:07\z@@@:@$P+aC@D7; X +L?< kEUJ/z`X3HA zp0d[8@>Qzİ7 Ұ6!gHz-WT&6Ѓ; icG gh< lC=0x$qAj=yV42 cC҂$FN1Ec'', "ȁ xTE"=c"r| Nu6u [SD; +bX%!g38Mt<x319юum]! DVANJ4𞕭a<:ג-w) EB4ܢmXM5:I+V~}(xa|B׺av;>- ) NJ (?@0<`'@} 4 /:;!ST 6358N # 6 O6@D̑X: s+C\-)`4Xke^ie;zJ 7 `|Zq@5̓ SDCe-DrC$ ^VvedɌP  r5MQ_Dt h""$A sEp+ؠF@x O0h@nX!ב k C M,J@za@A1 #uLX$Z6t"m-CžIP;P^cB11j CG8)zΈЃxe@nLo 0 tnCA\i#e Eplւ:%C9f+5~r C nD#0PF+@4UvP(o+8=zasxah JS(6@)q "l 0~qh pHOh p-)+=!(M =~O@#(fA|0 4pֈЙ.Hy?s"b<P8K7!I<~8ÁPa;P?J'b^%>2r PUr ϰ Y 8; 6. 0P P OkrL%H i6a ͠P@6R?8M(o`a0 P G ɠtRY8Gp* i9 .Ppf9 r -?8}kg%"G:! tY+n%*< $[a0 !%F 6c$@뎳V 2 Ѱp p4v naOF  Hzڄbu:!P̀@5O"7'50o( P7^)tۀ "@ `adPz =mg1 Vе^+y p*+$kGA$WaOtrc>fI?=|m8ۍ0];qa%W4g$p-q A^Zpx%gfI5QX@i˗zrz:=P!'0S`vX0Q 7a.0C*(.W Ѐ588PC@ 1b8" 8VXތAmʱ lVNC> čhJtðb )"N(R0P4@  95EzLd8((TBZ Bc\f v @;A ] U"tHEYFinQPܑq b[9z[ͪEhsc'3pܠD TΚ^ r˜vH%!@ nzY&\&a%, cNtj`-~ nvQ F&ƣc0 %̑ڜ PG 9ek tBRf~ <0pg&b)sy@>+[9ŜI"8 EIY:&bN&0y".ƀ#qnpW.27i `@,9er f@M| >g$3hFá1-8@9Y Go@7#,ɧFe:SE1x .f`C ;iP:TPfFƔȋթO 0jeCUh Fa@gEP@ccQZUK H :¹ `E į%j D 6Hը0Ѐbֳe " mt 'je{>(ߎ9[:C:EmIoEntc7I8e;[rYAa0AJҰF(ҡ im@Q lb}qIͯge!r%(A $4*0ԀI,j.}>H. H& .i`J퉡J.%( @@hG(bTo%G0G( $ȁQ \-uL#jKd8OEp+#, @u9okh@03hF| `@C"CIՁ# RPi2q:AdB<zf <!(%6R(ج L3= XnbY43, }d߶k++ R 17Z# t`^0cѪ p~y XvkPC|F!趽 c4(0h``bq$zACb 6jAbu`PD0Tpp U)ՀCpEJ}9즁375Q%G]%&ы2v;4}k:pa-ь-[AJ# gƷNс1 Lx/(\RP|(qteΗPJ e7zam(}gXQv aG0? 9&/ pi!.9P+yABzY`b/!BH0X 쁔0j(* ,0[pá\@."5Uc Ё= +xȳq)%Dĉ$Q ħ(Qk5 kCJc}r:J$tND7v聃Z$biEP߈b%÷b Kb vj(Ƨfl7B Gx0ЃuԶQ#lCzѮvAH)%uG.?JI-xz>j0:`4t8gPp0k .-q Ëk3 a*98rbP9eHnu8GD0 i8 ȁ,Xx ʢʁ<p nHh $WZGi7nHy4S uX<ՃaZCMN<%`c<=,;,JqjP3blX28`XOG[+:PXb(:RڞcYPfpj8*, g 3*b PPxex`y*X~aKM@H:MYT_Z `SKÀ$Z (t -QuC_P%&<=+0-@9p]_+Y,(H:@Th(ޤE{aHvHeh4Hڼ =ےB;ծY(m6Mnj@>0X@y`Z(  tb |OLĀ2oqP,(cXfVWTjq@}ݾd*@D# } G?jUPBrJk;(_(֜hQEMMM\ǜ p! bWBHoqpl-o(g&&֒0H!>૾ ! ,.QHHȰÇ#J萆 AǏ CSD\R`ܜᄀ-sI%1 (bgѣ9uLФHJ%`NSÊE(Gj.Шq[:4V *Y`c(S+pgˬ`hGaD7,!~<5Ⱦ8\G?Nlu Et﷬9Kw$qO¸c`w,/ PN no-@FpcPɰCX/[;@EZ$P]_%$C Xq3PB (,Um7저PU '\ @ 7<S7dhbK0tw t:PA - @ @04`DP9ߔK0hT^^Jp %֐P(A 'T2 dxW}}Dh &C 3p Z%pPS0֚B8°g :è0 ?\l = [†*õY][]Q,P@մ%T$A6p -%$Aj(D.r2l1L0?E/ǜAAnhA 9C84X  y8T9XQTL:< 0А'K4*`&0AX Dl+ YTO5DpD(`鈭 b1p޵5,M/8]ލ2A:TFdm:D )A hBM,S&kΐ^9Z1~:h 1p!4`3`c M݀ coz1b XaJ 11@~`@Q1€ߘd8EXA e`@0X!$Ib 3VROЀ4IjwqD'j𴧁q zdž=Zº~0HZ=A hpT3* r:Zwqub@9$;FIRr<%)CIxL" k&KPi58A@yc0)^c=Ia=BрH(B'1yS1Pvs)QNs#G6 =4X3,IKl(Tt1v 騧=iȁ¼7! MS+vMMCnhGA|NTJ9Yr@)5A n3U6 ']rp?'jxC9 aV5'=0Rz#"h7Q ~WթX!xw':ЎR4@y@X/9u0WϹUzÇ5&᎚~t\<Z3lU[oZc7zَ^cylU aXh2P W]lLLb8V<(tJ#& z -R2ϸ(Javk8)rF~gy~;׭T'RtͶrk<"z@ )LaZ{'q=i6QQڈ~Yg8ȱwc<3hD*P@H<8וp.*{29IhhYʔ~!bX@j挓d$?"!]Tk|l1#Ħ V70iIDPM{t<HI2DQDp$ X2ȏ޳0@զ49aNOӼ@( FXF:\`Z@+à'0 H 6dRPC?7XiTخr{d ^ia0I0hT#ex@) k(5ARpړff`f=H@5 ]X# 8:+@l=t1ȁOzk#/05(A9Hp Pp }V 8+f1('I{V  p  k1&}V=`V0) @ zJ`n= CPXP@ `  ZPP` ֐ ՠ` Ӡ)TG@  MP |. ` ,6c6 )'@P0  0 p iX6)t| C $ ep-  @AKgY첖 Wp1 ֤!I2b77mQsge}/‰a''$TVt)2K t2y&0 jl5B 0 @@4Qi4}AwCp e 9@ ? VN V YVPP;x19X`orP P ,fq P `vHPza`X 8P pz4 E {dC P@ 0  2֠  X@  €p6۰ 410=zpp D-"!CƆ }QBa J(]ZṘ4J@ @9 epb۶v&9ASS/=,ZBI1V%kC!PhIe]JC(;a6 [v @Sk:lV_}K4xA1 HAȄ-_x5?!࿤7``#ŋ W4- )ă;vQ;!l,7PH]c1`xD2*,-hc70H $O@9XCB lF0@D@ɰE ȠDX t@79V (XdrzC A (j"6ь8@782Cr@!l`s@f 8BִP908 d(ϰFnPL@\y`@ 0cLil]DhX8! DzЀ` lLr`71 u  9%9 :tl ɬ:jApFVFå :&A L(" tT#Jp@)(t8H@PJ@ 0P?E)@&hB h. i< NL@=؀d?C(Bz(Cb`0B2,pH` (Lh@^`4`'> xkPV`@7AcW nn?9AR`@i9$vyX#@ F(Bq70[ ̆T؄;x6'@b!zB5jW 0k SY`4ѹ2)xeqL Ɯ=zlQx9ɍx8.$70~0C(?!"P=聂%#`yPBt FȡP/C{c K 88c&w$2  Wr)px2;p)SC \zH`fp%2Pg/5xPcOIf>ˤ  WC@}FR* # Ď &yCB3!4Dmj+ZD(yhSH^;(KUhPh` "XKY ^|Qt lh #)pFBBI_hgЄU3j" ?<Xeho  [HGސ8苤.l䌹Z*l X(1D{H#=0fyo`Ʉ D%ЄKu IByIpsx;J`XgxɽL}Ca뻬J֘PcS@xGR pe@_+ˉ`Ђ EK(tiL{&W[eDL=o0HE8vM)(ba9efK @pF,L6H@^ N,Ue@p [p(p/,8QbpF.]PuC"SWșF$Mu3/\%U`sgдX hiVld2bMt؀%β8t TݫPh`j PSE@%7.hċ.s"jHI=@647 sE Xn #s 2ht`t `f@i-1sІs( Ё@E³c1:+PP+-CeР / ~\H UPH 5( H sTahM 2U#QԈ P28-3fsMY8 ,u2K-˟tPhA)me0dHPJKHP86[d9͊;ޜ$ <:FʃXP2Z4AMq8ms a?s !D^z Ʌ3MHfsLVyLJ_`~L"HA:BA&Nz&c|0 i\ab)?>A^җ%/q_3 EXIN d=Cp;nz3 oNu8՘7 yÔ =4ř%m)<@3n wS@hU8@ F).ю٘)5n_LD`0J3\A =(ma rh51 X^ i03QڪCUM4"՞/s?s1=iDZhJE|Zwߴ7onq7g0it)V"`F(aVe% aHl5O `@x9PR+@05nd Vn7 u<XX$p#WAcr!Ur{ @L&t!H @GAa N@aH6AV=y:qҁ:( rJ ,@"<Nt0mp C0[c gE6`G7Qk\@.a@rp„Z@TPj Z  sp8y,M€1@xwt".䀎 HC%YiPZaYfD C89vX-"BwI͖ nx%PB5܀U@0:&ay[hAѲ'z}NXՏ DG'mh{>!{(|SM@"n_KG"iB?8ir|XW OP ^Ҙ x݃d8p$8Z0 ~= '9 `*pH@- $% Hܠupb*p@  & P @ @ P22gtp2R5 &r p Z }q0 @X  Ɠ=Fv; P p !P0M1Pm=@ ePza4p7 .P0z?!P A%9 /8PpVX0kP WP 0s i !?'rp@P}s= _r CvҀ Š=@x81ep /x s;PG1  GP@ _ӂ") :8 6k#0rN8~GqnoF=wt;~BRB-;!Oq$ަE:@WoBwVE}"Kw4D7]d2h##Շ֒pQGs0v2(L.2SDr:a`p? Jpl^(4b> p}| p'iM.9e"0  9t7isz 4T?  נJ @%OOsP p xZ`P `0 Xݧ|P P 8 a ( K T;&8 0  @z 4  "n$I9 `Ӏ P Pr$5 `hE##K3Pw{O ,E0wL{!/e(VI(K80#=]59p7**BKOB'P- <^"s!{*=G"D0  =`x50 Zpx9rQ 2=AH2s%fŃ 0@@  Gy@ G 02Z"*V  R  `~#P09 s 8J}oVzH @  Yh@ n p0˃6Ѻ9Kx:v0x  P VyX?0a3 p  p 0=͐Ui)9"sZt);> AP۠ @ : ְ p尋0)V`D0 ?Peدe @ I2Lh +LG p ԠP+0 s  0 ` P  +B r ̶:P -1p z= D wS Luƺs( p8Ll)BYx!(D?M)QV$,ZT2sF!Dzr' {60h=|j}R|l]1EP Tz'i֧ dOSP(qr6C QOM%5<*pgDPpv觨}0+FhP +0* _|;1+8~  l 'n0mr" p  =Ґ3 p'%J  $E8eZ 0 ?̰ 0 XSa{  ܐ 8Z ˀ3plM)Y'1^\@ Qr 077;%`Y `>%@ PO SIyZq5kV.4/rtz{?r+,aWWKО(4Mex .#%e)$ *8y(LnL#zE6MY4p-_-Ftj!k걕L |Qwq ױj HG~xC莤%#˗Zp}s|9rrT5\}-0am0 ϠMP ; e-sAa ~#u7Q}ua\Y+ Ϡ>g#Kl@R` .] $i[ &, 7%pqU_]_VlEGPTB-8PkW  հ@ p51."' "Lh@ a3ݰ؉-(* Ӡ*7-!Pi' IJ ^]0@p0 @@P `P`.1a(4MMOv  j6r, ` P*yrGe3_ ր0 _۶F:N14 p{-q9? rp  z @ 0=@ H4Nznwzՙ:3 }pA ]  "Gyn ` *p$0 UazR^ @ n@@@Pa]H 0@ P".>0 pԐ ` Ŝz/Kk<.M?cPM 0>M'V Knƣz G z  0p 0@pH0$j|/sGo 7QXz *10:yr,(jyQ9%"B0IIz؋ݖck!ER0{]7 E N,k Kz X;0jҤ|':},n,*ǩnV-9.LOF}-!@@((Q` 8DPol Ə:PАqCNP*HE\Gƈ2i.PGA DKУH08*Eslт;(dӦ7#(Z@,B=~ch)iaQ-bH79QބZun9"1]_J yX@7Yj % hTC۲/@7`Aܐ6t-zpcXLpf(EzPY1(NSk ba k5f5@ X2a uP_D\s("?D 0G YF: <)C)B, h=@1R#S@D$D,}ۜ8ש(d|NSKɆ"I2/xEd9WlH+ @pe  G@xTViEYX*H lk"%R45އ2+(b?Y(ЃIL  +PׂL(x'iܢ=A>s-$@E <8j0]# %Q4hd,`:DnPi|éfaY0n(Bn0ol`)49pȊt #8)Na #vhBcP2lePZ L$"0 sXa*J!@V(6P9 :7QD`P8@1AS 4Qgl@X5!X![x5h `F9JfTzQsD R4',80uHpكY :6@3M=`EpAY0QDP 6bh :(7Jqs -(m@ EX:tw ʀX7r`J`6t gp0$D-qsdOz"~"k `3r`9p3 C Ѓ9j֠ h45~Qr98$08 -!0T5(6B4EvU`+p=Dzƍ H.fq5H iȡ8 E (6A(jwj!(C p2]ld/d`(:494,z;8U sP{J%6^ЋhF+ʀe y$3 o'l0YuiilGx4Q L`2q ]X544fP`OG(~uF53EP`/1zj!@B3+ jTPA7 j h@elC 3ܝ ؈"h@aؠ8qP84*@`3#t%9l 09Q@"q t8]`` h i@&`( ހ lG|89ƘAЁ؁tiSB @kG*'1P(=hz* TR{p ވ8;X!Ёİ%jD0Zp*H$ E^^! )xDJ"hb hR$E(ktEXlA8h#Ќx\"8g#x(Fc"%ꃂj=(újT"haXbv8h q 01;ax`( ЅVG^HzTsiĂGP%OB T : 15 ^3$8XjDxF hPԉ>FHS &t(`oH%%̈S x7dtQlTe(iQ 2KkKẄWfyU[NQfaPP؁_R8IH3D!go> @ne[d)  _XPWYTMWЭC OZPp $)}Łc N^7]@vPI5#9,P+̑ Rd> M0 $L7HYUVwЃ^T*P=_WuhٺXIҁjMic#H5wW| Psf>l n>%gHtS^ቅA]5j ljh-rkk%L =Bx2=8TFlm$J$xXmޠ t𼼈#t.5ZmpoTb  [= 6*p^T!N xhMw1fr8uX#`qf8]wj<ؠ fSP(g8^Rhi(P{V8~Ubxyob(0qM~ K@‰YKLP p28eīhQf2Ln6kxg{ um({~KtxyV0V๿c?S{7O|^nP@=n(i o큂\\_Wx.̀r!w)] ƣ2at&\)g0yPPl2X+]w1JAķPh!Ĉ'Rh"ƌ#pPʜ%MPF~+2gҬi 2b$H9 KliA92zAH˗%b@-k䨃Z32@IyBrР/`$ltr(p!Y49sgM׎ sEzk :N&BcfϺA)XD  02n6Ј8z7:$Kv3ݟ~YiM¸h}mECwF`@w:Zpf5l 6 M' J/ȁAV5D.nr01F oJիXj D ]Etl#˚]˶bpʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M;Kjq#mj@! ,*\HHaJHŋ3|O 5IIN\$.\Pإ͛8 C )vJt% 9^8QC 1xJub ;n(auċ?4E UQBGOԅpA)X8/ fyi VfRNuPJ Ji1He)j88ط_Yۋskq"Ӟ urL*G"9"m)C;8Xfւ9bJv֬qSEqDeXI`3rL@@0P ?'aA ܰA A(8``&&ƠKX@@@ D`P2uZ5|.tN!j()2,p(?h/QP:x@4r$W 0t8 o@+B:J1P4e]BIgOJA (@uz%vP"c  }#5?F,%r 2",  X a l$aLCH+"0) 6r@(p9 uЯ:jz8#n%]vB r=PC` ]7Z35B͌05,^g;8 tPC8*̎[Fak!P^L{X1AP`{uI#4/#ž$!lL^']C+km{źZR 7Є.47!Xcޥ'OQIm} Yq@Xl 0[0 oAn)!+`3~T3PDDl[94yވ81B: `AtDG}&`1A ?#J0 S$7eLG4e"R}/0QU2D #~` wNlwأ~%%COaJQ'   çBbyZHqGr 9P0:.=+4B҆ (')P%0`J1!G`+ Dp0 ,,R9.G<@ 7 ?Amh{pb8y1G70|;1p:Ha[c*O!2y{"uQ+5 ;!%V u#<9"q3y4HPpOSPEzP =M\;X/&GDzPrP;DGP  2 r 8? F @Pp0 Xr `?;劕 P82cp9pd @'p>A$ Ԡ p `@ P0Q BRh81 TR02PIw@v /:7@g2,n"PM&; Ez6|2y/ y:p"(0".r*/גJZ;[R8* @HJR'<(9Oq&ÐX0wlq:ts>2q PN% i  ӏ@`p h9  P ֠ @  )QzגC h1a0rJ @3?`rGorȁXP `^a Jp Qڶ'nD.5 ʡP)zP$4h S˃ 08P+&@ n R P+vZ 0?A5t p@ ?8kd3a7Ng8 72% r|br#J "/SyBҴq2>jK;;x>b@l"M%D$B4@*h!{x7!t`R&JI42"0}[@)#{IS@.ꢕC `@ 0,(}z@ @,,0( X Jp =B' P0@`d"Z6la C @&kbL @ !$a~ Vp <o\" P`*` Pp J C)n )` 8@6Y  ! p q Zh5HP6 8  PP @JPj31p X@ /t^7@"70`*Y I7`S P : z@ D{3. )L P r cdx3`H9PH.J.R+؏p%700t74(,}T\J77PZSSEIsS+ʌaȔԴ@MXz %| SD$ `*%  z ԰.5T} b4,noN^ 12P` Tź~t  nB" PI} p k]O}SH8IT<` m07q p] p  VC<ʰΰ p 0KH =h&howDϼG@ !e ^ ^."D`@ qdݴʕjKN =sp)^F-~HQȏ9f(@4UfaDžc߸}  X=A5n"qF L&`X Y{&=.YqD!'ʐE1Njl R@ǽ$^\X@ 4PDN10 aA sKPJ!8X!E 0[)GN{[\p`zPT4jqF:,QC|os`Qv;pXDʼnPbG7no9,. 6c 3  [Ikn31ߖNO zaT8a%+ᱹ ,Ol pH@ (bhQav`YizA?ьӃ{AF_DdS%.ӡi9edFf hS(XqKW!Pr"HrJ1]&r%V5VO @` P@X8hR]JfIQ@vfXLsa5,i*WJp#hr !f7w?nas~ieye8JIGڂ i&rP8h&C{Pk@0ha@j.dt.pŮ1G  $Q$5Ԯ6uf_(=zi .ȓ 9zv䨆u)Á7KARN9EUlepP@Up )A@,$lCWT&x9 ,B1dFrJbxgJZdIЇes>Ƅ|JOC8 @ HZD=ЃnE2Jl6: MP_zARDJevDơ+% EEF91ҒCg܂TaJzipU.ʝQ.1F5h)nae0Vpo "(A9tA Ӛ* ^|:v#s75)#,XG1BFJ PN>SKЃfXp 1 2 bH&e_h ֠gkg`I!$&&6…IqT #5**c N'DyF c=oB *6\vH2R "w&d `>+i@pPdYtAHhiU*`@g$ L7Jӑ/s8;k%q^z0- c.C:ʐgd)aJ3prś1 (`+)1lCFeXJs؆2 @0q1Xf)<[v<@'I0h2`5z 4`h@9BkH  ?8.!r' "t@9n#CJHe,@XT@kȚ:pyc0 At\v7h&74 t j(;`6! jL#FDp($,o~f8G"A\jp 1 %C p3^zI lDO+!PP$sbV8GRLq:؀ŕ%+(\(S3"d02Cr(1 T>aR3#ib `A]FfAP:d@/#%ib x:i|#xc(i Ѕh`oh1 z"؆q2 Pr`Xہa(t<,(h`0(lc WkW+1xi' os裿 E+E8ГS`P4E`CM2Po(E( l腕R 89(( (9E+`5GF M#x 2 +(0@0%- D8 ͨ0 `q@!ѠbsЄ ļ( & hh? ؀% "H5X9"Ri)*D H+9?˭ ilMWtH,HH \8! IЬJ-G9Ix *)[t Ђ ɤ\P(u+DI(Z l#:,7U#krߐ19ThAbn V@0pG@!#聪tspjqZRiL(jKC-ɭ"(S<hUآPH )R5Ȓ @jҏPB߼$ q ,cβy*)I- ZG"\B"K#nXPga 2٢|JR u٢:Rr8u{ݢ8F]8s4P吁4VWpѹN599HY&jK' x0^(kh Q'-mi 8Ȓsm|2"X j=MO8]!6( R?HhIC8܋"G]xPVR%RpԠ\Atp sJV wZv =dƚ   1ԜQ}׆tZ>﹀rH; UVPuU^hvȜX``gЄ mj8Pgi8gxRie7mBHX)r (HsQU!UaprW*#2۠YpO"Ű/訷%`Dd#,Tmi}UUPkG=ՃtЄaѮ\л&csJ)]**up`Lݙ s{-co( _ޝс =(%I^=*MёH ͘C^=+%qX2u9X*Lt,WPps(tvŚn3=.%lZ}L|k ҈0v_7rRet%ސC _%P`4RH6Qu ՜AyG-'u͹t(,ahh(]>O*Oa)ji(ab5Ip85 -F2^ 츁* &5Qxda򀧃>NVOŠ'UU]pOt  Fqi]VHPE BP^YM {s"VX\s xP!lPM\Z yibb9r6FVs!;~ {^ E|Kȏh$Hy6 n bVIxk(aJa9 _؀0P=x?ZT'7}܅~g(80g< !pUN7u~ 5R'DtD$ʠ1kpՁ `_P=C `I]}I y# V 5P i>kyiHQuHv\r+~:Eȑo[Ґ\+m;50ň^t.{я&Qrb S{oI9ѕxm\jwisXi~QfaXP8U=m  fxSe`PIk%$ jY^ !2Y94JmcGMiiԹ]jr>eoЊAq`V*uUP7tdۅo_Ёq(Nu Jׅ6 9pv$O.7 7o=i+dthvۍPm >E(y H>e%^k q=@] 0@x%m؋`t0Te[ O) xo((7sWޤ`b&RRp-Ti(IuEӑtPi. 5xPhH +=:PM jXy8X`haXj f ,}0YVdTF xcg9 ipPsaYm "Ӂ6 comP$8`ne1yfHu@aJ٢at8Q-`st( @'- AqL%j %dD#%!Ĉ'Rh"ƌ04 ɱD $n@# 2d1C-3ώ36ԡ#  oԱ%ШRZA cPq 78!*ڴj}DSDQvڼz^t"({/TPNg0ū27"IWF+s1VlDӕ.􎅨gvYϮƵYwG)<L3Gb=c(VIz\<Ձ%}Z;z ~j8ږ + e~P~a [9C 4U}-&ߐL'Îx={7p@9X-u hrK:DPÅ,GL@r:CS5@+߰ /`@0 c(${84p7 7lR +#5(y;IJ 7Y *p@94@lj : 3ؘnh)shN9̼p .?( : Ā% )ax@;q?[lǖ4V+P%P) uصjR骻 ;Sư\Q5/~)PCLaG0|! ,*[HQÇ#JH>/.ȱǏ  8rAPL˗P(.p ϗbᡄ)dPtϧP'4 `Pق80X 7!]gF9iܢQq"lj*ƫqKok08 ur4ΠԚM2JĞ-vѸ;XX6aՂ1q ^Dr@ ֦M$2k3F1ˏ%"r#,8s 5 um} CP 3A ''w5( $)A&vVXmq';R;hE} 4ی@U} @}A&y vJF95Zt eA%H `9epp0@10R!M9ҜEr`6r2,h9)   Ĵs07a$)Y%tD/ÄRB@F;°:Jl`ӡD  T#ZcE,130L:4ۘl ,U.@C7,:49AAE :B $5!!p 1p7DUzPq 1܀A HA%lEÐ0\C B\xf _͎GC o 2 0xԎGj^(dL )8P9xB}^ݓP1tW Yj7FXN8w40]/xAi ͥ396,^r1 9n7@/ 綡|ӭn0V{^*@N)eSȏ::{P JaĊ߀JM}O;PP)H#UZ4:}Oh_YtS  Lr@v(BPt U' h;an.UKb :@Q<– 1V9 ĽFDbB#D0ыHzN"i,ԐS(GƐVpE46v[5 #@ʐ`*J(Axǔ4  DC %p0@f\&y>.Y- x@. cQ @[g"Tg;hf0~ @ .4`l2c!7;vY3;xgn-mM?b"6XDI>: Bɠ(CJBPN@@ BPG+X v0XA'T@9C@h:p 7Xŕ=A @ݩ+( `R@H:R\0Ttjp:!*u@t(c2BwP2 Ԍ@#5-$ pfv7fXcˈ2pb4@, (2'H$:ء DSy)4q 7܂@ PE X&0[#Zpr>jf5yģNn|PYN@H9i#Pzq_/6Tԃ@n?N_s5U wS)JrƦ @hB fѠMhJ[n0V2a.pz16m.LM} f9*_HzD2Q}5l_ؿ&6Pnz#I@x0yCq eh0!xN1iCCisP Mc=c P83zI 7=Q^摌@DYiGsC07=1˼pC<`B*wI.E[Lt!=]kyyXC7Ň#?ptvĀz>u9!Ɓ3h105H$z]cy߹;.!| Wx<RtC v5'&/D40r3qh(wNrt&#+ r(P|@6NpBP-=zD#2o)~cA 5Oc@  0 pP  P~C76Grx*{f P0` eCT!0`   B1yjF" " &͠ TPP ܀،=tP+P-e`P =B. KD) '0 ְ J @5PFWCpQr ``j 0 BNh4t Sc00Xk5D1Ck1(YOgzSU\c}(4'ESiS3ZvAhd:5E 0 Ku eg=U4u I,0H_@ @ 9P d9""$ ^q?5P B !Yu, -ZIǀ H0 @1\240 Pp P0VTȓ &e ReTз ٠Ca <&cEq p[Ze ‘(+@  @ Հ Pk*)]R^`Gњ nB 5Xia 0 0$`$ԓ 8 3 Pq 0vp J PI}V k0 ;0ɥ r wx %@@%1P"C6TR> `'8CAEC8#Gd`&Gt V4:BPCt1'Ur0'tam*lgBXM|2hBA<KhU& :[Tˆx>5FE r mҝ`PaaPWts;PDe Xp`޸ f{1xc$P L  r  '`PpgH+"[G  Pз7 dP@`p=7#J azJ %Ԡ+p P r 2 i ]MPУ;  P V@p  ; :t `d# 0˧/6,S` C 0D% )պeeˬ&z3;*FJF"%y ;>`4 4Ht!܎a'Tǣ<\HRI7R';YQԇXkAi=$mvZ#UIa1HYS#;&1վM4m8,`[N1@ 9SGgofk76>^C!dQ fg0 PPP%GSp }4PN<=00se 2/HzVz {YԤPT Y`E0 PgS% @ `C)[g3%EN /_ P82P~a cYz` vC7@X`0 2| pV0G X-@ "8z`Ġ=م ND0 er@r ` pp ÷`*hޮ搮jG̀ tS=eFUrZ@t^ՠ p  PتzpP0 ذ  @b'iH9+/:)L2ZpD0 z"P 9p z.l0 ` gn~EP2DC7~= ~ Q5/g@V VD@ %bhWg>nI`Dm@y @   lÀ D@ 0 X^9nQ" 6Pć#^hQ#F2&~dC)M1:$!@ɆF 8A9X@C0b ĤRepPBSLh: 16x5)ū%&}kďeFhEn1*@ᆇ%$АD_1N@h@!8"0"X߮Y3v #3vfH,7v 1a5œ8zx ۵7thG1vX5MVlՠo$VwZ;Ͷmt +sdVռyXuzI"4&rTIs3O \ <94 İD>%&z#7zAb(nAM$H#D#(fmfo@"ya`B<4C6,K#oIn9&Lvъi 3RI'(, @ 㔡af(Ѓ[MJgz@uܨRۡaih8!2UiJѤ Zk @v8!E]ίH6LӺe t) YŷVNn8hKIҁ`!%dO@cp tAiP̷7n&aE^șci`k X4EzA8D~(aF}&,ejށ9fj@*Wg#l$AH;j$`h:h ol1!Q3)R)܁mp͉\++!-c7GRPr8SǽD0`Tkk5QsGD(&INC@yX:y1dF `{qVi{ g92p mn8>5)Z`j<9qL3zn"!`(pP V`3ldЅAP@(N!#P5@p{4871raT.y2ێ:BO$A BGJ" Q7Xp!|- phYͥ,EOwT@ yjB`ZJҀy̲p)' Y[:.,yv@&ҤIxC l/(eE0H%>BSWSJ vX@Hր`m"X:p$#4(b `:sL11HO7%P^I=H-"i *@PhB PI2e-%eJhܢX%9p`m@j@\@t^؀&Q`';ڦU0Aҗ#HJt3{0Cd`+PrXTz@p'( uVt -tV0Y \ v2lpCJpX= qXVp^Y z+T%7Q ,B1PF6Ґ<2I B5BAt`gCy 9_|P5(+ l̀2Qgbx5L00uHCj@I BA.r@ F4qN`бH01 % `YX_Ϡ(X $ƶa(# 1 T`PMZPr؆N)`7F'%0-PlINH#o=x*` xB5kX0M@耂STj3@/Eq KCG8 f4U"I{@-Tٸ)M8pv"zHzL8ChzPPH- l X5N @@9R`X g@(GIg=ok8v+N"((/N $ ?75 X߄M DY "8P=e8 Nyb(YsTpw$I#wPP(:ph8;@"Ё JZg0˨468NgM$dЀ6^XՐƆ6 l1(5q rcRp>f/xAw'\O0[8Bz]ܼ&vG`{! 5@af(%2b_Xc$Xƀ& `H dt(9 p:K ىXP򸑆Lț"jțԨ8s ؁ Ñ !& e Pj`Ph5i O"y)DȎQb #0L@Dq2XBCQ(axD-<(M|(؀̱ Pu@ 1EAEJ:;iPlPe%gs@EZ F!, riGaaen$l|_8Fv`qt 8M0 bG %(,{$ H`HP ; |i ЃC>HЅtst`709q 4|I\1]V0RIq t#F (P9cLJ|ygbo1ɪځb[# Dˡ丁={KkxK6)  \hiK "oj SsЃ:dRt`7LVXvAH8, ؀ !q(8؄j؆t#A$8sNxJK"x+8(g茀=b\/X_ph-@"(#PttPZrhtp8 a@g@#HP- 2M08W(}ޏdS]@ 4F3+#6^(  X3EfPoPxxBu'@P 2_e* Г`xcTB0fPz^0v M  xW'M>EHFU:W}0#9nx]B&a]( %]uSnXӜ *j⺤PaZ}i=a 7q؜͒th%: 0MܻVK_ 90(uOikRעt.p ]V( `f }l8K$$bC҃ut'Js8vBGL͉t!5 FRSa7F,98_ 9P a))7q Q]xвj#@x$`rg8Y p0 hvs4h8<@)DiH&L6PF)TViXf\v`)di؊ }sTI&D3 d92 S;ş@W鄂椔Vj饘f馜v駠*ꨤjꩨ_5U@FDkAip52Qh,lsǘ96$h _fv+k) h~Q- D! ,.YH%b,xC#JHŋw )(#B5^`\ɲˋ@J $%TsL/ zP9w9ąI霁իW0h>_H0-9XӪ})C֮: !0n7b98m ޭ9J Fg(Hj枝;j4jt'ʜ X1<vN,>;f["fa:HƏaXm+|A>lU22ؼ=DѐSC0hP/D1 ÁĐ(P`& ,@PJ:a ! %@4098b8 #C UQ2XW h%HA %Ts2\K8H3f)] 4 ; sgnFC<WE/@UeAQBCD7PL9ߔ~X*АVDTji@#$H1*݃5 = Tqxi :&Q ܇ ݰ(=@W ޢ&7@AHS@C:Ё8Ѓy#tАL r zNydz<^Ct&@I͊)"nNgp"(^_ PD3!&D l:)^=2:؈qy,c}A ]cG( !ƺ>zC蠇띾u;=Ax>Ѓ3! {u '?u\k1!n Gww||r`v0 G}s vWt|^/')Bs{%G(X 7}' hW~P st}RFB?6%7pҰ^Pbp7` m{^t `  y6)r%r+% P pH r W0 s P~@| p 0?(PltFzM}sȉn{D"(z4Gz(؊882> ku|Pp (PhxxxJĸ Z`dLJxL"L$ !q=m."B8 V@ݣ,}4&"55E'"I PH'Q\PQ"`  'p  Pz7)PaZ0 V ' zEu'#@4PJp-v eP` U `?@ eBY>"K@  p @4p  v?$ e0E%3>q 0 @u 24%8EęY;Ѱfߠhp _ J r/D50 KA( p`_'0`ozP eG7 E=`@n P UG0 rpb L0 n r!XT^Cmq7iUP%9D_9X3С.$B1.RI2zU!0ŕ9-;mIB`8I&B>$p7Ǡ.:O?H?%E@VEbG/ pOA<H-iG0pX@ @ Pp 8%VGp &  ֠ @ pI B~$=x)a hJ`0 p"@p`Zz⩆`5 `  Z06ap6Ҡ {F%#>7@4p4J0X p h$KbQS<;B!ߠ XPP  ҈ٚD*@V*maGP $ p^G?0+!(9Q"`aʢ; aD7%"8.=2X%0 1/E")Y*&QË05. %Q4|>Ru#Ĩ`pШ 0",45.  )P09&"4+kV` M Ϣ-&e0 ?z0 eeR[>sOð Ӱ%ԐQ 'Мm/P#@ &eE&G@00  P 0p  $BPPʀ : BPeϐ֑ @@{H Q P?    V_ 0 V*p $uK! o@ @PZ #0 I 4  ̖\$ `Aր ^n@ P l[&, 0 0U@p @r# @' p/= r Ae1P@,Usw-c:g$.@ 2gpXwh*7ZR <],СCu4h( :Tqb-m1h1\#:zyG;F߱qcc>_$\i<D0A~CA$ZZARP?pHr6ZRotS_1F:PƖh)Qlh6Ì(%"91J)F]0p;~q\2eQJ;:"EH K!V4نt-(ęta s2OO?9@+A,"ئEAf@6K؁rzictδ IN!ia@qFrVXq}fbCiT rp`JIТ4&_%fː8BE`fh uan,d*c@o`N .% dYffibxΡ&a0%b؁gi 䰆u e:nCPJ_P [eM49XN' NJW$=h6Ȱ إu3Lнr v1=RQ903 r`g^F: ak)fjb43zNSo9! bCsiܢHؼܼȒ+0 NZ_ US(a@A[  Y@@቎ hOdG:&Ae5(`+@sfR"D9zAXUBRB,#K@ @@o$`$*`U@DZGV(RAG hȥ%ɍ\"1`A v(@]eD p;➞\1HNu^qAY n JO ~Ҁ񇄺.$h-YBvQKXp" 2 :u~Vx.*S<=:HLʮ4JxJP܀v05Y49x@4a lLS0Q MP 6ArJ'6ǁ |CBX11n H o2L`PU:P< .h? 8/t^8w$j0QC1B4@0qk<5'b`Sд; E4 ذ&0P<F. =xF3 *$ø~q -ؚ"̑cР:X7XA3mFft3P`((SFXǡzdo2(:PgHcH"Ja+ ȁ40S#X!z`1BM p3q+G0-Ѓ u#6ր: A հF:ڔ:&p+Tpc P P ]0 0`PB6 P =c*Pkj0E<+r CJ@e,e(E('[}rpbx.s8C3 p0p\-Mg00sHcV`p30"ĠZ(71F~`ܠX7̤:w!fX 8trNIX;&䠅 ܄mz@zN(B +8M "@$9bEb0p(+ .((`)` pHQzM" A }shEkp&&j`"p!Bhz٘ ڐ,@<P*y5Đa)ȁk 8j hI(x? Ux$`xu .Vah?ZeT=Rحi(3A(EHni (xYV)y⏵؁Q&HMi22z!WP cj9H^XgDX*ulhcX)y ,;Ab4*ВՑ2X([3Ւe\o.nZ-pje hr'(qYEr "pġ U:pɜU#A 8)tЩMLd ̌0A,YsSXhQNS([Vt:9`RX%X859P^rҽ[a-p mHGYF])EpRctd$}]ѭW -v8>8S+8tP *)XƎ/t/PEPvS0\lIP h` x xab<% (`Ix0'}!QweH~)  қQUfQ  bBxh EPɐĶS(-xaች8BKdE8lUͪ@'B4,Hx8F4QPh*\$teht}$<~7M 2,pΉx !file8 mKjA8n8QՐ,>a@(^p tpչUph'Ў g5S#hbuقBpeKLFSJqhpe(QN FԅaЃ@]$n[*u0H(Ye`Ec:l Ѓvhx<P 9g"al(X9)Lz m  CFړ@PthdҀN\# Ĝ Q X(((4S]Xri!-8f屦HjߘXW ' }Ր_aՉeڸP{$& @D$v6rp`(Blx(ynI0P텀F.^,gpr $hCRxvjd'nm[0co1=r# ̞g!V*؁Xm(ILq=QpGQqsQ\qqbd8"rob/,B)W>(wvh 6 `0A0Oxv]V^ea+hhb`^wqK 5Ǩz}e+I&fbQz͋Hזlaնs7%n i, "+ p]=f腛fso"z՛8ɪP(7XR:5QP^7 X90`V Hfа;S9zҫ-RHjlzwq/peXjVX fPr^:)@"9l "Shg'ۜЊH"`:9@Z fdBPmrn-xUN"htXt X -Xrt L7] Iv#8WVR܏NqQP% /O\7?;G|1GŸXXȇ! ,2T=)Hp * *\ȰÇOtŋ;`ȱF5:xmɓ(S˗0cʜI͛8sɳϟ(a( J]zrӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻxw(W(M&͕ǐ#KL %bDjCMӨS^ͺװc˞M۸sͻwi'X YeyУKNسkνË,Oӫ_Ͼ˟OUgV:GB@! ,.XHQ"Ç#JHA;&(Aŏ C)pX/%"R\ɲeHEaå͛8*pfMu(JTdF EJxDj ԯ`XlZ+BQ 5 \"+uB.;1+n \1A=&$H ʠ#kF=j^0GC 6ၵ.!mA"8*0Ǝق @maA .8f0t=fDfў <5b>t8M87P8@@CHWm);<!bĐN$p} LL(hB9DCM?J0t97ꨃ<@Zps6r$b^AqJ@AV!eXp gv @^ [ fX=VlK"$h4\$o PCD%A qh[7lF24 ԪEP6ҬV+[=0 6@곿P2l P JpӋ;B;P:`5l#5w F #y8`?x {/#!1`,6(ˬڋK74 ;@tܚk V.Pdb&2J\wq$ХmJC &6ЃA=P)O3$=+SSސ[T,p @Md&mhJXANT 4`@h'CgMQ;îGPS5"|Í8L 8s ;Q (Xps;PP/BM(BݪW0ʜA\9VhюĮ7YDA3,o0 `aas0ÔrD0s}_,@ 5 wX)C?t7 2kDV n#7 VD{3N6pl16 `Hm@\ KE $ UFREAq%)A@ +v zeKzup#RKzS^X#.%a`#J*1a1$ &$q8<)av4C$HxCGXLTY0%(6!ANJ`NcZLl;bŸ́@@͇X0GÔ!l ,X2qrp =R5!1@r] `XB&P*) a  (phȥ3Qt  jDD9@:Fmr[0]HH֬(n 9@ 0@UlS =JI(A "ĵ+օ!4-c/0)/(8e' 8TPQ 0 F4AUV P0t&A4PAʠ`۪$ R1U r9S6#p '^ 0ϕWArUQ;Bt``)Jz]ejn. 8IUjkW=+M5h) P@UFx O  #R(dVrUDA 0X3(r84񿗭(<YԢ)EW8 qtX$"N t eycU])Ѐ2C%"p>3s@B(z g4KZ1063c F3Knذ3_ЂЋoLdO)`ܠS ܛ.`2a hp;R}F"^p# ޴vl`.P'xMTV$X" v zHNQ "T zЂ5O7@)J ]pRZPG(b8`q9#G l}c+!m X\p@ Wҵ\%BQ /Ad/]->'`8ʨ){F3'| _J;ҋ*ȄSC=걏}ԃ}9yo==_PeQ&x]%D@ 11xG6AvE4/7?@G0~ iCj vPVIcG籌S@o01`Co>=1[]^#^2 lGaPG0 {@ n}w }}Sm8mr ~Ч\F@P ~ j&GEW/wq' 0~/` k0w2}WG@@ 'd|z0W-@tQ#W8rz (`} G0 y~[XEb4B8g Jp Pp :p @  - n @& Ԑ ,` @@0 P  xez&Dr3@}yHyhXHz 4tsa^$D9y))p rV+diZLD1s50Y*PP]؅8$kC<KW#%p&Q P`2%~%H(Q&HY(Vs1PA4 & 0d 5p32/P Xa`>2-pm X =*GZ&(9mRZC'/0`$hY䘥y [UY0}/$0R4 L 6'RRgj0$@ >)HkcWlNv6r]`1B/-K)S kC_=Pb oSP& Ӑ K  Eo=aJ5/8 ;W@p !0 @ do̱qeP".7f;  Jؐoa P @s%oED4R,r> p @@G@T1@Yk p5B?ZA @ߠ @ ;׵ .@VߠYBPap W  TX; G P 5DШ. An@A0 簍(VU- 0g epj.Z D 3 6 ?V 6HŞQ iPQD47B )[ZAP8!>.A1;/*BvCqgSC*U71@30`'~w$HD)A'44j? W'_@3jT48,`CGPpV ]oV6XprF؀5u<߀ ֠XP0 @#F5 ' :$ 0 @VѶjD+ r> xӐPp5R \&GPp 0e>ZP r qk.{4+ F P2rr%p F"' @2NJԠ & ɐ{t5Q3R^Q\`m'YE^B#'H.$6:B5ee߃E$"+eCu&(ID2#@.IP/#^j3. x4F#E.:\ p ov fbil@ <  4@ED r` XᮮTz @ P PPDp  pz P;b    Ĥ`0`6bY  @ ` PRE+G~ Gr@ Ц .Fu֠ @w w @ 0  ?PZؠ `/cI* @ ְ 7@,= ՐŰK 6Pr~t  ` p @|.ZP P)Pu/@fa\Oq20 Pe5% "@ '*"1]f1نE p#P]A4 "a5dR۹9PaNF'W |UQb ED*/8ed54x F2PH9 Fyՙ`y/p\zJZP pSe TKd{Ei:0_9 fp P /m`gP@ ?a qj;`zr pѠ`> kfP#` FJ 0 K e0VLe  06yE(pk31  =@렷ͼ{=4 Ͱq'C8!t`Bx @g*^5+{-B74_M5iq))l(b6)9U&Qa?B*,({Jq׮5)(U)Uj64  5KH`{6pQb܈n>W_D*S% w Ph?}C)UVp ðB6 7ꅮ{Yz@ edj1V38p$V9@0*]  + \v@?gG*Y\ 57C~ؙKE84H6S90F-P0S:A2 P@ p bG ߚi w،AdAUY ~N 90%O V`d+ % Ϡ \<P`b;NۇO+f4 ]0lV@ \8<Uc Je`=P P  0Ҡ s? 㤟*  }*;~Cߜ rap 4 <@ ݬ@ Pm M& G  >球 KBΪAP㇌ҪQPBD-VE%4v(ȍ%k퀱̼S DfN`*4`Wz&*0ts۲u6MܪAK~Ĉv"Z%' pI=FG$+ 4`b=`1 10( EK 0˹&SYF2j(%pH!ĉf)OA$G"%Ҏ7M19P'6 *`<$Z:la-|7p3 .838XCNNl!ւ6ppNO M[p“H($ڜ?vKt@B" q(1?#D2$;"%6;9)")+a4 &.J3EB KPBM-"bAP2*CD4QEdfoDtPґ$$tҁEWe# eP,㠀iITbeƚUg5.aiIK؁2;zS@Xz@jN7^z`uʸ@zhl"p6d`fiB 7Uх"["!G.]F%P t٦PUb%ezAfi*lqG^Qz0Pt0qF`hNڡ(J1ǚPx]ҁҊjNfX$(F z@k( R<NJ`#KH@* Q=Ɠ0G@(a6M*3=k52"I&'ig( l-d((TJ !ո4@ G9! G7 ]/dd"PԀ u8CF)0A p7 )Ƒ;ьu`C%#`F:a?Ey17Q59PWANA.kK 0 = v 0('9ȁDO4 RQ|Otp%HPz=Q=< ؤ-4sBa p ߹ pZ $ВH6U'#)X"=i nYf8 -2#\p{Q$ fT#b,zāpSS"G )Q k~8|vhlhf  (0]huЅ'_ t29 #(%LI u3&|@Ǔ_DDl8B4)E+aJx^@j0:l"s8g잢J6+V LPW0 4dӃ02| $eLhnu8 t<+܀(&|72x'ށ 1k\RGpl!߰ ȁ$\ܘD8NlYr# VtЯD'9$DR=뤌S u(6@Br$ 9#0eЈ8 Ёt3!qQ%x(g ґ@h}Tġ$P"(u\8TŀO(=E@pHgxvX`2u8)Г)%2M;< DB}QA-T(0Tx `(kTg9jRMt(DVEd ̓UD(MV@_H69(V0,dMP\jpTi`quЦn=+ h `%sE[ 5WW_YOxerq) \$-)ёЅoP:IgP ( "4Wo'i1(R"KRXjt -F\JiŁ|9g''F$;unڊdP N}%fp֊ԁcskqY3vHg؁Wn- ,BH%((=5Wi2fȼIB xW:VM =] hÑ#X-(a`Є_Z8ە'& ѪhxfEpXV}fznX(j3Kx%C\β x#э Ȇ``_#Oڨ$nE`L`z4f0 R(q^ {bR8] Vh&%X!a -SE #@ 0ϙf!>!#F-1n"&>-#((bbu?b`0m"1o6F8tP6dMȁT6^`(n-`F9~p-U}A  )ud OY&8b @gH 1n8txiP@-d+%`ratp+c=tPpjhjc xb(fPMJ*~f.e OCDYXb^dLg*C@vЖ1{ Vhi Y xh }}i h&uLiiiU 6H]X`tXyT*#$L1¼%QenW#Yëvd]GU ! ,7dTHP*\ȰÇYHE1vǏFȓ(U-@0cʜI͛8s ϟo<JTD!]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^,@F܌pkp m2.ϨS^ͺװc˞M۸sno xi xQ0Nu7iËxOgܲ@:~rW_.;]Z D@ ^ u\P N4l-06v ($hYUI 5 [p4h`97 PhssE! ,! ,! ,! ,}w(D4FB #"CʈqbHX@+9J(PZ%TƜP2 nz48ZC pE7#դb(j΄z|cń! ,! ,! ,}Ǐ*đ`Cp(#¯g2:#A 7zdz> bA@?o?%Bɡ󟿣E1pڂ/KJABEyNUjS0*A@Yl@Ξ?S۩4 \:ZWJ(V %%"w?ƀqG7`̝8P! ,*%gHE JȰÇ#JHŋ3j(q!Ǐ CIɓ !L0_DI͛8sFҥϟ@Jѣ%$5 V)W ƒ K4P4٣#wE˖#1J8b&p!!bD6H1dH̐r7np#FAeA綨)ؑCGk;tAF >,I1%ˎ'BT,a 2jH8jС eD^]uH,P0,.ȸƎkxG)ဃg6P 2 =<(ÀyFx 8<=(_e@dA0B^ H D.qL0 )H "H B 2B$BI (W7A/|e'd v1yՙ\E ԕ@K @ 0P,h@V `P y$8D@ 8iP 4`Z $x%4@rhT@4DЙV`Z4PYـ"MԐűQAIG- BSF2> Bl>E lDa8lDhAgLa-߿/(6-qLC ,䠅74p o TrrK1eT.Gh.XDp/ȁK0GD0I)TP+k ppXA0PP1 h1L1@,pD0A0G(e(%l %D!ޫām*YE )> *qQ *A"'!AK,rH  ġJ+̡C2J @. A ,|p C$@h;8<$ :sJTÌ9e(0:`LsP=:P 7(:! lm0`XҴ@uh46tȡ`+!P796qClBKB6WFY D(0j3D" (Y0B &R)br!#Z>t KH Br4  3&q A tMUT04@ xF30 s$ 46otqA( Hcd/t", 06TـSF3h@ BQ ( ) r!M΁@&Z1V`>$; 8',68"'W ء6(|9@~c,J ,Ђ )R t@)c`12P5A 6i0r@7&e0G3 @ b PB 9|A1 % :a tH"*  pbЩ@j "hF)ΓS!"!]ЁT1\[%H(b E`b>!RT>ES``  T񉊦8C YTBl d!f v %K:zd7~hc 6r#p&4MXC A>Ul4CX4!6" @*0 `( m`9"iOHt"nI  %>TbPL;OXVH@$TtnBZ(A )4)BohL-3BGEn98PP" "ы $4x*f<# ,s6EЃ6g"XS* P86!gGH$d5h P4ыu4D7ta& ftRpK Y48l$| '9D!q E:'ز -08A>hE -=@*P0,9mЗ7PgJ`^X6 ykS4 Al "I4@ JQA2z,-z\{fC 1֡B%'JeLbۦ H0# @K9b Jj4IHHL61Lg( BH@A\W&yA&`ҧI)ha @%@(ܴPPp49h@4JX@ $S78NQ1B~ 9 (Jwd&*Ё@-%p*xRw3lq!8 -*.!&A: '(Pp 7Pz %0 41v ts⃞"*F(HH(!$ R#9x?rg#YH:Bzd)08P%4% 'ԑ/"HDžWYx0pA `!rXx)G q1xX k4b7`_X9'Jr5B1N a%2(mp01 $p91rV#!}KB*7(:Rkfzq(%q @g/$ԁqq 0 \17*zR@P Ґ"rNX28 p?,"dQ */23֠ Ꭱ61(%g ֠"B|҇gE b fS ]Q[@Cu'Ő:B?qajVv9% Ps%1=? ?pX^ $pJ@XĀ 8q ѐJ{A^  u:0i??0W kH7Z`fD`]E8 0 ]*" X;@p`x%?@zy ` 0^. ""R?9iVp J0t4Glb ͉ 0 0 @> S pHE @S@=a@ ܰ P '$  ߠ ॆmգ ؀`  p  ߰i @षP%0 > Ab9 0 ՠz ?;$lTyeѰ^ `U.@ N  4 =0`G# p P9 PV pP P a6G Pǰ P 0 q٠t H?p;=J    p p cg UUsel@ SP P|hðr>r p` ` tp ap@ p 0@VuzFk 0v z`   p̀ HH z=ZA  p ԐP 0@@2 %P HE  0P`: %< 3 6+ L 5 r ?4X "@z |v e0=p   ΀ a ,IeVP=" P 0 p P `/ <  r 0[p P&v %2p R w e ?0 PM吢 P  e`VP8u bPI:P 4p  ? GP4AC[@ "/P`  S P T۠O9% 6P ǰ V Πrp   @ P @ e c&a߱r p @ @ Y`?N bbV ` ^L 0@<@GJ3 r Pð @=PΠ \ޓդuEM=_Ы Bb\ ` @ @ yJkK   S^0 +ߐB %P p&zn@+XW!%PNb`0J 4@;~]*`4 ` a1 zPW$>`=W%+G # 0 !P9 #0LE  `m zp0 " r 0Z`p!} @PA@VPðښ }y  bzZкdG &S|]nVT@ 1EytX# À pG[#|  D OzR ;Kî = Ń` rۺ p J@ "P'ǀZ^?{5 Ra` i'0\ְ ?Pì p, 6 %p Ѡk @ < 7p k- Ib'-l ՠ p֐$ P'6P V4p7r` VͰ  PIP8@  'H7PeP5hm,=sAR_:?=xRPA#= @4<( rρ͐H11.C \( B @ 1%M0a0SJ %pH17zRRY" %yUw^>Q橗JP vP "Pj:Q%gn X# n)ٗLW5pw,G PNAwȏ0$P"ڸ[ KYi%>A|u 9@@^npϭIA*?QB2b '`8C@ 1,zbAt!Dp`소-[Jt)f7Tp$0(q#PsHD!S%bt"Q;ʼՃ;XvRN1zDD+ٴh}F;ƌp 80}QƏlj1p Ç1Vuyr[Zsh# 2h!C1pҐ0a˂_<:F /XJ(0KЃ<`{jX)GI=1</J*C`P0rN( \8ۘp w 1Q]TrZ5ޒC(АfZqo+ZpU` 8&FGBQE-B, Gp'Rqc)|,aSfB:rPP060 l>'C6~!!-5@8APń V7~IT#`@c(/ЬoP5V- :^,)v&  i,pH` $ 4P 頀(`rCjaO*FU6=e dB> ) !NaSB RZB*L!O@*<,K*AfUA@(Z Ojѐ7P uԾ4ƣz94R@(p–aF)(!x11[8@=h1g8s.xcb(Zk%iؚH p; tXMYMK r]ia^xPzYg82;X3H,)lj33 (@%d*X88` 8T`Y!P60-88S*#a[iP †RX0H7@% P`HlR,-P #f fV+=e 8J!eH %99ѡ29X`𡗐h C.j ab^Pee I d 5Ԏxqрce|8 @ f%*08\y: p=Hю=H9/a`H]:pUipF 'hPHI` (8 ɴ}'HXɌiGw|؁rZhIQP ҁܗ yd%h8L8((8LhK + ZSDy]G ऻ x-;ޤ8(lݤxF` |[|$N`KcAȋ8蝍y  ({ȴXP<'L xRz ]( ʐ(0Ϋ,QQAL蘉PhyP8ЁO#K$` 55S ]4; =z 38(TLȄ)"4"XzYԎE kS}148`a 8 lC*J  hT(THAbH:`O V=S "m@ 8m^x-e\U^Uj$։%hOQSȂ #)H6`/RU8 \3T!P`hs!&\0 XRXذŰ)Y9`ZP hg X;xWb ]]\^_}SۻXJXPȄ C ZJ6 *Y8lQhk.ʂMHSVЛZZT 8\0Jȅ$U(`q)HY$0@l]Xp* !`V0RRۈ޻ݨ,5;x,8HS@SdVJ7,#bYeTxQj8Y `YаХ3Sd [ Up(S'x4;P^qt[2$ع%NӍB/FȄȅQGHeSHHȂ%95RX"8Y8UH!3+3Z<غ؀ 0 ^ o(aXX< 4;P/N=0e^ؼ4H؄)VRߐ5„\XhS@j@H2Sx&؂Z hN#ЃIr[:effc,8HȀ8 LXpńOЀC T3OȄ(X\Q(83 (ʖ(8e(MPp"ZFxNa]PhW> 9ex9f菾  Wx( W1Q@&x}ˀ?q` p=qy8`  ЅSP݇fk ޘӦ  =!@!DԈXЁx *`PPi )ώ]`'ek@ 8 x`ȁ(:)5Ǯ[DEnk nnVn&%W6Ӗn-yK o\fn6oՐnvnn$QnHno<>.'pN4WwVOFp U p]o !qpQ=q'w _pnFqqWq p7npo>?'of6"-֎s.7sn20Oq3s=6q;<7as%8@OsD,U27oqEtBpI`t<7tPQ?s?SRtRGVK8t/s v['n6s" ^s\c6Q]YeC?p*v o rfpiWu1kd'poYpv@'wo?w>u/,XuDwkwvu'wfGw|w|oxk/xs7tcgxp7%eWhG~Vwgu0G[gtOyWtW:yT`uK OI_yzv'zy!?z_7xdzxoz IzD{=?@/{_{o{qg$9%ɤ@Q,)ԨRBM(ӫZ `ȘAR-k,ڨ[K۵] J6-޼z1_Gƅv]3~8ca')1̚-.*3n.mt_NCn=wIguQֹ].[u©do&ly:vԓKǓOx;6ӏR=e\7 gl Hyy"Y4ЀXHRo%^YjE Azxs݅],"d"1vۉU2\qx8i8Ng@'$MbJh9yv(bE)#aR$#@7Ȑz4pÒbʹd1 9§Ԝ6dA(ReKbޡQWեJ)Cq)S}螠*Xz-=@1pA֍%[ⶡ8h*)NwwR˪'QJZ)>ݫ[~{nC1(얢.bˮkP*Xkkj p.|fRo~|cպ>k)`1w^f^5#ct kF3k.uT]*L:4SJm-T|5Z\zDzb/{rS m7k{`xjA-f4'5/r[0?*։_i);8+ޙIygwOZ~zYGJDO:{cM0{veZ`Qs]KL[9G$ɻ;۵rq J{d}O"2l{bW81v˗(V&g(z\x,et>KAV.jå y'DpW(3xG9%:_NYX)RqPVl!xEu1]c>4m }Q2 Qne(5mM!%;c3tKb7*jbљg#'YN&HM&oSs # (c`wdȸ0~L9s]wT~+YܬۚE|jɻѓF̌Icwd؜ urNq4KZؿC2,g Kvpzڪù*͒A6MlJr\".'eWp[is:1 js&ZEPV%1m{*g>gґm̚dEJ C- he[?~Tu jaG]om]*i<6ݱ+̹&,ۺ@ )Nv gqs2gp6ƍ2RΨKw*rX2߃utoXhD"c.B~",)==V?+ݹg<Ѐ׶GFZ=Cx{s[d.ɲwZS.y޾vG:ܻƛݶX^h޵.O~[>1om)k7A_y_hc/Ec98ꁛU]gݞ͘z]S]N8ؽ͞]9E=_{ \a\}t:=iE=io8U|EO`y@%ha_ 9\yݒ Veѹ҉߰^~Տ W.ԟߖJiRF Z `9߼ǁݨ%_a&u">"Y b)ae )h%)BeT\]u̴-uqXIќ!ۅe[/VH!U "FI RgQ&U_5bnHq n py[["> rUR R"͞^=eW1 cm`"FXU"TBnaХHYhKYY?Wxl# )H.$VM}hDK6d0TA-ޗ@^ϔoU8.2p8OVFUdWH]cX6R凘5W^%T^dL ]Ms! ,! ,! ,! ,! ,vQ}` C C'2X Pq(!b; ,q +=~81&AeKoҤxd;a1h͢9K$ hӡE"Ձ@3*WcLKV@@! ,! ,! ,! ,! ,! ,vQ` pC7hPjz @` =G18Կ}CG \”Is:cUS@!$s`˗Biyu*ҜPbc뾳4@Wɒ (P=ܪYmc0a  у! ,! ,! ,! ,! ,! ,vQ`"6%@0Ä2dQQ`104QB  z)+qF1pDnP_Q@q`ɒ @pF;߾h %V(8ѣ $vL)S%v8Е.6e7V]-F7oe%P%0.mqG_0l@rE@=Pd8P4dGL ! ,~QH`A, Q"!C%d\P@K(Gi[I !cc܇CE7:CǔK 8.mAsr3W.ZVLRԔ@)t]` E -W 4'PWftl_l&sp㚲lJ ,;0(ZlpX #t PAAWmT{5gJJUk4l ~q;A׬ݴum6ڰ{aI zS [-*@=ePh a4U{-izHzℌLOo攑`1'Β%zP)F_ ":.Ā0ȝ ʒ84]T_}! ,Q,!P 7LXq$HbC1n` K(l_'P2F= 4"ణD , ϟ}D8HCn`@h͜]UmaΖ+j4^9fRZA"8" :X5/i\T-U|S+KXuGe\g%Nt!st Rg7o*rC;V͚V88X;$HC CG?; T8ޢ! ,Q8 1$ȰaÄpH~\(0aB KHA` ꩬ\8! I1Jܠ@O(@7 Q =o]UaP9eU d5zQ`rG fZ*sZŀ+=x;K*ь~A 3.{uRk :3N1 rjP77,G uC 9pI$p@o>X3R9nф!C4l֬Uv  WZ ,~_? Rw! ,! ,R(A vp@;zbQF:Wd}LD :nH럿6bC2d@pMɁۧ3ʟ E迤KuqG^UuU)SVNvuHjUr A)lV=`Aqjw$tPb=tcGPK.Xⳋ-Ljq([ )> (TkYƍQf6=0dC@A9.e3:10 ! ,! ,QH  "!2*!F2FB;(2PaRɬG߰ OL 9h@%8(Bo߿c8Q V0ĠÊCvZ`xcq&GQ^2T/uGʤZVLҊ_2hZ#)e)q;+_@6ƒ2ݒyJr0f-s0h*2涬.iέ)sr ۷i>6sn%NHy ~tHw==%PF5 h+Eȓ8P6Xc 5܄O$@7`0'  J$ C?H#(@! ,QHa@ #=JE%bqGkꩬ77Br۹/@2tPPRH󷴞K7qBǤt Hԟz;4 逮oYMׯ?( H VAխWbCran eESJ] YPЅʁmAAظm", DCI87@ns:ǃ`ܪY>-g!AϿ<}{L(@! ,R KHA1bPF 8&Q7@@Gh~D$tp͚R 8& B HaeTN0H(BѣN㢀jX"ܺV͚#F*Y' VYiVMIڬvAP֨}V|O0+Ame + B)f0֤Kb6iϨEбmTȐ߾N lƃR"Qs88 1tJ zPj\-S= #ѹX&豃-81EuӃLIϖSt8\q#7`8qz2%J$ĉ3g PWOHƼapFX¸ t׭ 1~= ! ,QHPA10Á# (1Ë f4P/rF :G}HQH'`ǀa Tvp6F9rؑ>9@ ďVjpAFh]ZT0#Sge;pvAčy@G XڭGD1P%JL-nDp윀 :d r@V ԐK G`ziG=?8JoC5~#&nԬY e|_H!mpE4B?`F! ,X @* c!%! ,Q8D 7*\( KрBNУG2 с  rߺ;2)#764_8Vj}sǠ@f!G`(U*1J(rÃԉ'Ui!6u:UF!KX)嬚{ぃ)j7جa!qT(*0vGu.m-ƪϺ>,2-?4`hz ZYD >}q6k5PC# X>ABG}?1 ! ,RH*\ȰÇ#J1(jȱǏ ?cNj(S\ɲ 2JĐY"8s 1gIѣ(&ҧPrTGͦ5j`:"%:J,T75˶mNjKfuK.Ht",:֮߿i^xBaW3ۍVM( (P`tSְ DsFY49>ޭuSuNW,^~o`끰ﺮɻ|`{oQ'=_y' OWv&~_z FR x }` nD!h"GGyx1h]8hcD;@?C%`Cz Ї?&YPZL*P ! ,! ,! ,! ,! ,! ,^AE8 !@F <@a).QBR!DF^r"!JQF!GBfJ4XJD 4j)GQ(TI+.թ8*0VMwz(a-!@hu>Vr֭pkڽ% *p˱ l|8 dKn #xoc%Ttj̍ XZȷS! ,! ,! ,! ,! ,! ,]@`C , x € P!r5sY49hQ׿0{%qV5Թ=WmdhҨB6}* ˬD"%X԰=,!#+b5-ZP XvsŁA (J(B8H` J"! ,! ,! ,! ,! ,! ,]@ X" )F 4dH!R!FDhc%P8R$I+b$"%bĤ Ҧ %mfҥFxR@ONȣ%KAjөZ*UA@BeB>"$h@%]d`! ,! ,\H*\ȐᇃJHbB33j܈PǏ 9z`DȉNn@Фʗ L)4záϣ#Ǐo=أ)tXRcĨ@ĸ۩w!` =vx[j7z RCSE߂o4.`yALbt-B b+81:t¿ $HPZĀ@kl@\G r-k5Z,rb+G ePqR vfY HW  [z@VBFP@_eT1E/ G$s%`1L3X 13 t°cN0=@ 4f4@j%8|(L:PsLt.@0pI2A;LH;,N0,P `h 0C n>DA 0_A8D4p3߸$C24x48 Y 3 MD`cw ,`485X`#?`@2Q, 9B4 P7փh#)1IrP]8@K< tQq F'L ~@a56/•j@ը@"- `1x86҇IΩA pzFfEHCo`DzآY0ҁŠ(Eh QqhHx @ e~ENqI<EȠH֡ x@ (@y%~N*wAN0[:ԩŝQnjhV\:\2ԡWo!ִ^ʈ.ӸsGi^{wǘq/@O5iUC+t=٣B=)F&J69zxXPy!"^ f9c|hG&Afp)'{RF'ݩMxş Ѕ*&袊rхNji.4覅*j*S6說ꫮ 묲J뭶뮺믾 K6Z!pB xPV@zB A $pvA eZko{B^[|ג G 7 \ VLgw "L&*. 2L"T@p 8@[B m@1`CA1B + M{ pB5д $Pf0n6 MA7/n  )@jtEWNgw瞇袗N馧ꪷ Cl%ApC 7 I @I к*B0ܐt5J۠ :`~p 2 %ī~4? 1@%%G5px5@E@x $;`BzP%.Ё$x0 'Xj8`kd a @|@21 R8"&0ڳ] $ jh X5 +Ć; q,@ t(`ȁQ{d#H!$8@:((kqpd:KF xܹJـ͆9Z` -  L (H 82<6 HfhxH ^p#!ͷn ` A @njJ@D9^HK0Dp'%BJD L['idd T La ` "A l@ S0(hTLU-,Z ;x XVYb)Al6pA2ZB a7KAH`( u9A0;P@b6 $%Htہl@ : Հ$OQk]r:}tKZؽvzxK񚷼-+b )< 0-"D0|@P߁ZHԁ*+@A | GE`-A X"Ʃjka Ψ@!@I<`@ 2jp6`:*PYBJ@i2 3zL1h>5Ϳcٛe$H) R_ @ ,80B@3H ߟ[ 2omgtMϙ $- $Ϣͅm!P92 | =xfA\,r P h4Y,n#|F'gfjbi/A J $6H,ܶUdqi?1 n(4XT-Hz|h J@r,r7+34Kx]D4Vj=VH U@u^P0T1c| p@\tXֳ{`+9 P,YiZz1[-VB Za=#Q_ޢ @Ub`@T!m ; FH ^ȻRҳ 6!Р28Z "kTr7e bX^0?Is+ڳ !ҁ\x8cnt3sDh<%H= lH UO|zմg V>Z*OF'P kg 0G=Pa V=S (5p[2P,O6%u$@U!d6Dk!lp[IW?@-4}avaYt4dd4Cg&6Lg#p FMك y6.$D8pF4RS7A40%@/`7 vOG>x8= L1>%%8KK#2"ģZBgQ}:ֳ.p8B$R"A$0?c>j-s7)I!iD@~tD.4R Acu7_mq(eqF9Auw(euV-GCHAutT oED*cW\3=2@FDV?>6@F/Fq$p׏5BxuDtW41TsHis7 ԦINis8psP_a@8(V K1@T"!Qˆ`+'UA4pqDq-(`;ʓ%6|W_* 61iIv)@ /4$4BxYj={t-AS/@46_BC64!T4w5"6i2p-9nC7/4p 1(;maXzq_# X0$p.c?+40i7 7I4=)+77LrA )"61qD0@08 A-֠ peB69 85E?|fOu*8_PmQ z7vI ;SI?`>=Ia\A- H 7X( @@c0VGmVl,%6z(OW$1L!c!jEuT3A2 ay\ !lw8)y'%5!p7[g Gǔ pLE` 3F0Q{灖 A @k1'(H::kMV  0 Bvbs 0?v 0 e' Y :cUX5G 6Z;t{T.*c*P %B!T0I%ǰC6PXI0 {+.*1YpYCSrOOK :@T (8(*YO&ʠ9 PY @qT >ky  {DcJ ԰ 4TY:K€y"t7;qLP[VYJ 0 OJ?Q OjS8xnx83w[fy'Ӑ 0 q'JHGA5p!@ K@?+$@- B6s2*FM[S6@X`?lAkYPZ ԁC6Z3 0kԂn i;. 1 ; S0 vP`J<- pek  P%Qk)[#lHA0IPX< @- ̇p  p s  XuerZ V1 $HxИ[RlDP}p"0=`QYwUs;{WI;P XJ*T˰R b/ොK8`{VjkM в K`Ll.PPL?|;R4O_Ue`@%@4IE4VP, e@k9cK+ePIZ` p ;Ts2nýB5O{+mAm5 1,g  c.K4aX0Zqk{1м`0r@c@RbJ S7'+x7[ b xj9h^GVktS VjVAצ7 : \G0 0[7Acp㛡q2 ,Pq;teD-q+0{7t1|77ZiL°GeȃjpL ϰECD|o-fă +:Q`~] pD a4Tq̒-2D%`9q9-Ԣ*@DԲՓGEe0`J"`s @0/0kzCWC4+61eJ@w $=gG? 26>mCpPlcYjC' KK9 (\uPBij_:@4S:1Tꝡ9p@0 l!a*Q"A@,NNVP1İt7B4S*x9wc=O~T=T~^?uc-{0&sI9?S5edC-906W+0(@4* cm#6q<GUm7No/0AɐRi*v#xx2n!TFCOJʰɴ:@QBepB26C4`؁!7N;.¤%d! 4mʐL=}TPEETRM*|u'† 2(BLTG!@E |$uUU,da`LR`` NK0*6t75#hQ& p $ 7"8CGQA1zfʼOR'|2ŝ2Ӗ"8$1^ O1C|"P`o 4SEN0@$@R'Z`-`(|(ai Ldxk8CD0$Z 6|xV # bVbH ,boq>@Ef`!t ((R7N 2<"8d+Kf!(ؑR fD;3wN>mdkaK4ahd %/?;TSOE5UUUJ* ȔTcLTYhUFY$ B PjahQUZ`b g!(H%PAvASY舕 $g:#*J|!RSa%H vJx*k B!|1iGׄk1g\U_9fg1{2%8D` 6b]/3s `>k z" ivp"Rq brq axi:' x{t0Ё"֞Q"Rq"Ab0 ^aJhq ̙چuu΅x fkfy矇>VyʹAOp50Y(l_M P%mr!&h9CuV"@PHhAP !(X8EI(p!`Q1d 0 |grp3`3ufԟL&tqaO Np mĢE.vыͻZrMĤV0Va!d j*< WRK4PĬ,q!bvx> eiFgH9nXTB "L qI2@ lc9ԁRT 1Ah#w3¡'ޠC!g d5}b89NrJOQcYQZd`oqcL"|h I,@-,pV` Z,$.H4,` jPM>c@ib/(;X{CnJ @,`Q!r>r@1Bu<$Ð)a@:bwgB/7.h# Rp1VVNխoeH_ȅlrgF- IBWh[Ȃ| C` riň /A"A(@&YACVc ;2rpGΦ I0ҹK@ j= !1T><'"- z\=U*1V:^yeX㳿\Ʉ"!.YHǤ62!H~:0HHV(%G˓D2^RĀ/ /b(`A,P6L@GH@?U& *f@nIm@ H YTÃ)<2 AAD~,B7e~\{  A p`"Ai,+`BڎLl` 8)0!(h SAЁp  8҈owISN0:x$@!L kth Is0!BqP" ̾()[Xلx,joXZ@-\3 T(TH$Q`;ؗ $}c[@geX%\Cgh8ЅI zKЎ7IIp! Ϡ]E*83H_i aT4(0OȀ9 Cb8JC ۉ;,(X`"`)HHǍ)rkpu)Ђg,hB=0Ix)*^ɐ5+ Q 3CCPȂC8,3X!J6lC- *P` x" r.`i`8-*#*"×Ѕ+ rh%qz-"ւ5d$_$ 04x'(#dl) >#!Pm6TAP<r Z(9.(AKy$ru0ڨ IP.d  Ѓxۡ 'Rq#,HF!HCI ү` ̹؄Hȁ$PK &-0 <\Y >4X[`@3.(tXNRs#!'H΅h`|` F`78(]@VPH /!g}VȉQ=+ @?`#@ZͨW pXR  "=625c8 ( 8Ebk8#x 8!nr8^eٖ%)Ea" 2번@P/W@P)ڎ07]J;:6[\%/)*@ɐAn <8褉yىX@Z. x!jN0x؋)y]0WX-@ hE8&M& _5xh})x} !p(pR2؀I#2 =(. e@z=x!یO"z'P7 %TNx %N٭!pp 89@Q) iY ºm$epz"X-"92H pm`xO( 45`) ,q A} 3G礎-fXІfGΨb a(=Y1  rĠXp PgH! h0@^ZU)}Vfbz)Q jXW#`kHxP XȀQ"i"ҝfE8%xd-[$T5  t(O1aШH0 `<؀ A2Voxxz!vu,n Jj¢")>NksNX tP0QpXV}mӀPXr1C!{Dž%^)jtX#Xl8MHࢍ(jEjI`.npGbVp҂Heho bj7fX^(sopl@+ E[x1 -##pch(O$7$o83oZ]_5S. sC!>ԅ0`KH!,y_8e VxsZҨ@\ w9%K!A xxWz80;G)`Pp^PG#'A=4Y[rؘx& Ѝ8ۙ c$ pЁfZ '`9OND6]Tk-K-, ((EH{>\cմU UZ& h3δb XwPl 0u6:PCI\5W8ppG*f0$|\T,[uU~ mO]܍<32cG]x("yNLN0Г}OEY؋1"/'׉ooH[~^u~x,h „ 2l!Ĉ'Rh"ƌ7rD1J((#ʔ*;R`˗+gҬi&Μ:w4xDs QɞJ2m)ԨR*0іIr)Sfװbǒ-kϠCO<-ܸrҍj!E/n 5HQ3nqĻC2̚7sJx-΢G.m:dÔn5l͟ M6ܺݦ.‡9iʗ3ػ9ҧ 8n:M?;xÓ/o~n׳:=mo>~`} 8`|x  NgJX܂Zxalb!U!!:%ׇ'`@"1E9xS;#G89$X$I&$M:yQɤUYH]ƈaȥeibHmJ&Y9'gleyrgYrbvvUTeZ衍%(W{(r%~VYjuXzTb*bʪT:+;mDF%->dz[Pa-ql6S[̾;A:.{mVb`LM |0 30ľ:|oJp^|q׉'JXMr)c2ͭ@!符? ]-TCs4-;3Ԣ2mաJ5vuN[cC-Jho.]t{W>k&Ck\Wsgن^Nꄫzð׎7z{3s-|̃"}S7jf=܃\|pپa֟% J,`'-p` l`A%=pD$ ۠YrUp9  uT, _#0F1hp%ҡM D !#*CIl =q%T,2\lx /Aa,ȈqQ8t8;>y#|pi!D<" IO-|%LnǑ&?O2;,tHrJR+sX.\,oI!]f)-9_ S7,nsQ3_h<4kj4fi |s95Stn:߉wʳ1Zs?πEAyτcZC4ЈŠD/jtFu"D?Fn$KFOz4?)miXL StTMS0tip TtMQ{RԤҪL-RJ'Q*N՚\u5ѪWWհdEXϊBu#imF Wu]+R׼˩|_!a:]]XSv 'Q! ,! MXH*\ȰÇ#JHŋ3jȱǏ Cn ɓ(S\ɲ˗0cR@R͛8sɳϟiJѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐs;"a̹ϠCO'ȥN^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&LrDJ! !@! V! ,! ,i 9fD@B`QP ?Qr We=X?n%`Jpۙj o-3\*QJ:3kUWj%UעG6%ە}pMݻzǚҪU @B8Lc7Td 1t#! ,! ,! ,! ,! ,! ,g(HXK&Ѓ1Xj0Z.RmrGnr.v;ok.@FA}$HZ f2`  R :igwtd\}&ڇ'Ft$.i &Ainz*f9檪ꫮ 9$\뮸k^Hklgkꬕ!"6k|$tmA{ /up[.[Jolpp / %akowv1\n$뉰!%,,a) N‰D3D̘@U|+' "HSI~ \G1Bw5QnLgZK-JG'pwr":ИQti׀>F$I },"=] | {$ 0t 0!%ʐ "N[)A) 3 eZ+ ~7B\.;G/J?s4M6sM67n%z)װ;ٔ{;'@t: PN }0=Npj`. v(G;ܡV* FHˆ{XG0.uPx'3R' 8t/$g@s ÄyQ!8c؆zQAJfX+v6yq3+H $4!pb;j` * ꍂ3Jgcʋ]/ h/vƋv fTO) nJțu.F:1'\ h/"EPb:IN FQPk%\uCXG/<(<"D AA9`xC J" ȁp! gȣڐXAX͆V3d$p88&8aHGFB>Es'29ăLo1ءv",2(lӡHс/ qXe4sHG:x!v.*%A#D@ ya RF ԡ=kJՓt=]wt-aKVZeCzHKs3sYl;JʶCQ[Vĝl N.B9@nEYț%:W F`1ֲ|N:?Y}_Lb-*pK~" u%.1ULd694.'&9cݒĪbX]Xβ|FF.M'j*PO(QuHg>W89>!|Ch>PrSJ7R5D^G4L-JZ58R&D&?ի&*' $*"֦>kQͳأBBf ІJ2h[mT҆5[rH>_J~!%Acnp،@ ; g4  G`3\Is+HOK@5b m yAI 8@7X錘JI̓t0@:/z{[1wތ!K!uW^߬ `E:3SGN[=^OHRx?{?~DܿN 8^L< t{v)? |Ӽ -qwM l{u^}{O|c /{  O}5 ɯu|C_*@ǯ~I/1??)9#_0Gza(Wv8^g^j$n%?1*<4!H X:G$;(q@8+уDxHqLP8Tx \V؅`8RdHGV]jX_؆WȆpo8P.hWXzc؇{yy{>~u|gXȇL舒XGH@(,H(0|hhzȉ(z'x u8 7H{W*0h (nȂ24nҘ'2u؍ǂp2P8爎(@4 (%Ў﨏(GxY ;7i {Hs9(ّ) &$+(9/-9!iW:8=y~<I7H~F㧔N9~MIy~.I7\|Pb{aYGhY{gnzmtysygzxyٗǗix9'iw{vl瘒yuYbGtMys@ry*gqٚǚp9'onnYFimǹצlԉuV y)} oYfe繞`bD`yd')9new}"؝nڠ5JX:%TԄZM`"I!Z%D(y{+ f*#t4j>3zc::;9ڣã@ 8?:#F5EעGɤR 4HZCX1W뢥^.]dZ,czbj )iڦk¦pj}N*P:$x$oʡ~}Z~u*/J>ڨ1:!ᩢZA: z}aګ9Q p:d ZaA׺%b*Z$ښPѭ&h*q 'ZiA+[>AK;3!;0k iJɠ*z/ ;<)kQ:k۳'@ۄ8 C˪,+[yLBRQ[AX{W^K]dc{ aji۶^X nt{l{ azkr}|P;I.{d+۷˸{{KK ۷۶{{KK ۶뵻{K[+ϻ˴Ӌ{[;+ ۳˴嫳{k;; ۳Kk;̱ l L < ̱lGwJʚ'J_* &(,/L,,.\TQvpJ: )Š;A̭o3I Zr#8)P_S 9Z%#Xd k7T'uG0soooA%<Ȃ\Ȅ|ȆȈټȊȌȎɐ<ɒ\ɔ|ɖɘɚɜɞʠ<ʢ\ʤ|ʦʨʪʬ<$p$sqnrw |'GJ|Ȝʼ<\|؜ڼLv")5 (G5ArCJd؇>ap5=B@bl Q rh9aWKT\02ыQ؆4n YxOpmlC׼=0' 2MwA uce9ȂgHTMQ4#y`F3PHcQp {$Xk +j>Wb.M;E5bHhJ3d딐 (Èr96[D6G^3RTܓPِtemDI=zC'ўAytA)!H)nz(nD<6c!WBu!SJXL)(zQ9)5% 2ȒY,fe!BY4jז!87fgn imn4yV!WIpBMrSЭL!Zi:Ȏ{&Mʄz&=*=uYzk^?B|[KH])b !?ԁC' +X t'`PdupG@ N; 9 2`2 !w4A@L䍬 HB R";! AX^prLf0^Q6iF06!CD弆6,_NtK,d@kMiz!4]Noюs0 -$Өf3-:հ*,jR\5[i\Z~"mtȶ5j [k=lvÖfkۻqdkܔ⶚{v3Iܣ.!uZor{G˦6C3po/A!N4b$nn{0Gw 9WgQ9g>Y9w^L9Ї?:җ32Q:ԧS):ַ^s:~; Q;Fz o2n}n;e7.ţzw/'p̿= /=)zTg=?]Gzst~}/|<'>o~\ p9C]g Ђ/]>ѷ/@O gߟ|3`O_g݆8s s~ Wkf~rr r!HrX"Hg&8xGl 768r'7hׂ= DCz aJzIڤPJO:!V*UXj[j]:_:a c eڤgڤikmzozqJsJuwy{}ZZ**ʢʢjj:: ڡڡzzJJ꠻꠽ÊZZ**ʟʟ՚ךjj:: ڞڞ骞몞zzVmYA9hYJړ9ʹ+ vwF)MfN'f2)ZAD0eVfd@&+?]ePRq1)hdSeulQ1P0JLN۴PRT;V[X{Z\^۵`bd;f[h{jln۶prt;VwpdU;[{۸;[{۹V&r}ۺ;[{ۻ;[;`q; ;[{֛ػ۽-;[{曾軾۾;[{K! , ^H*\ȰÇ#JHŋ3jȱACIɓ(S\ɲ˗AœI͛8ss%2{ j@@ѣF*]ʴSD%`զH>EI@ׯ^nKYĶڥĝ+?k߿S-8Om,@PAǐKX |jϠ+44-7rհvj"Ŕ'߀N|p 9SX@г;_n[uC .ݹrξ{}6m t`5%$J"I"6XE()6aaJl!xXx$5*Ƹ$8F!JV(ʘ"[ d䒋gu=) *ގXf%u飏ZI働gؕp1Tmx uWj7 B|֝DfHT!Pxa f4i!apȟš$^ GFq)Tl ǰچ)x~*vpƩt(.b-"Hpz$n&S(4L#4k 櫯gaN;dAm"Jfq8҈b'W`:''(J‡(=#:1OD6XPtm -3}TyQ 8sB+đN( ,w5S#)zJc݇ Ħ$Rޢd5nqr@Ԙ|/_7M</ Bވ!J9+4C+ #; iiRK sķ6/OL9К2IiżȒ}-! HP0z'F^qBU[&1"6z6t( &b Dpx5L ɉt5(@O' d !P:se*8QiC +=GqJPQ|bV$8Sό'Ab"!hQ\ӣn,nlDb<rp`5jzQNdVZPSRxj_k^47U-Cu 󭷰4hbեJ KWJs!r\S?wMz馾e=GWns\>Ģ=-`'>~]{vSӿܭgx>]?|Ox/ǿ?3[^yXzxg z ؀ǀ{8'x{{"\WNF(hb!{.F'4C3xjd:?9؃/ă@HHB9!/Y!Hl;9NGRTMy4ZSٕ^i`^Y9&fje*l #krɑAYFx)w¨~q+ 钃y1iI}٘clr)iIoifɘiy9Ylci隲 ɛћ]Éĩ©y WilYaI׹T)I YH)Q ٝ #깝iɟ [IGf6qa95aY4j*f3q//&*b& p [, p 2(*! ,%HP ",ȰÇ#JHŋ3jȱǏ CII\ɗ0cʜI͛8s$)H@ϟ>w JѣH ?JJJի:-؇E}+,YhӪ]˶-+*T *p݆8qa 6춱ǐ#,LR˖-8$AyGPӦMe,װ)7A.w/ڸ>Ho\ KNݨ$ěV-IRʗ/ )ytn˓^IuK|˝g@p |w^A]_|Uh5g]i(u|u@ Hlf\yf%Ї8^rЉ"ץJ]Y1ƚ׬6p[_ 0L0*Pcs6mp6@SߌC71! (FQO8. g0TN!<}v:YdNV^i[$C)ʡf&iKgFFb)"T;Ќ49LgR"KǙhIξ qDַv3*D|cMس%VTO+ (Etm'ATpD D|CF7Ѯtš 合Ri"'CC䷖B;>EJӚ6%)! ,o(4  \ȰÇ#JH"‹ 1ȱǏ3ɓ!I,˗IɴɳgG@sJaРE=sҧ:lT'ԫcBJW:Ԑѯ_lW^ z)ܻ`ͺM,^FذU#,+3hKP4 ^OPƂRP 2b#)yr\]+Cʼn.`G] ѓƘ~Z'˜oQ"|R|zr[ qֶ'2~D :H_5#)<U 2(. 5&:0p24bC"6Aw!B8X)Z! ,+!(O*8h  䒐" 8A ?)02PLRe2`ʌ)cI4gXœ@gf3РH @Z4#SJ\:N:0FS\Ku`8-#ol^3 nQ^H#;VlZSfZ"Ψ5PzY3j okOi,ՠ{e{"r5125fn[CIeUٵ`B1 .(c%%ch-ݦ vt8AhŠ@%WI! ,:!c 2J441F,c`X/b )ďع:Cˆ c&jگ=R(T%R-DFotUy8~%f/.tɦ[Sgu4AxklQ#V큎$l4*ض[ֈ@8qHj,&0l H a ŠGC4pPBB7#c1r ! ,! ,! ,`qH*\ȰÇ#JHŋ3jȱǏ CT`ɓ(S\ɲ˗0cȩ΁8sɳϟ@&$ѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪL$ʝK.]AF[@} LpA 2` l˘Waڻ{{ !H2^ͺuDH} -^h{ͻ7?}m{ͼu _yνwO~W# ?_yۆ&&SxVz zD?Wu!#{vO~?tB0(# 8qQ2#Dwt#N?&|rS mTV\l 28Q{fhX^nnt^ȝ֩瞕 矀*蠄j衈&#F*rVjL]iv)J~*ꨤjꩨꪬ{1*kj1Ā 2 @h  ,"KA0Aq)نg?`:z#%gIDB$:RFRlVY e*9XC5qair;0b AԀɼ=Y1sy(_^x n ,'! ,a@*\ȰÇ#JHŋ3jȱǏ CII'S\ʗ,c9͛8sɳϟ@RI@ѣF"EpҧNm ?W`ݪ+֩`ÊKٳ q[oJ x͛W߿ ln&dUaNJ6&uPug̟RMӔcrװAcƺH [6oܓ  '6:œ#_kpУKNʕ-Ã^"Q8yZ'ݵ󛶛Y{dv  .Ri\%Vhr" ܦ߇ (P ܄`x艉"%,hc4`Ց@Re#iHj"dz(hbU&^ Vi啗qXjjyxhyd'fi!-"8#nj|ϩi衈dGqrSǤXBW%}EXG>@-r諰*&1Cz\NI2^珒Hd)$ԴÎ<1^Hv-P %O=s QRjz){(r)V 쳏??Q#~DS1S:I#?1.ZV-# 5(㣶DF@?RO4 >tiUr(Tm58%a.<dS 1#nplY.>؊0񜿆|4.+Hm%.eN[Ӟf2|POyJԝ&27MЭũM*VZjX*UJֲh*ֶ: Z:WBX ~RgѠ4A:5 JQixi d#w%8EZ,5>2(AniRcpp[ҒG@l\1n_v.tK efr\mu@:-t ^Z卯~͒֕{K7U.~\Oe][x'wgy_W `{!NHF^nFg̑ &1w x/q~yLdx$\&S!`'[Y"6@_ w\H*{h|H38iְ,*9QHK7d3|?s h%+ύ,JĖ)NӞ@-RwԦN5PVGծ`-ZÊֶεp^'׾-bNvufCΎ6i-j ζ\nT-rNwNЭvG-zk =jWE8 `H2"Nq|(@Bh:Ѓ!? $,pn'B^`: J t@ 8Dv}wIc ~ptt$GENv+A;EĞ#n/`LڣC" !/^ x]"G/8 3Dͼ/Tk̅/a ex!G9qtNC=nwJR hK64 bdؓdj{y&n<jp-Sdž#.i@PPWh+ %Zi7m67pPg607{ؾV ` !14`YoHIåҠ"QHIH5)Mkc9զ;P?,m!@NӐfUiRJՏ =iNԮj5EkZ:CPh9A NU M^4p"rcӀZ;3(ΰ9!B@ 8b9B-ؠP"@,Y`#0ǁၐ@$LPBIVp A>Ѐ"%"BX F`ȡ/h!0+Az\/JV˖/Uzַ~F3bE*> T,Qd.-lxz$>-H X(6T(8V! `"D3H BؐO$@p!H!WP&p Q;=+s@=ڛF!؅8pk@XȂ;>Z-"оXp;Z 0 ؄T)ȅQ؀LHQhY pX'M  8XP(k0X@0K d6t7t!#@67G 6GHcTHQ@ ; UhSOlX'%P~˅cSPYȄVضZ1 P @YUD#C%8^X `ij29S6t@8Tedf̌ ;!&C)&`,H(O+;x3H3X T4$U؂)!!mS,'SR@*sL&032K8Pgp2=c95tƐɑt=ˌ,`IS0`IS4L`I:%ZX,R$#ʌ=P._h@"ɱ$˲,3ۊ(Җ"ԳKȱ  A! (o|/ĞKDٸ (8YS:z؇z XC$4BK  1˙~*HP#Mߔ.8$T0LX (M#|+4!Š6x"Td-,+lODO Pi5EP ΄zuе* j[P5EeQT5ѐeR %"!5$UR2C%u'e&)R*,O-/]3.00%2}+54US@5u/m7*9S';"=S? A5T-CUMEu mGT IKTMO Q5,SUULUuU}Y}V[uF[]C]_@_a-XObEV5deVfV]hjV|lVnp%WrEW:teWZvעxנ{zכ|~X׀%XׂE؄M؅e؂u؇ ؈~؊׋z؍׎vِMב%r5ٓ הUneٖ֗j֚ٙfٜM֝Ybٟ֠Z^%ڢգEZZUڥ}զuUڨ=թQګԬMڮԯI۱}Բ5EE۴=ԵeAu۷Ӹ=ۺӻ9۽}Ӿ5M%25U\/eDž\:=ɭXɵ\(܆υ݉%ҵE݌Uuݏ٥ݒEݕuޘ5ޛEeޞuޡ5ޤeާ%ߪ5U߭e߰%߳U߶%FUv࿅ µ F vR^S_U._>VV͵aVVb%"^#FbU%&vb()b+,b./c1N26cF4~5fc v78c :;c=>c@>laBncCaDcEaFv 7InJ`-LPLdO.Ae" R~M~ۛSV @ TW] PeKef g[Et`nV҅z`fj͚UgF:0jp_TmfVo(0[5a(`fVePnMh rg8o 6%rP,}&eshlht(f8[aG^HV؇娇hh viX_3 PLZZޞX"V>eefGFe-篖Vk ~Fk5SFvk3fҬknk^Olҿ6l,NfrVWĖʶRҼl&m>SVmenԆmƙڶmПm7n XF< $v#nnNonNVo EoC~o-X.IibX2fbX5p 28ȌE~p%:` o6  ! ,_8*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0Khř1+.XG`z JhΣH*]ʴ:=3*աQ cPWEP[g>NpMKݻx"m[pY+Va~ ǏLyƘ3k̹1KCL3^ yS۶s-Қ N|"ں[N+^ۓmQ=ν$*N. zwQYO}|fWA( mgvqמủ|<ȟw fX'^ (͔ z"u w'N݇W~u7TQ$FH&)AƸ@HL9L5Qwt~*(Z~W<3;sw|t L9J;; dՈ+ (~ Jr?C?駠d* >p>Hf6ii(R I^I‹?^b btrЦ4E-Z'f!Tx? 3YFFkn4a*$ ]5$+w" 5P-o:ٯyywɺS? jtN=~to,"oo1_p^_V{^k)珙WPҟ(*\ A A(3 uc1 | ~m Z2 O}d%a +C(, s(sԄ o&[!D*b($0EK2h<\p6" ('v@ȅ19+I 5@1 !'IIB{,c&wMh0~9B=O<Daq\CC9'ю ( JEQ)F5JR QL[ӞT,ORH-*@w*Ԥ:UFS:QTͪtd h&ьe4IVҖl3WLszt]=-jp%5zUUծ.kcUXZ5UmN5aUjSd3~M-ퟢslW6>)mRp>7Gͭnn[₩e7y}Sgy?9ps&g58AN\ 4qef8w-:.uckӜ%ͳ*v>̓ԏ=?:ԣRORmߔ^aBc?ͮv>:ܫGv_~Yݠ{f.xֽ'< #pS>\ ͗?Cɓ9Ky>@/{hžϢ=Cu݃JTo'N?$%Hb>IHQ"s@/!?sG/NO_8p7!z  wXXtAMJ$#xGa*)؂ez04/8-6H_Ã<5(B^WBH^;sNA!TSxaZY؅`x_8!fHe%l|Gr}qXGxx}wڧ~}}8~xg~؈Lj~8'X牢XHx ؀8xh؋ȋ8"(XŘ(̸ˈg2 8%%܈hXgܸhoV㘎oHƅ8Ǝ۸rFMl؍؏(lYވilh( yّ fu aTkH׈`%e:m!k6@=8 69k 0 p)ir>)D p ͠g&9f8P Ti k1Z հ 65 ? =Ik1@D ۠$ɏ.鏥f4p;q)/P o)xEV' p Й} 0 y l?P 0͠%ЛHv @ @Ж} ` ɐ|9)~9f7;=pɞjgf lYhʊ* zhڡȡ J:(&%.,40z21k87ULq=@B`1a>ZqN7zLuSPYU*bѥGaN Qdk`6 nJOxpIq! ,]yH*\ȰÇ#JHŋ3jȱǏ Cɓ(S\ɲ˗0chr͟ɳϟ@ JdѣH*]ʴ)ǚ7tJիX̺r+ׯ`Ê;񦠍k*$˶۷pyZ3Hu5b߸ Lل saZk KL׹u5ϠCyX㉑G^ͺƹf ٵ۸sEٺ ^xQZxvhУKGi؉@E.Ë ӧ?[ӝßO>EϿG2]hCuLǂ6蠁u%Qǃf8߅TN4$fI6s3"uq9C6D<BHF+CȇN;&)py@PPlЁ5\iU2`e5pƙ` &rgOiigo)/ɦc$y%F*iG(f)D榠PwjZ马Jj*kb9뭌z)Y++7b*Zjc6;%:+ʮ:BF'J7-NG RWVg}Zwͩ.ؔ~idMjmnvnM7sߝzww^ G]xR#θҋ?޴yFSϗoy:Ṇ^骷z.ɯϞ춇\{"λƻޱW|/'| CO__}rߏ[~Ͼ߮ҏV-Y< c%b { KU3+ rU<(BTS*aHBPb! 3nJ6 U >TT ) QPC<<%b")IV,S',r1Y;g6Um"5"In|VKGXuV#8G{c(H"$"KtE>HP##y HRr\sն.9+Kr@d<)JﺣPySr>|}\)KIJ%.Jk2Txn)!&2]-sR|fx)MDס&6sm{Cq^g4ha'gu g9}hzh.~ JЁ2YL[Җ.#MsɣtQLoڌm5\&jڢ8%[ `R <Љ1t8ؓ!)gC0u6$HĜp ! ,! ,! ,rr8&ĠЃfp؁M(kDZPN@" %GH8Ć! 7H/g`ACiM"` J`č%<ȈC` tl;ʕQ )z]+itc,XB*l8lj(2a”g˹sVV,oc˨1 qN[nLp׆c^L{ȦMp٤֝kȟ?p@! ,! ,! ,! ,! ,! ,vw䰣?~P "(C qDCMGiEXpG]RVG NGs߿^ z4@>lJd̙@&رsϤ7 hiЛ t)ҫ C@կJu4*T,Y bU˰L@r[vS++ò,RYYpĉ@+0n>! e!sV! ,x 3o@)(9a 4hHER 7C@ɒ#74! ,! ,! ,! ,! ,vwoqD 2b(!#(q '(#Æ%2#ɓr\鱣ʈ0aI3Ö,YIS >Q)Ϡ*H5kS ! ,! ,! ,! ,! ,! ,vw䰣?~P "(C qDCMGiEXpG]RVG NGs߿^ z4@>lJd̙@&رsϤ7 hiЛ t)ҫ C@կJu4*T,Y bU˰L@r[vS++ò,RYYpĉ@+0n>! e!sV! ,x 3o@)(9a 4hHER 7C@ɒ#74! ,! ,! ,! ,pa E1@2J$\XBFpËZTxcB/vHȃ$Gb@G!3xd͛q! ,qrHP` V@Xb` 2d &@ee*`a5h*Q`0f !@+UP" 0J܈q(?~p!A7 ` HA#@)hUz#0jNkb4Ԗh+k[xc* ;nD-߾m<ĉ`10h0DuGBւ0Nhدh=6i]w4%.t$:M27 !6V]r4(WʜxN4|pWB-g$X!GPz  0l :H[jAhCO=(o4ETG@TVSa2 1%AXBURruZd5Efd! ,! ,! ,! ,! ,}q!1 \P5Hen6 @Ņ'$$Z>ҐA4>,! ƍ@bǏ2JqD1aN#-Q14@&4jLp z]-=`Q zۻ_o@'Nϟ 0cJ8Vck 4[JY/16,j -K`"p^v@xEpl]4i=X@5:dkw@^c FE88@2pJ7As`)hT`=0cA@Wp?px]E)CPG AphDƀA0HL ! ,! ,! ,! ,r(c!  naL(p2$2 008nG ?~2e(ѣA`'J @5iXES'dHۿhp(ďD{ `߾)P *0(@}CacZ `i-]-7T: P9N 5̊4,q D#6 }5kާ ]pQ3kzN#NX: npYءk3;P PP7mAc#VπyA MJqGACB%X%tA 6 "TA[@! ,! ,q! *4@( e(`;0@J! I#d1' !`ly(@B{PГP:nuLKƎ%L0`!Ddx-7n $X %N㙴ѪrPW%$Jȿǐ) ;^`#JG= @@)8`}rmta-]Ě)9[i̜M&CAOihv;7xbV4bB}xi#P =8 1mhgPD)TLß{shGV _ %@ 1D@4?6^A=7 GԳS M4PbTxĕ?`AeuI#fy"84ДI%4dL! ,qHP` *,hE !+4H37A!7JȐC00 `5є!(@S4hM"v%D,r U(! ~xACmBIPⅇ;"0@nt(#@2DȀy#BjѤIfpKC @bApɠґ=qKAjDi%ADIJuBB4@! ,qHP  *\H0F )@) 72C )D NA(M%@A;,7zccȐAB 2t5@c(,A#ŋilh6MZ4iԆ9p'rA޿ F:`Aa}+5b*TqSW؂z &]`h t䀡F>=DIK{6Dp֛ƄM+< 8D:-$V ` ?(jXC%t) _A$Ct $M8@! ,! ,rc 080 %s q( Jq.7B x)яF"A1! ,r P*T2J0p!BcqG2ҐaɌ2RȉG~@(Pȕ, h0F*A#1jҢR[R@ Ǖk;Qb=?yvnXB%c߿y`#"g ػ߸1aK c(wރX&-pVTKW [Pkw,΢)8Ƭ=PDmӚQ۱;<WPLKZdD#u]yE9A%A@B%KLSB.aO! ,rD@ h*|C@20A8dQ NC<(QBjv MKPBL6;8,-xC4K`q aGAA ͑jJʁY1 -D l@98"1T0߾+C2bhAYW@:!XÉJ5[v_խ;LGܓ:qjՙ7N[0Dб*p@o/`o)ϣ.L@*rlPNф|17qLƧ|@A?C)P PEy?N G SC g TL8qCM=X"Mt)WzPA.R! ,rHp` 1 *$a`2RPƃ$`9B9':h9<8qPa vD-NhHpAg^Z3AðF1W˛X U#ʫ1LDJUC 5v jADžZv^;w;0l5a@_yC(bu)]A{@ `^vBsExC;06S>&CiZ9fo։Pbb٦|Hs)Hʩ9#'"c9.Tji/d!3:#) 0@C?Z k\! ,|$4 @*\ȰÇ#JHŋ3jȱǏ CT$Q B˗0c$ ͍ nɐ3+HeѣHc4J%A;C֍`Jd*(q-۷Oh!@ 0˗`<@" *nvq-oXLG߅#? 5:ܸQD E@Wmڠn+ ;pn=N(:028qA967H~o.޷xW?p8Q$J/rniFu6pl8_`k5؁hۄo=(A`m;gzPc1H md1yC;蛕*GAmHF9Aq#J71Ġ xF3kpE jX4AuhB4(?x5QL@8x c2x-4@ar8#Uո/X jP@̈FzP1* phTcx6dyqq#e0_ QoD7x M@2CYzHЀeHcьq@7+QD!1pLF3 P@ kVhf >`jEH+(hAH5%H<170F)Ȩ K 5Q_#`-1mr7p(-cy؆&q`8#9k4^c"@ j0Hi F88БT@0q` F40 kF(Яj9l"Ϡz =D F>u(VXD! <Pq5t@vh-=)1 97 h9: wjb60fØd gwn# !XDQV 0QD%BD YE6H`IRvM#-R4`Vk)!mD`(%:n4CHFq^Avg|cF)!oDV{7;p 1@nP`V`6P B " ZaQJ p yPP e0v aBP09JG À Z P@^{a ?Dpa0  T Ak1l09FP )t `IGc 40  (pz@ ` @ҀP @:; / V =T P,:Nn@ @`O ε+ߠ 9D %p U 5  'p Aڕ@85Pp ~Z € ΐ 0 :pc p @ whpNJrs ݀ $tU @/Np5԰ D5ǀ9h:e0 ۀ p9 n 8 2W0 8|ayQG7ǐ $#(.0=5$r"FRr uobE'Bps# @,Po0 sP c.m-T @FIr A=ЖvB%,ysn):'6O6 Y" IC}7rJ8!(:?10vb+#@2Ж ؠ txxzpi 'Y 0 @Cq4)@200Ѡ -FV "4'*Rjx ;1qr$ptAR"塇#! q!-ڠT-2`E=%%8>$,;5  Ɓ-Z(ѠK"%-jNry*z7=70_: ;t7@ ;ڠ# Z4١ ѣP0a.1# ADB=;Ǥa(IZyq̱*#Z!]*Q5$ (WҢ:4 Pz.Z "C"P!!a0ZjQ !) z !# c @)z 8r 0 p?jڑ}j1Q  Z P2`p~5 ",R;0  `` kgco` NEJr;#Q&P?07Hzsr 0b~*]{T :t۸6j s4" 1cX!qU zpǐ]ɸ[  @`uhSt;v\ 9z(:={wp[11JXG X 4^[U:k D,a0 7  P4@Ip1*[;  է 78``;z_ e hep !ap 0 kG4 6:I 2 p>6F* #Bɉ ~q*:@ӋO\ɣ$0a P!u*0h `) ", l[! , Ȝ̽pf :PKB!9Ъ͛ /BS SM*9*PE*>2B+ 5'!p ($ c+:`̒L˜` f0v gB0 q ` g=: h I>0 0@ 0 [06@'  0 >G@ /A6 c LS4 0S  0vP l Q Q=P fp>  q S0 B@:#,%*` 90D݁p Apc`<  ,`M=OmQ۫[գ0 W `    19P Y ׸p` P0* l E  - [`/@=`Pcti9@ ` =፻ۣ$ >P P -` 0nѣ0@ 6pS>0# s0 PK lP 0@ 0~q L:)Hp 9D~PUM g vޭ - g K rYP B0   } v:-@ p"pJ F0/uЁ̃tq@ PΎ}ι x[`+ 2 L0'#@ >*V&on'2/2 dԵsk) wa7wvw1:WE [ 8"P0// _pI{Oɔ a76''_L)Cs*`;, %Py0hDE/*]t! ,! ,! ,! ,! ,! ,v1 CFÆ ,AaCE H(D/]@$r  X۷߾숸\Lc  n+̄:l$ӧBs,zT`қ-3迡SF4֮QV}4قzeR@Uۻ7XpqP(ӌ2PF"Dpy rMz! ,! ,! ,! ,! ,! ,v[1 TXBF |bD)6xPcF=z8PdƐGdBIԈA0kDXr'ė>y0hDE/*]t! , cH*\ȰÇ#JHŋ3jȱǏ C\H`ɓ(S\ɲ˗0cH̛8sɳϟ@ִѣH*]t$Q JU@իVbݪ+ׯ^Â+,ٳfӢ]-۷n+.ݻvݛv'߿m>UÈ+NxƐKLyʘ/kyΠ?MzҨONz[vΞ?M N {`AȣKNzqN:P>oxqgw˟7u΢AlGxQ(@z)' &Nha^aFu0'"".ҧ,%(s_A4@?( w﹨LJzI@uGD pe`~)fdif] 5p2y%D(@tj$|!@ ܔe硈&sFUcH) nP'e訤ZyB(CoF@5JA}g+Cp9'dk,NۣYAF$G@@is6t B}\{^j +ESkMеA=wdA,Ö¥.,B$lB+QAܓr/A1FP/r9 ⫡-oq$6m{\=w DI'oh_G/xyGU)8̡GIH€N@@# Teu D:EZyE(tE"`$7p < NFC/>XG37"dVCr5)sH ƣF4W9:ҊC7ّVOUHEa{(uK>HZbH@Dq(gyEA)T?vI9Ϛ^ ON0)B5Z: Q􄉄$DӮe,ySl$4ǹ7A"!MG#9IO7aY>Y~82q*B}D# QR   pЎ'%HCJґ! 00Q@p u`@P81@P*Ԣ+ TT(aaxծKX.ddMZֶd)xJ׺b vͫZePd<6Ы`KŽkAj:%'bX06ͬf7; OP9KZVg:F Hl)Uk*4oKp\+ ͍rV s_ŒIw?-x$o{[o.ɾ,us'/p`v^K3TxSX ' *t:Pul%t-6] % n |\ J J5@)p,\ bǚo^h@ Z R0vXV0 f-x%p@)4 R ,к *77{QUX IiAc"@f3 "ç/za?< p6 3 $ mv}=f1(߃t€1 rЃ @~r X.`?p(? B@ H  niHPKP φ}p]kfo=pZˠffo!8֠*ey5 v 9 40k5p  t Г:fzZ)00&znp Z I)pOI W@IJj+ ;P ;  0~p *(Z͖$ggKlvi+* 'Z}Tz@~whp{ 9pp X1pZ [HVBFt5p [mn;?p^YK񖨖()`juηiP0 (:~曲 G9p!;u7G7s% `pCg Y+y k^lɑ| aw >qP  Dp (ax I fX% ; 'tajl)k=p),0Y 'P: n)?UGj pfƹ P0Ԗ=tSG{Ab'~l0g[Н qw j  L`)9u*VvJ:`gp bw e@0V;`mU '9@Esw@2Ppq @Pk:Ѓx1&`*ֻ 1gՠQ j izqnjW))#7 ΀&l9pa ƋK [Ÿʽ P)**pjqJ ]ۀ hP v:@ yo pIP;Ui'*+s\z+ p$$pXmֹku=0و_v'p^%~0)tEtYA=ywEs%0ڨp7|eWnXAWlX=[]R O{wagxKHROpf@ڸiL{Q@@:@o[O+9Pj͈p8xZn'P# aP@сD 9\4XSF slPQ"Ɔpt3aęSN=}TPE݉ Ƌ6<"Ɗ'PxCXS8qÃJ! ;HƠᒤ9RqCaY/j(ˡ60<8C0he /h QF-oތ1˳)hla$0`%Y^_lġnǂ9BpUʨ /Zq.n>@`LNȡڰ ÓεHTa$tp h`T v >0I2K-K G!<@TrRR&S82Q>8* :4уrsN"1 4oD4NL4@U*.6GӘ3Fhtӳ8EJ4<TO&[sʼn+U/F,@0Db9ga/oNecE围[B,"տq wۛ5Z2^y祷. (+RX!N/@[PKQatŖv-G#5hbFq*Q6iBjVIeP͔L+u5G3-yے6jʁKLʦ_6Jjkt[lF4hLDv!nȩHȻ@JjAJUlˁFj[$UnPڸ` `taBg3μJz&j KW#u{S2\9j+AaN!KWDwVi D_gVl;Y?RU(T?$,@M(& ԎD@ [1 D.(tB5%//hJB#- %R9J7C@br< QHv(4@ @⠖? h>6эmкwo?+ Ѡ]9g_?F6ґHYd YD0""A0!BTbءq_FY `fAD#[pT ,@C^UEqe@LB0J2<@xX"PAC*$ Āa:At" AD㝬Bt (!1!޷QFcrTGƲ `,ej,5ج)=Ҧ7i R ;HI-6qZ`A)T@E&)B!>* BH@"@ NCB!#@!dD9yj0 t;9!_ % E0тqxS!Jq hFDNM@J(3M8B4H23x}T_Q/%EP7\Թ}d$6I<`IHO %LAA G!g0(Lj THEXAJZPb5VsL600X2/c9r(ġ`F¡nQp (8B V3Q. T0"y3Ѐ /d0n\K-dqe.w9;ɒ9 ^8:qD0i^;8QE0*bL` @x@PdCPh@ =i@B8QdhlF3IǤjЅ0=pB , \phBJ\AȆn oLi믹v! m(Sq'jtIjhd)|6t Tz@`uA ѫO55p %`bL(uX%]IBZ!*a9 ЁJpf3 C;@/^ZPр@t_mjMRY uW=K;Ms\AX($ (L@ "ƪ73#4A^5H h| `[^V4 8z<ﰈu3pm*%aʐ8I/5€ \7Aa(&ϳiEC 3a CO|7]ޞA0)&='wfZσ>,  6HUr`L@C(:뤜b(ԉjX5"s8 ""9܈=(!",*(2R'h,:=h20>l拺rk  @ ,r>Jp S\  1&TP @"'ˉH莈 *' h(!ДI!/*(40@2/hOI,6[iI29!0/hX`7 Ph`(7 l3P(PqEn-xDʘSp/"8C /iAJd.Du: فȋe)`pqu&A-B a#PЁH"B28d7:<1 )I$I &vQP! db(hvJJD#sIʑaBz JX" "Ax d!n# "s$h rG<K1܉ؓP J.Co"4耓) ؁S Ba)BZ#@a(#pHHi,p>ы =q @IV-pK+) H 0m/  p .PI)! )5{ `ԯ`) ۪ ܚج2yʷ1&Jcp= X@ M ; poy R1>60ĺ0ϫP"p98(Au"+!$Pk&(9Ӥ[})9"؎5H,-xzx) %h+XB 5IR)r" " YÀڀ!|eZύ) =0:d9#5&؆l(i8MΜ(,jw5eH=@+P"tPd)jx 06qYcx0p1)CЃiXOG͆e|] 3rF c0",U'}z 3c=hgHpXӉוk(qU# %kLfڣQp ҒH֜(X8R" °(Z--8pX0jwMƉ5%8ۉBj0Q1> wI@P(#" %sJ ʱ,e,kϪ/" Ep%15"ӧ!WPP]P05pjhTD"c^pUVu=Â'@-"k؀Y(Y:---wZӊa( J5BۢX'rX8w*RpmPmr>c[K<(#pP pX'M-e:[۵-,q"cCa=kR" d=2(ʼn$9Ngp"ۆj*IGuk*nD3AɁ.&p#҃ Z]pJv{ZLl.x[(@XٮhfTZN€؎ǡ'5S/reqKc#[`G/ ‡ĩW|f3"°-j};}@7((/qR"5x8op@o:~ⷲ dtRFفb"`{]V( %d! ƒ18xV.B8dA: `@8I0bȈA%H%̘2gҬi&Μ:wQ'РBi`ѤJ2m4'ńA@%T 5*Aむsؠ r )޼z$I/C l0ă"ylr1kbG@AaB,\X1Ԫ}6V:ײgӆԃU^5@B :He! /:S"Á.؆0ŽKP׳-PƉ.uØkFx`KB |)8k :h >8!/ p$\W1@ QtEpw)pP p7 IDIX!FW$Eք@W/ :x@YBݰ a B;'@.D6Xf{&yReHE$K6!! 7 .IT.xCB:HL6ܐ9 B !B +d" ]iӡ2qgRX @2Y,HlL*tP$4h pA  E / A7$¬튫Khc7PPI0!)f%nLPDpk $ nAuD @$ $k H6 vΊ3C-!DK*ld )ЂQAQ T b*C,h0ؤL$=A$pwk4`2HKUI$lҢP.f4KH puG[0-Q+#"@ xRn0+\ NKbr6M;]8^q283S 1gႤ8lj_c#8dCFm#fqd% 9<*˔.9ˇqṛ)sbvܣ-öj fzҌ9nSLa@~3ţDϖ3"hG5~4+Ekz<,;-IZ<uKNZ6j[R5uk-V5nj{]Z g-.^+0Vjm3< sk`:NaF;ܣbl{oۭpۍIeoMze6B'n.MmYɃNx.߽xC\)Pm|{xݏ/$߉qo{A7|58nN~o<0er^<-OMCZ:P˦KX;d's{ Z%כ+;ߏ~̻w3X; ?G[sg_u]p-v]P<=FZg'MtW].d]OvO^F=mBZ_}t']*$u^;gѝBZUos]㾪u_3'>ZIgr\ݣٟ` ` !)09AIQY``iqy Ɓ ɉu̡̙`űǹ `ɠ `  aa! a)!1 %B ~\&Lb\\ V\N[LB\[ L!!&\""[##K$$\%nAdmbt}b"!^bb"""$¢ɢbb"'bbc*")1#8AcIc-RcYcaqyc0#hccc3ccc#ѣc6⣲飲d d9")d!ȣ19d<dIQ$Xdadid?Bzdd$dB$ᩤ)$ddErdddHe %!e)eK29eAeHQYeNdiq%dŁeeQbee嘩%ıeT¥ɥexeeeWeeefZ%)1&AfIf]RYfa&9&qyf`"ffffc۹&h&Ѧffffg gi'!g&1g9glB'I'Q'{(a'igoy瞁zggrg''z'guryg'gxҧ hYg!)h{2h9AhHQ(Yh~bhiqyh蜉h(-߹>"LШ{h]Fn^ Kl胱5i>E"ʆ*(Ξ~)!iÅi闺ɩ)_.J)ƘX^_ 颦FأYV)&z٥Zvi߅\MU*)ϔޝ*Vv~*jjbd~m꛺+bk}kk")+1a8k|AI+*aj٪QZk`h+{qky+랉k+9+iRN 6V:ܠN_~`2jŮź]zOÆ~쬆 ݥ{?,I)2YƂWY6YEnYfѾYɶ.MlBnm~>vb$ڪkԖkۢۦ^ܺܮebZ^%D .۝Dn%.-.In.QMT]- emq\B<.FnM.NnS4v.".Vkbnin¹AH|.ڭI9҃A1Vn/X OKph7p`:%: H"+ZSI=p3T$h0dxըUk=u;c=`voUȑďmh.ۂ'h8j(07`@vB+uzo ʐqaC%zq(PƎ-[le`Ƌ _vC&GN_|Sf/}@! ,! ,(Dq!C J( 9`C CT∖'(AQȐ1z`oDQ†@C 1Y͛rF1F1`!TQ8Y+ehТGSQG 28hAWoZ0xk5mR<}젅tbSѫ7l 0َXLW0w1^#r1@QZ vq9ܑmjhI+ VxVX)})[NKDjB?Xnƀ"Gh(VLyKlt< 34 eEtH0PTHH}đc?Ѓ䢉/Q4GB! ,HP@ KĈq#&D 0b!bD(EI-X(˄8.߾`I1fּ@ 1P8  E-?FBQ"[0GjH+o 45с P",k6[ p(iCfҲa\Q"dž0e! ,! ,! ,! ,! ,! ,p D$hA2"|8pÄcXDA 1 !GqQ9NDWF%XN0%:/ GK z<*Hx`ƠQ+VUHu'W! ,! ,FPc qD+(GfP h?2$zd)r?=j\Ҧ 1cY͓;iAFJm2E)ԞFR@xJ h[ojɝ(V7(hzfP8!@tLPƏ?"`PĄ! ,! ,! , w! 88p#A PDFrGN e+ŀ[b{h -3 &m!2础A?Xs2AeY@?6>@)eYo!PfoA8XjEqXAF%^BG\u\uc$ġУqPlٲ(^){  HoAcǏWJ8q`Uy! ,! ,XBF7b$\(@#ra"E #-V>ZP;߾ !F%fHA! F1pFЃ'KA!hGN0)ᴥDcPG5n 3$PҠ riY[8(0قn{. ? Hs@S}_A#`ܰ ooBTMfN7zyz )Bf˘-k68OX0 d|mr?cqz1ޟ! ,! ,! ,! ,p#F2J$\(@%*`A" K8lX+ZcB=ϟ}X1aR zt/@g˗>wQ"(F]< 2ELV4+&H'̯5XPmA`̸S&^7[lڔInX8(ilgge*Ȩ0N ci=~A5Ӎx5{! ,! ,! ,$x#FÆ1JȐX 2& C JD1PhYJ K ,AfΝ a8uK)Ɂz:@'RS`TUl P˼\wKcdSghPJ^ThV`aV%*,x u ^a@! ,! ,e *\ȰÆ1DȰ20jǏ#Nd81 8bHC"F_rI&I8' H6m@FaCJ%ZjbDCR 8\TFD0`ڿ}@%bxp 7r!~y$Փ+c##PG<Y"+:viJ2AfԀ)DD K=t@ #t A9`3&98z^6iwg@9p% F V&M)Vh fYqaVLy@C zY7P"JPP(E :1 5ʷp@5eEms&(@)lK8P 'hc 5A|M4D07͔K35J87 7ps˜ 7]P@3M9\-Xs:DN\|s 4_~-  XKz|CA383MR5M $or Ca3 8R[ XꜲ. L3Cps_m~5;h7@8kMHVKl"0D50`r)쐀.T@C44p 8PB;8Ќ3C dǚʟ746HL֖)W2 04PM0 o3"1D/M?@ cs&9G@ +t9'P670A(Lvjm@G@A2Q&4p`ۿd&r:,p0Rzs \54C#G:85XI)'3r"G ÍPܰ ը3!(^U0 nP&ӌbٸE0 V@Ѩ"m<h+" LPD q5F5tI(Ca+F@gaȆ2p810@NpY3tT@eZF] n3g \tԃ㐇KdHCDat#p&Aj.$Nix3],QXR \J 0@e1a%L8("E$\I`ƼAkD0 KAIx$bdMy @H0(%g @!r?B :gB ъ:T! ,"  ! ,! ,! ,H$Æ #JHŋ3jȱǏ Irɒ%Q)PdK0]I ʓWd9:fFuVI4E3.h?F*%Q2pjhdШT²N$ISI.r AtLa2@HOYrG4TeY a\j@.4+ +TDdkPsQG{6T"(O^0H kp0xA0pDQ%>q51$04" 5q3C9Ds 3ĐQ<<;pG3< *N 4C"HS8#+\fcK=)38L/3@"0G0ΰ3 BZ) PB /8Ë0C> Dc320JsL?#6O=O;Fj8O)S;R:SG=O)3O=<ϮPqC3O;?Nz5C 1pr4Z4,:\O0#L=sT p4B?6=IO< ޲ԓDױO4#;ܒ>#VC>CN ?OlC3촳b;s :x"5F"F`PxaU ;E=QRDb<~S@/Cxa8;AE$$&4Zo4!")jfK!:Ǝ"B^G3* z,]=1 @68B|zA-a0`ud04xtCj0'd:q.sdhG;.lpf;F:o H+ p#H5aT|vl ;F;.`Nz\D8BbΨ5&F tLc A AIX( W ќ_h],5AǡgvxE!y h{3ڌD+DӒE|ր8t J<|`3}lKE+HYҜ+!C4q?Hl|X%'Qaۂԇ5Ih@PRڛpa()d =]BE*yHXp<2rA+ 'XV)p!KPtC&IRW# vClE",y<#f*phF5, E" dBNg=͉m7TU,AHrݑ:K‡>jAw5J~;U*qRb[2 r[߈oURd(oB2a IFރ! ,zH*\ȰÇ#JHŋǏ CIɓh(cʜI͛88fΟ@ JΈ֑TӧPJ(ĕ #ׯ`sb Kٳ9]˶۷3K݊˷!zKÈ'#ǐ#+|%a̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)(p t>%g 4 %İ8p %P~Ұ(6=z $4iM %P 10M=|S8|*CzR 84 6 Z)*S  ҴA ®j1q Ԡ곹bçZz%1;4k+T뺉lI2 pp в 6P@S@0BZ[lrv: Тvv ԱH+?-%c

"?ٷn5lXA D  d$ Z! $  "AQ5 Oc̀ @d@8PJ@j#>d2P4y7Qn@ L@2~N)X$.'Mj(wY`-G6NZs)9p:a1 7`NfGL?`$s6;r9 PL/*qTAE! ,QA&ЁOb>r`30"> F,A91@vLġ A,RۑĀS`!\ NBNp*pMR T "HX; .HcԦb HJ ` 0!pA ym d \a M@`@r l3' QG0  8)HQD&怊ML (h lb(20ZdA@FAOl B-LZ"['XBPE& Ło#!6(>y?=p0Y! wxG8w>"@h^P7a U`A4<B#<` P `<44b0# 4ayP0ؓA0p'\ $^&$$"/p~v(gNG`g( a l*t\tlȀ%X 8q6"f>@x+TXBsP(aDX0= !&rG Bu|-6Q5FBE0C.ЂXH4@,dAk&Z \Er @PLϤLikw`pc0wdpf |>P9\gP ` @ qPnG"` [BZ"D325x$@VEMpC` q+*(`'" G8F ZAIGuv6\E"*3*A+B5i-*8tvr$0#C6aR 2C,TG:I{3"5p4C@20E$3Y:]tAdSDE$382:P0R9R1>*3icZ y9^:è8I*Y%)L>z2Aa'Fc_. ! ,! ,! ,! ,! ,ܠE6Nlau(tA76<C 6B,q0n1bq#D%dRb ɞ9oʸA)S'EN;uN*Ԛ=pEB hb Gp.ʕ['̺s*–f *_6>LXlvTaS! ,! ,! ,! ,H0 a7XF h ra P v챀տ0C Js߿_ ~@>%P9PGΝH+ F*A}Z qG%MզS`JkuӴk | UT1jV:hG1}Y8 ! , Hb \Pul" @ n`ABzCEA` C NmA0P0 Oo( (0 ((!,1* ܰ:ǖ-׬ LXZK]\Bc$`Pc9iKAnt`ᆀev8FÏQ @I3*$+5mƦqのyJk\i6OX \Ԉ4aJ.2@/<@4$7|yC2ǰW[+H 6;@@HabbMLb=b|3 :4AO4DVR7p&l@CeS=sL$ĐC4@P () t!! ,! ,! ,Hp 8xPa2J܈ NAS) 5JǏ:`! (A8ozhRo4e6lܰ)0 ~U(b\#G %@߾g`!`'tfjf݇#͠h5UV@t=BwkRuz+͌f (0yo߁ttPbN]̚@ Ѷ=;vg)n AT 3k2\`-T2X  4v)mzqog %ArCē! ,H`uC%dȸAPA7N1F CPS:8e vF8$am,AF (ܐP # Gש?<訷4LS#=˭Ȃ$x挘69MA=G8SW5 W6 t8 "pxjfx[=H;6@7(7%10@ ҈t;?nwpx&YԘei{!ďS`hSIDEQ 0F Cg>at b 4%T P]INDA01H ʰCѐHF3 tA '4bQ@4Fݐ '$!CC:TBE3`UCAx[Qbt04Г)HRP PA2BDIEzީm! ,8PA1*$hPF pc#E:Ը!q`1JcGE߰qۤ;B,QAǴiA!@G I;5ֿ}`ӕ #6lS_ATň @A֎;wlYh[V=J9-N }r&X 06@\Ѕu-ih^liڨ\5lB 1:ekdF#B2,ǔ= ޠ!c NWV_A4dTtp (}  P '`F4H$bL7 2xI Т@"Du@ )RA.IB54C!H! , (DЁ`@! ,! ,(c4XP@ cp/Ō%b aHw3Fe-Ѽ ƐqQcsi׎qPсC@8c`/!Х w7_BWBT@9C$xSYB-@wІvB! ,! ,HPc\X` (ā!CKc /:xÀN #!ި6n6ͱjß2nDQg~l 훺߲=:8D%jTϟ٪(أ2d􀠨YX ג6"oc,Q 6* p$kbb3Aϟ(%``eS 1b @Ȩ@>`6&%6H!CF 1h?S(#F^[iCY:l(!`d{44% `" ad 0P} Đ{ɇ`{$! ,.HA1Q!2~ epXbBA9A7lܸa'IctlXGa e`Ǐ=dرĎ=$o}N11GCTA;-fԘmUۭ 0ԞMvڶY Zir:Vq,A 0fc P! Gahp[JE-pCEApVM7$MK&B 4Jx9*OcB d$ /h} ǎ =C`]RF<4YtA}EЂ & @Bч% fW nz }  0b80 =b! ,:HPc TP#B,xǏ`8Pljqp`dp厍0" AA7ln+1Jh!Ɖ3Ǵi?0Ra"=qMoX1:,ÍXp 4֟?fb0m GM uF %ͨ [߲gF "r5[cjr`FCǀgpLS*Y@3T!ڲʤaҷSGX24u2,]9ezK7-$ECL dȡ +L%k5 4@A 49TƔ? Bᰃ1 =$O$Bp@`PA9dДQ.$@  W @C[T%A \RA$ 4JPv'A! ,! ,D8P1*$(DÆ1v1qb…:,FB( "Œ77kܰqFca )PgO'J,( oܿ}PѻQR$hpC `n a01EYh`@Q8%թuWPm \SDzzthŁtNq2vLP])ĸ-` מc-L@a (5@99)-^C@IbLoT81nD7Jp?<>cD?(p>S<5a$F7 t2A=U *`FUuuQ b`$PB%tP $z"z,^bU&! ,! ,N"H*\ȰÇ#JHŋ-1Ǐ CII2J\˗0cʜI"˛:ɳϟ?U ѣH2cSJJJ7l ׯ`L@!֧bӪ]+[7veK]Xݿ_Th7̸; #@-ly̹3]J9@g@y^ͺ*r+=QH۸PVD8࠸+e@H/#سqӖϟyt1ءro$0>'! &J9 Dyܗ-^Kڇ~EP `]|( ⅺg'yh`}"8݌hHF$I6 Tv&/de/.jX嗀2s1˴A ` p04_;= /lpBI\FVfT@! ,#@*\ȰÇ#JHEf.jD@ CI Д\Y0c3EɳOJpxA *"b8p|HG(z5lv\M6)L@*ȀbpH XR MT?FRT!_SC>Jt:ɫ^ yJ p@<Vtb@YfNuANPQS@ 'le :@XVVFn}UA9Z A@ >e٭GWюAh jj:&4GQk ސ 1v{a,X (?} :h " J$@B. Qbx*0'|p d ݁7"x 4e@# ]S&@.g)`П Xe7p( w`>?8@ lR3 ּ X`|,A/0:9C$@N@ԑS >  T C^U F,6v`&,DRذ 6 ( &h B61b(ЂL F`M`B>pDa'! l9"9HM̡/xABGOA V`54F*؀p+a A@cC# X'pA chFa <Ɛ!`APNA >5TAHC萆*T@֠40@?D-b*19` DP Pq,0! PL` B vq)voE| T؁h R>E,!M<(E"L^IE& "P/!Gl);.#; wx W8o L= h4Ё.Ap[ y&<i54b\0W`UpG<HMP zj&:0 Y g0h  ` 1-P Yx@a "Py q $&S0KE@ s B 0ft Z0hMp~ips.@$0t`NC@<MfP~~NH@f! e HjC~pcw.Wpf Zrpidpy`㗈. i0E ZPu`cWe7 hn  ` =` aSxք'BHl z>0`  s``   ag [@ L0Y B 5D6oqHi wMAЊoc:0~w6UȀy,~ .rF=ЊtPi2eP3wrt 0q7 rb'jF9 Ԙ E  fP gڨI@ h@Y`x-bE xyve08 P >IЅK- pyI w`Kn#hJv@d{ht0w`)Gc9Wf8:NpxoP7KyYM50~0P8!NG}%8 ;?0 uv"(p`  >  P q@  - }-@ hg8 Y@I0 y#i zp @ 0 7{= 8CМDUFpFH.@o`h;wW )j~'s@|ۉ}:q9gMPi#i5i-~pc~.$@~HPCP ^D(QLK`K-KPLQ@> K" L B0 L BJȚ$ > s I`EPQ\$QVQ._6}U0qzGV,Cб+@$A:C r?p{,p^.%'C`}:O%`t-  @L Z" "nv`F1/`79`nk-Gw"@fo%A6 pKQGO+0@ 0eqoDV~=|&fG'0Z4O;SR{K%RGu1]:@[?v(hAA ]y%\i*pY+pKq4P0P7Od^*Q!PPP[700RlYK deO,$ct\v #@WSpYz^@r`c20n?'P1#u] TQ20r \:uƲhl'GWNZ AUUo,dJRcȇ/ً *XAXL^yV=Y..$27<@<HHKÐ YC"$ZX̢.z` H2hL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8Ir(ҹM`'6q z̧>~ @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժDVmJ UluXVê kVV'mmY ֵ"E@JD B+U / +@c}]$4:0z%%Hh $]zւ`GDb@[@;k0 xe 궫2 @Z젲 q,8@ IJ8H @@][gB@@HRh}@vڂW @ pܢx@\y]-=+}RhBBQx e b (.AW @<,]5Թ@b1K@nBJ U P0-iL#V"H7T%$DVh@ kZb BG FK]V8)0𚐠WҖX8,`wh!\zWr*D+0%` 1"BXHjE1G+j960P'S&j8ǩ0k 쬜l9p  XlV1:z2D`\D(A[P G}56 .b= ($5 8@T=8V1/@[ wHX6p7?1z&9d 9  GJ D"!] " D0Bk֎ 1:@ S6Z9ˀ+k=jA^q{ :|M =&  [, 96K  @L $ `1 @ 6@| b "A tW}@WA VP# GR+@!;8؁r,zp001 ϐn bZlݵ P&~'&F:Ptcv p*G]Ѱ RaܠY+Q q&{Rf#f*փf')iX@/lH )216P_x60~ *Jwc/ cu_2 Pin8%q'TU7pHPTg7?n#`ce^bH̅4X7pN7mE5E0mU7_gZ0m%p8/Q2~Ube\uͶ:P*! woHBЅZF7-"l[ 6 )P*p\`~*_+.p8~E%%fle;06P8x[58;ZP `Z&k?# r ru4P'p5UUY;%.`v_uj*V@]%P7|l1`b 87/uGWf0p\X5api)yhU\{XHXWxiYW\`Eh%XqVH7p) 04n[qy%pȓŕAV4`X[+^I%V6\`mGFgL 5%w1 ą|[9WYp*Ԗ(ŅuY^U)=Z<) @َh)apx|$pW@ !,U`2_Xhu 0h' j98+o:p: }!_h]7Rhpc'$`+9{h~l*`G_,Xw\~5`, +Pc\5n+%MZeF,@10*p8.\80@0_s([oXЎ,~XFn)}(eu;,W=pvU0[,7XsVɛhYVj8j2@[*oUt!0w pfE]K0 cfYH! UWz!`aNWU(M 5c#p`{6Z4`pp)Q)]+sUeUV nV@ wX2X@ 7  D c6Hm` ]c` Yme}{^7V0pąvf v Pe |psL0I ]NX(|soi >}E׸ /0L 0-PZq0@b62`j  MYW0U `/[Wrw~ {;M-&c OiA0WZe0i@iV 8f9gP Vx[b a_0 Wmz=\er(V P,'`ZfKL' (<@f  Acw)   *> 'L *p%iFqs hp=UF@jjXua`@k,W0WP\ kKt0jo0Huipě]y@ic`ՠrɥXc6n//c@lI+#S(j۠V%@]0%`C Vn1  x5`hPƃʴ_wp1  SI j "J|q@ /y:x;iPl,C y.`yP[KVlllUU]j`Fu$ y[7(%@y,n@H60PZ8i@l0 @oeK7`7@u; g Z_*a 1@w0m!l+^B 2/ rTh \ a07k {E@ t '+f{P z h f@,෱W=\lMj0, A`[6t6%C@_jp.P(*1{f)@  $ ,_P( j16&J Y F,m0pR[[UQ@nY`knWR4mrRw`ԅ,F]`ذ/Tsp|;٦vYP lH hQ'<Du=08>L0I2lp> Xx"Plajm=H;- $)Wpop@p 5$;.pU8{]X*Pys( p. ks2Bu X-~ir[ UU ,=c `Z=P 0&`k 3d{`wNu}" 0ۗ /;-Z/\D.@ hjZu_; \oP=5`a%%@ -jNC`o(<){ cv,Z@߁\zu%%a04ѐ | ,g+PcpߗEuU6ey- :'ʠ p%Tr ,3iL%ښ"EΪ ; Qʛ s@@i fWzz;;}5$P@!Unn'V_꼽K6` 2n).'`ln6 {m;jQ1:(%@a.QHBB+@sAz %KXNH>UTU^ŚUV]~ Հ "qG4^Ca2hxW NHB:H!Y@/Xx!,|t!cD cX!t 2B f*NBXbty|>T@oH+ hR8jsp0(a*:kHR)ALЃ[r+H`$ JPi$,(H r@`'âFo1GwjATNA(6>.lP(Zj{arKA֒T)M8vKah>ÁSh ,!K# aT(QID!n>eT4`^ TQO!VXšbPz#>ڒSJzءhڮ}iډSܢA2bH̀dp3Y$۔G{7_}J`hVC(4КrD )к6vA# Vz*>LN"`"xO*Y > zmʽV>FJX0:͹FǾ:l~F;mpC7\uI*>aǞxi4kJ@0."[x<X uGk>a2IC0E>r@~πZ|YK[B]tkv `5|!`VE9 I'V&+D EX&g%`G @V!#:&!_($8 8+4] EutSc8F< p+u!!1gEF6`!C>šG,HA  P|B!=kGD 0R9Pe,e9˫HG(pQ&@p|7Ln|dJ},Sx[6*eo|;ߨ܀d`uj("04"5hƅtWve T .u.ۂDA1[˕/~T<7i xmvk$#`hd܀^e=<M NW:}q*5FNn9ǜ |qf6RУ6((r5v#d Gt k!\%;BrT`0#9a͟;<-08 K2mJ$gR` "Z6u2 zƁ >p`! ۟xTNa/ @vB6R~uއ HPtT$3))&i&`[ꍴ7kM=-Ӊ{ERƧRe[b\ )e"jti/~BYA ԠvyJ zL2LX1tЃ@?qNOVc+a-"R'Aþ|B7_*@O/acC+';D$OM$%F 8]@egiBdė`NDɶ@h$U:p8Z1iz 0^x`8?z|Nz/@v8"doGRuD" X&vĈh#q(1A!VN AZ!WFq hpS*y ڀ5@p!Hh H$TU X 4p- Єg8j`}=c:3# hRSh0P\`XB8@P6(]`B->UY蝅a Y@HФ #< ?U ?:A|8G@ėh)CA< 0;x;PYEp C b@x`MH"0: ܽK"DftƬx?K-X>SM8Cȁ mD"X9KpXlT9nk+HHWL4@*`'ȃ &pD\ŏP |<?A9PODTˬz[^K!=E{ƤTJ0z ShC90ܐCƳˀM"3PUh3G.$LƸG&L%IPh #`DS7 H`t'Fs1 L|؁ pp  <DX:)eb)Nm@iDFIaƥdNt6X0"]Χ#/PH2OPhlu! ҅2y6 'EXEU \0AP@'{ TTGt9AUHz u0P0 \cӝR0>4CCHX+ xTY0;6 6RxqOU 7\G"z H7< HR0tdlcТX#XȻ  TEb C *8 x= Џ81K$ 5x`̃hLVkkௗEV`il=DeD ֧3H"!&S>m| N!|P90;P0< 0 &`H|`W])'ɯq @-iPnX D?iP ,{0MxPp:p0#;Dqp@8 "kS8̽}B`֠ X@X* <PR; 1δy㙉HO(p! h8 TU[ (`   xx`5iQCX9)nP=s\7]3K"A @{鸁x?Ĉ-Z"&" I) T*RwKʜR L(DZ]0pDBiyʚ!~ ;Siީ((p؁Hlyn]e#Z`s)Xh00eҙs -Ìh ϩiA)[Pٌ2yɽ\;@P` (X2y d){k%0D]Ib㏯l P %BmHf])"d5@vB -kۢjך'xp ?ѹm"Qǐs/` ^Ĩ8"2 yZNI6"5e{/@3Xdm-2gFf/5 زc cVgtPVf w6o)O[|dg}-|ީvhFhZgnN:膆h2"ƫ֠Y%i6鴹>iX*v|ٕUzi.晶ii j@i16jiz>j)vj~iꩶH꩎V 6f.N^VVfil~ hkľf&ǾÖVllо&|ӦVmc ֆHN ٶmnlHmf%n)FuNnGnnnhnnn69^m6 VlonNVwKinowon'O p&oNwp\F 1p >oqvGo ?BNpzqpq +p 7wr.%)$gp%Pk*o7)q*6m~/','s6)OsG601sY2s';5r>GVUsVz[']uK`'F7b7z"eWduevYPvv~_l?k_uo1inw1Z?~ufss)"wbzaGozw uw ~7'Yt8 wwAxR7ogGxxޖ Ov7߉$_y~W_tx?vy2yߗOygW{Ai/Ǘ?z{iy6zXByzX./w7{{.߅vi~Ix{{{{Mx?|w yozh|ߊO{Ǡ'|||}ӯҗyiGtʇ}ٯI}_܏oW|gWm{7}_?m_{}W'm7{zğ|Ow|Si?~}}w_}i}I,h „ 2l!Ĉ'Rh"ƌ!!@G,i$ʉ2JL%̘2gҬ 6wʖ?-j(҄?L)ԁARj*V:rrװbǒֲje-ܸWUܰV.^`&h0ĊҵÐ'Sxp.%kk㻟GcL4ꢗnдز]m;!ۺwO\-w7ظmȗbG}iEM)()؍w4vl"pwM4m5046H3(㎃V4$7cݮk=P-D@L;0 7<[\x!O),{?$&wޫ2 ì0tӰ>Y" @ˈb@ ; .pTxx`SSY7LKèEbh! ,(C@A1$РÆJx %nqG?.txd  \YI= K[rߎxc =XG ;d1  oUPD#!nlH`jUgW(4ZҮ¡RvXI7L99ca)brCZ.sIfַ͌ $@yo߆vlxn7=Tk/Ҹ!'0\:83lFp_Q|U=D~FDD7yJn3lyF .DB ЌW/A hx jT@ vYq:P4R@IO/TzɧWU]R|qBPBG 7ԐAFDC:P@! ,! ,(C@HȐ!B JlH %hH44" 0 @/d,xf&6ܷt"Ԡc1v$^ z4cǎ t۷߾耡h(+;ZpđfĤ-Spk?5.iT+׭ /"m5`2ATvS T6>*pd%P&T΂iZ,'5uus~ZrB9+5y3f_=Gd7`p`8C:( L`c~XX- P`"cGi(yAktXPm؅ X1 c 64?|G/> Ѣԧ՛7=y@3DX"$H`vtQP%$SSAP*Rex!! , !P KX@`g6,Q! , (@FAcP@ HaĂ%ba;~9ÅSr2 0I{ w4Е[9p0y6vX'=Dǵ 7jqfMS;)sF" Gw?9LJ  ɩcj<] 2,FӴ@hnAP;6P6QTӤ.Eh)X rck&)ݘiz#\( 9t4JŸ&؀ʼn ) #c 4;8Z# sw7PJ)Pt`9Vs C 8$l2Vt  7P7p:@1C|A !IG9@  $tW^A ї (IIt4Q9P@! ,&b.h@R&0 ! ,.,H*\ȰÇ#JHŋeШǏ CII v<ɲ˗0cQ͚5eɳϙ8oѣHw 4ӧPJtJXjEM jJY"|ZK^j^ʮ߿R3Xnz"`@ǘ3C="G K nLjd+Ѐg>1MIn`;p% HB$ cKސÃoÆ 1Oa(1 'Ps @x;x52pC| EYA%ܐr C @  ttt 030 Jpx&1Pƅ{(^EA ߰/`p3T p 7`ZFY :4L4 75h!C l3`sȱ l#e/pp3XS asK.HZY4 @ )$p.hְ*U=3;36u3 +鄁RB2(X3STCM(A3PHV@TB/A[PQ&P 8u @5re ?q` X)C0B'^:3K01-2Y8Bja S(F8-14š(f@)HXЀb 6P"C0D]og0?!.BxG8wÚ@'s +tM0@IB~ N#aw ,܀c  p:h>+li{0y -jZCDY\^ jhq]F_ \X @qi2xׁ]`;fyv1")| S S(2` S` KàCfCB9t@ g*Lb@j aoB$1v Ar'a8p C`h0\`?@@I.K;8aˁDg~\ЃFP,@c@u=jvu6i/`'S)t@ @0slMwfv  :&lm LoS 7 -UW B ah S@ B BQP/ > E D r@+@$>wP]ؗApF0Gw^'k~i=pv˗Nyp)w4w}lPvsU jU&vFC/ЀgM<0sNFci u9000 `;{`ʶ` `aa $f ` `b"&&7 6WDI  &e@ p0 b"pGKvGS` +` X#e]V5 s$ jNj:@iwU0'1Rgj! h_<1uo%}~`.f (D.iy h$`j$@xp Ր @ VT%QlKB`QE:`CIy) EwL >Q pB0 [PBPB%>z>&A5tz&OU$<A;@(W,phy20ictk.'$?5||0it% ?$̧4Cg:'+Aq0P@ 7#wxf!%c<*1 </WllK@ h !0`CM N S?>ꕕW zX4]<'3v>?>4烇%i&5 34LjآR/z3>c@ 3=4A$ 'X%+nd6n&Y6'" yz3}2o66Cs2c5A)@2C]91Н1JWJ쑪2@A.W*Y#82pz='q 0@ &h2 L eyZ;=#ʜP> RHU1Y3p/Zc2$ԣ'8P R! ,! ,! ,! ,! ,! ,P c(!ÄJtX!ʼn ^8#G=b4("%LdD%V|L,]\$6M&Dq`@! ,! ,! ,! ,! ,! ,cƐGÆ8a@/DDFBХCn]; `p˗ @(FPLw4(ϟQchΣTPF!M`SJ#Ӭ[2uVkԩU+[? ѠKA=yɣwAW<4L AqЌ! ,! ,! ,! ,! ,! ,P c(!ÄJtX!ʼn ^8#G=b4("%LdD%V|L,]\$6M&Dq`@! ,! ,! ,! ,! ,! ,cƐGÆ8a@/DDFBХCn]; `p˗ @(FPLw4(ϟQchΣTPF!M`SJ#Ӭ[2uVkԩU+[? ѠKA=yɣwAW<4L AqЌ! ,! ,! ,! ,! ,! , c1&4x {1q"Ç!``@ f؃uҩB$%nMHXF ; @oQZ$ :$ ϟI !T4enHWzJ S)1WvZw4е-Bi  zm[@0UfXBua( *Re܈ݴr P5K/eA %Ѫ"ŭ@j0e #A5z[44 %`nw !;У! ,(c`"PF {(B30"X VЩLg/8fQ" n)-8pxBl@ "}eۺ4ڀX=" K#NۊRimXSmdX+@-\>m#Nqeoׯ.E!veSJaE^ 7i[M Nrvj' 3P48ڿ}P5ză ;*0hS`A49 Q }``TaRd΍a>F sZHc ܩ 8.5k9Kv uXp۸s pqӾ 7pg?H AO)=^ ,9jh%ZP L  K4'o^wycBTI1FУpʄ;pď?0 ! ,! ,(@FcP A% BQGw8(1b 0@Ï()Q.]:t-[`r`GǓ=CG:vqG=60F\߀ X0I`/ -kF gZ]sNp HKg5xM@@9HQ XE$F[!_ * fA;qѓ6@rJ0hrZ@(9;@HPBF"Vl(À p!(wDд]tօzC`A%$#@JPӡD*BV۷=lja% nE7*eHLYbՠF)k@عgİ62~V{cC Cwqc@nc\ qtٚZKcrTTbM  O7li}hPy;ŠMc˽ j $G! ,(!=~$D(Pq008Q"FG=D[.]:u6db =Gf 2b4Q"O? yn(C  H0t}M)]ب 0ԟ٬2&RԺRԝPG< 2*)NZ 1{.tb @Y'g vlIPtCB'A%DQ`fMyocɛ>O.]ވР np! ,(PF ǏE e8P#lj*(ǎ֡KcX92鏈1d؁M;n4lZH%"4pPQ P(Q"lJ篪%0 a]֬pX^VEeVU Ӓ:VtɀrKOtJ fV`4p5 pKZ4vmn{9`mXph9MZv* X @]͸U8%2i|Ĝpf.PqƬnϞ={sDv0&JPjCz7dQQ`P7;OYt ; Ӊ% =8O;?Hb[HR&)P@! ,",="!P ) (Q@8`(0 ;vt(ѭ;9"0p8sb #%mc֠}!GmRȀŒ[I)WmK4`p ZZs* tasV>^H[wB vM{wS+tQ˚7†S@PU-[tE8A8aG: 78 ҥ] ab 9g7JQB9+{u%hwO ,G8! ,#8PF p#"V@3F 5@z%애R8LXi{ 0QћjsZxC[.o^ m B]F doP!HVDZzuD b0# >*ePW%Xq`nYh\+p1XQTx ae0\fD(@ ԅB/"bQcXBryD |(kB).Eώ[hA1Jp7У0@sa;'o$4Ə[OϜ5?۠ub|cG! ,CH DÆ у"ň QA @@e2 c`l9tq0aC <ҡ[t_+ĨыZ5^j@gHPo 5ϟ^(pQkpãt;;tP7LA0 T|e\ s٬^oh%^pHvr@V8(ACkR |mzI=ܥqdz CPX`#ؠC HF%T@(X| \qF2C#φSC}&P 1PЀ'hhZȓ@! ,Q @@@! ,O(C@\(D2у" @#Bp ;vJЭ I0h̿@F~mvM}P6GC0&P+OZU0Np0 ˆ[/8,3Wbɚ)PFM\g1PƄ B}/p])pQfi{6kU?[;DԢIa 6xƎ̓]eG/DLfH>8/)0 ! ,! ,! ,UH*\ȰÇ#JHŋ3&Ǐ CI$H2J\i˗0cʜ0e 8Yɳϟ@wq͕**]ʴS 6EJիX E!ќIKC-NPi۷X7@qkUxن) Lأ=,̸c~ ˎ9V'#6I %$a2o+tpL1:͊%vxB' Bsr, "D & pVhp d _1 BqC2\%q#}1@C}$Y$@D(@ @r&At\gMt( /€Hu冣@;> 6 xy꽈#8n @Rp[A=h8?h#LJ$Vh*ܰ7e *䐄 5)+pA9<[1@ |YgչBɥ  %P P j 0 =C Aat*4j&j8pJ\9 >?$oڗ@ĠA '*BBF"r7؛b L6( kC )諁,k/ |*0ˆOTA$ l`Cx`#x0 81 М0B Ll# @9_B J, 1DjlG] t}QxtYʸ垛nvB 8X>E(屰!&$'#PNJ"La:)CPC&AP pbQ~ &Aʰ`@CA0)p? A !A~siADA0>K =p  X@[Gn< R?  G3'p-\BWգE(RQ D+H8L (dMD 3`x*pF )f PaE%@\$!P4ЂLr`ákD \` l w0/@B#Iak`4 wȃ!Ѓ +wd`0ajЈ7|9C\`wxRwx>14j`R<F)XIql b`#61(Hj8Ԣ&`!(" :Eΐ) ha @lPEА,  &L!.%PA*@LODЂp (44ܯ 3' w0B 4H` +<Q%\<0Uz? wCi+4{Vr , V4Ap5@ p.;@)[.f3zJg ؁H*|R ($PF=(LHq *ΐ;oab`,@ $`YDa) Hp7s 'tB:a j l&Tj %XBa + j @*,`?+cN2&98XJֻ7; xaЕȹ"dˈL\"*rTL` @C61 X¸JMD!F!HB E0 6@xn*8bhF 8b "PR G\p4 )#ǰl&.n`i. Zn` .V *& <֒b= @A k*t,Wy` 7ھRh@wt-˓5rCrH 4D h,b-*"] `Ȅ*Z X")8a B*6 ;L` (,|@f2  9@LS@ V41@ !l~8 {3HF8BݿH0 $4Lz5r0# w@Y Ґ j@wJ9 ``hBb Ѓi˿+҂9L!f(&0Lbd6)L`r[Ё,d !H)s|daXB` ;Br8|b= 4DF)0 iFpAV`kZ5)2a3A@dj/oU`4!0M@!w=Ts4M`#05$ c0LvX/@3`C pcT1hT  $-z0Zp!20tp"_#Cs/ 2 q1sStqn(i0F%-SCA _qA3MU4x5c0iF6R4$@`'l346pKwAd!' f]M7)`[$"W0WA 8!Y4`2`+XP+e&h2 .H( %Z$ 3 !!^/" #pe nZ7,q#c@ 23Yp$x8)u9PJX#? Xx3#*~9-uݱ,T(+ QO/8q7 )NAry;˹) ! ,)z !*\ȰÇ0#ŋ4`ȑazlHɓJlH`(7Iᇚ&a)*x2߿/kދ8f͝~Zh1! ,! ,! ,Cw\Ԁb@c9zMҤiF2T(0땀xcǍ'=hD<_!tÏRO))vLFYtT0 rօ >c 7l :v\ vbw-ߥcp(sLSs ++eԤi C 0QηT: h >4opK^Rd-A 3w ! ,!A(=@xP)DHx#ưu$t@ 6`XD =r8CP0x!@F"ȀAο@ !1d숡BA@nA O/PaH rĎ:઀f> B7 )(r>;+ z-.TuX+uH:Bn=u.y9% qr=ġe֚;׬] %$h@ Ԩdš5F;~P P2 #%E^/'o! ,! ,HD?Qˉ#vH1ELH < q/Jĸc!P4d 0N(Qk !2rгEgCIh !F F'Jсn.  =Ē-kҵT4s5:KNPT%DHC%,hEk$.M6lfD0FYc! \É4@P:3&th]Sy_Q K! &}= F! ,kGXC2H:CA/JD`D J"4pC@1nĈQF;^h- ¸1(Q@[܀u1t8~?nt`/0ppV\>H 9V@АE)+o+~E`3jl& H!ZQK[/ {9ꚴB5]tԦ[Xշ_Z \y  [)c(ZAqPA*Oq0T %@ ) C 0˃ R 4-  t@J2Th *C'(A! ,! ,1+z< )h"2j@AF :zP $PƁ1<(3<(SS(= dH4f%p@S C+bZBk:bDo:,8! r?vRdD+BHP'݇V-[Bf1߬{俁ba20 ozG9ځ z`rN 2ٺSvC=Gilhrsiߗ6hfԯS t}{BBGAG:`VxؐCRq.pڰ#Y+ݕ7a 40XrBʠi;z*QJ{[Y%`X`iD~8` 0@Cށ7gy! ,! ,PB z)V!CD)hDp`"҈QB7hpУeKE p񂤌? Ǔ'7bx(Q=y HdKj,`Cr D,8C)S,JcZ$lFڵo]`%:Ҥ V, ~0D2+S`RcP6n*8 F{aSEr57!|aG_]ָot\T}.]\3BY}|_D:8PUVeՖ@﹅Y 1".Ağ\1AL &paBeb=b ! ,! ,HP 5B2VQI%: c0p" T1F :nL(M85M1PF ^РQ)UHFȁ?`zD@thhmiZ1W  jd?bA5| /d`ѣ\^V춱@Mr(ȏkI,A 1nDF€ы>C5۟bѢ@A֭]@0F %b3Rt(z?2Ro*u) r`dg[jk#'j4Ja0j S2ͥѺ; L# :R׶wʺ*@3ݪLizuԀZ쫬WgGj uL,#謕m `y%gb`Xl d]V:+"8 !g5$f3,W0ЀrcˀՕ t%* J@4Ajp:(6!9@+ Vp})` n@* 6m`@j * ji Ġ9c@+Ẍ́oc` X@4(4։)] ~% MpI ^\ X`4X ;@C tpM4@7?T48PC,PtGa E~4 g;P=@7ɰ Y2;2292A 7v0$ WwT7 FB`1 ?R~!КI pL ^* pq0>L Kv8 bS(zp;0ʩpp:+'DS&;뜓5j}f8j|@s\VP 4)(0CT?$SQ@%٠ p#I p ps?p+7C([6 Bt;K&ݣP#Ҋ$d5>WPD !%X$ 1y*O"J-E/"55ɒ4%@GCst[6))xa(VHD(Ь:!vD@BICY*8~Ig4p9W-RI5KD@T40OX.` cP:5М!(-gj IlV4Qw08,o8IH @l5ml8?:ˌt#58' Yp@lV'0}H74KӗV HW؍7smld3V;zoeݠֶt֦"pRN49g: `w+=Pْ,ĸK\i/9NĈ4@vGsF1*V!Mʉ/'*8|=E76$E'$`47@% z7j(Tsl6cIM1`N9:jEw7 ^a\K!s!.4suv68u!G6} \w.sN2\FZTN}2;!19+4%)fvHr&*@gO0`Cm!n>붮bl`v2"sHn4%#0Ij+2"gֆT/0`'90y(7^NJC06Wz2U-nV-@eTVX{8n8(}(`MNnOw o_"t'2J lIӦrIw!҇wpt`js*sM<ߟ&zݖo-Nf$0I*e+^0&7|I^P|F.ܚy#2OE0BS!b#m6c7^|fr_8nV&P{5n͆ͳ;,l}4V0GF9Ff6fwSd4`2!,,/OG>"^#"i8 ~8dS8eFE;I$ 4DC'^x, ТZ9ŁyY24%,p5AB2  "@pL( 0Hc )@DYC *(Q#:6Qd2dŁFT>&* 2hШJV]~VXe͞EVRfLlQ7*"/)E&P\uO>h AIA`ah-(z(E/bFM# H(Pb / b`CXX@Ṛ艁x[n#R" `1$ʍcF7R,Sr*8b'HN( @r&! CB!l@ʨDLDDS$p-_1FgF03fX1*L;r !(bCFZH1e\eG4G@N8"UbA#(G.$(> A90RT?@Q\4:h$7\OlD ,UNQ>…4TJhU:S?TAbkf3hȁj%4IGHl8ǚoVap`80(j<谪 |շ_~7``F8a2 ,(RRʯT2)QH \01H.Za.b[$MRi ZpDPb KC ns@0jbQEo{7vC  ~FҐGBjmG*{> aTsCBpд?!81&@fȆFΑ@A ø%u@@Hw>p،KT "rh1EB+&J#H@b#*9K83h1K{/aHN> $J(X` .2+xp®.@0PH0H J`HwNBTuPtʭ`4VHk!(À QK6ER:PLoG:юuG>EH(=Ftz:`[B=H&@FZOL]wb P2\@w2Ҁ80w@ TAnXԖ5  f B0,jk0 `w j`\A V oZV@'9Bdrj /;U+x0,A<0 ZFw VQjԏiHEJ #@2/fȅ$G `/@&(Ҽ(/ ]Er1l(Afb]i+iPp22@ $8J5-<lRШ]q }`@#V(GM,X@ j((2FiU@*P C g(8="[(G2P(Q:B Ozb*eB7.%@0H\6-!貅6e 8#~p2X" !zY0@$(:B 29irp@m:Y&>t@ v̨WP 0O<2uQo@ pMLUJep8CV F)8:C24бŒmp3 E1El>̠H 'f~c`@ 5A@hq@E2wvn=hBW"mHGNVP䧵8E4 |<@nd`X2^ pYr@$2h,U)Fkjx(6 (>)^@EF 9A"( I(xhp`@j**& `@zb|0pJg8#@`(1Pj .TЛyȁw@w+h$N"&@VpI! NI4 0\DdcOq@԰)7vi 0@$E@1E 6 ]t :mp>{y*ZA*u8AOhb+48;23ND5O` yU@P|+y3$0 V@.08>Yz+_&VOmL? bP@>܇S2$]׆fP~$< n' o ><#[8ctؐ>8(S , ;;@r7 L#: A(۝3 c?q{ !̲S=39h #:1@?@)$-A@ 8 A:? C=I[ X3 hp?50MG T庖&<~}N, 1Ȑu D3 :JP X4tȁ;JPRzPp ʤ J"8FM| l˜P8Hv@jҨ (=k*@AȒqXbAgH GXA.d`%^ ؀,ӝqjmэ)yb8Ё89_1HA NBE/.&ŀP8l=%.op"! ,! ,$#(l!EhP"FJ&*PXb&H^,!b qpЀAb8@:NqDe@↊'J(US(9db =Q34irnu~Ƞ6hcG1p!@2 >& 4Ɔ HpxO2?P0EN8!)%vlrZOlCSٳgմ4pMZ`* HM ݅5'w\G3P :05L#Gg)-(58pD< .7BLM+mXC~&P1iTs18 38EIxB0AS05pt@d7M8P& ` e?xP@5YEqKҋ.B(f&P|Fe Di8P}f&! ,08 2d1xHP ^` 8P@HuPbT 1P ,AB? G;hȠS@~׿}w҄(;`̀ ]ͺ(6}RNO)9bʕ%&R& sԦk-ߣ;dr'X 6~̂ft}{#gN S[O&XblurDc{o[(E3-tRmodX) RU[K5Q ^(ѣŠe:hdPAK@FdPA&@BC#! ,:Xb@? ,gEb(!c @8(0`@d@a 'bСBG=4ԤHS䠸c@kP@2&8qCO^2bą p'߾ p hѣH}:E4S猚ues]-sXͫת 8?ū0Mq+0g4pӻf2h^"cAݞR!7zB /-l2vAC=yA[yĮel(kS܄D@ @*dEƀC;P! ,CCd!!hBxÈ4!cpHQ2nA∦/CA!J'6c~P!2~@kՊypزG˞MxPBC NǕF'.H` D2ν ؆ 0 ׉ $P]>N~t^ugx@+otPpj/ M T ,@`EHB@ ,P@`[8g=Tk,I;ꬳ::6D cAϕX@T`. -쳏?s ȅ)"C?l˖])}'6|'^:j矋^)yB):hJ@eoʥ>Zi%WjĂhf(Hr)Ds.Aq8A,!8ȢHL0CF\AXZ1 4$|O cp j2 # f'!#ХX,*lC, <4aWI 0S-  6p A 4@<W, 5A =PMue"(A Rgh#6тTm%L+\],f x: `&vB !7(x9@v(,Lb@ -" #Hъ%p`%(p W0½ jhV Mp XRz\`-@,@&접7@JyY^N0\`2h'A(@i|CaiTDz(`MFd&R9Ђ C<^3Y0`*>TBEPL0&-pr4"LSȅ4P_@(@ xoʗGy@C! w/=Aho^z@RA{Q pBB `#D k5B!K}h5:h5|) lAc$OBn:jAƜFt jhDQ/]Rj5ЈF< mp<U@z >) sL #lA{BPf` Ot,y?A0#!9ȄQlL,PfxD%! QEp G }6p܁sy  xA˯$t,X[=".8AK=x ,hH  Ұ7# J~$! 2- x+\.PGGV 02WlUc*fX)# "0/ @ /p(7@89ghI0 f/@(> +5la>y6X!!+@q.q&F;Wd]2J$ 7pNo6C'C*'^@e?!p526t`h/#0Q"#zR" rbR%"!##11q -o!'$OR(wᄥñQaq7P1=e %|:5A a"!bG% a$`ĘnrP" 0 @%\AJX%*TR"! #ua )fh 1a$bu=&YH"y%RҒ.H/ x{H0a"&e2(aW&be.Zii::9$B)q4lA)z4H5] sywy'5 !jy iK)%ј!00{ ٙq 院9鎦)! ,! ,! ,! ,H0@ @&$&϶I(C28Q@BYB P(GzpHPF8v! HЧ?w4N:u̕X)g0JY@XĎ;~@o?ڡ ߿zjʠj3l k8/A n %Gs #^QƍA0׷,+҂|Cn Cݤ݅cցuU @7=vdRk]ޕ6Ɩ={CϯGС#y๓B/8*  2B\:=(W%@C 7pˆJ1x Ê1HZ 2JT[(*! ,Hp*\\V+X 7  %]c J@L %J0HD PPG 8Q HK(`fhjQۺNa Jx:(Ƕ=`CQ%dP߾=+@`BG"wk @iE//IaX}37 ( mYo :othz+`f | ړ0Cs&DK'7,pډ+dڹ $CFR1me{S1k[C 1 G@#b;rN f0x a8`b; &P^ (CyPeݸ,9X%XБG%C m! ,! ,! ,!A*PF`=v\(F8t`@RX1JPp̝u8)0 1aѣV08XbG2v 2ڿ}XB  nlpaCݗtirhMjAsܤզiWUc`L@P0([=F-ԴzTq Xˡ@5sʁ UtڵYF n.ɩz̛ :C : Vv)~uY k~;$ X }8D , )t@/EJ 2Dae@ z $ء! ,  ZKpB08@ I sXPS Aph8d!A7b@? Ӣ%߿o g ;o_ LHA*dPx|6 `.s\ͷS; ۆQ+ع2ZQK} oJ`@z@iHS6@SE/MGJD;@7(¹MȬӘk*]rb9̎VhP}VYpT@ pS??rfR1ĠZ?#;3O4 @' Z,X ĸPB|Z>?Í XPGHCgA7TVbA! ,H8W $xm@B d \)hC7 Tԁ@bRA$7,X PC4P;tP 8416ݱ@;uҲCWe+ǀf`dĈo߿Iƀ+ĸ2?"mpX2СG~;[E(llǓH ,kHS{qI $,Gd0iy-Rߎ\X۰=n#2.Pfg.BC.9: XcAG^z_J5dBO;t(PW`s% ( @%5X;H# \-DBr!DB 9c`0 iHԋ! ,! ,! ,! ,! ,! ,HpA**`2Ko C- p2J(Rd 4v8`=~c0<&eCd'Q;uԱƠgŕ1TPYhѺ+#B1nx*g¦Y+T5l pIhPP )a€ptgx LDSJ`p7hCзhS(1"P^ 7 `=1(Dt8DD<Qߑ])BprAXa5DShD `E aiAD 4p!` C TPu(u Dpk3[x Z<3;NR&ZXc6 ( (&.E*_=຃aĖA&A)+a@ F+-! , H &@ !lzN$$+& xlg qj`C;0H C (cG2 $ʠ{8JP2bPn:1*(W2(Ѡ(@oHiI ?jzB *CAU7c?((F+A?-쳏?s wgi~qC?$P枈_pip9y&j)yP ZgwEw-B&p"(Cu:(j* ꩝"t]̆¹e`R,b)(dv ,b Y:C8+c dup W! ,5H*\ȰÇ#JHŋȱǏ CII%8ɲ˗0cʜ)rG'hɳϟ@JѣH &ҘJJ&UG0I@8Jٳ2``XDʝk] lKZ8CPC&P9Le*cLi':)hs 'N!#!OQs0E==9EË/ ,R={1v+~7ؑ_@ "O$|ݰC 5 6ނ U !PB 2PH!A+EA~$ah W"vE<C8(t@B ? d ')A&ZTC)(rCH.x"2lPn$ P#3Dp- @" 8cM4@q/פ00Pp :Ҙ3IT5R 1)B7YB * X$pX0(C: 9 p5D@.8ҋ3 D:dj :vr@L9ZcE5DA/p#L;85@(H#6xMϰ v}* pP ;aЀR(N(ނ,h"rȡD |˵B߆kF22st _;D_PO C'  +,b'\'iCGghȈA zp)p p@(`MЁ,SVЁ`P 07th(aDd'P (|1Q0ʰ|2(G0ƀ :AGHh8/|!z/~A@@bL80 ku l(A6=Ќ6A`"B'ЀA  Ap^ ts \!p g0@(ArD?C. @0@O[h`sTz^T/A,' t 5Phz t@WhJX@X7?&r'~Sέ.GTD A3Tx: 4 8 = Az pP9hFrxs%=h.?&f  ]4(/a@5~ a# $+$ Ԁ 2h8 9x 6; P`8O*,P1l>:p8/  ._h DQ8`YDGDFA;thTP d1Tz3 48u N(ˍЁsa X t7 "0]PMw%PA>`) H'0,UrH$LLFJD1؅;X4>k7r |4P *p`p1o:27p2^@ NA(84tXC;"1Wtd븄؃Xc| 2 E@ z%<ָ*lpIsF:ցflYm1o;` %@8M)qh1Hp#ƹ {P&7c0 Y P@ `:z-=Dր ' P0 ։ Fzȍ0 P&͐p ap ]pp(:@VѰ  ̢`a`chPR*0  Pe"@p P!9 M*À   p [fV*{Z lo6]1  Z@ P !a"@/Pxf9 p Pp 0wcPԠ* 0R p Uq+ m; p. j G+8 %pqZ@2tǰ=b6F"@R OL$@ xzf y" -( 2 @ 3 P ZJp PϠ5p րp?Ԁ `=g0 p  (T  p aZs%@g07 yEP P?0 ` 0P 7 Ni (r " %` Т^Ua 0mp p ߆;2 % T MrЊ gKZ{BQ?VI8"rIX%ZP?)eHJ t̘7:zPN@Z`1p0C<J@Zq:AqE V@V$P%GЯJ;`-1& 9_w:D@1)(OP6io-* a fO@ږR;Pp!PFbG F?UVPucbB-DzrP+7tmڭ 7 *8hJ\ `;'e`\ n1Ij.zP;`(L<=Ppn0 |=jBdeKa^R#"b,PJkA"@e04p $@GhFBDG2Mѐ7=1%a0pp[߭@tGds4$pp]H2]A$Ft%FS$;`O $i=@fRV !K/#:BR4KWN0 B"4AfT.%&`7"pH "0fq&_?ʒDA*]bHAD^GiKGj."vK?Ԓ @:p++C9 *;h"$BRwbPs#DIsEdP6b8B%4u5,0,?*$9a1(N1M5 NuO'?+0e 0pƯܿ@ \ lh-t,TXAzo8K)O*Swr #U]NQt'(ADpLvra*_O#X aO:5F}/L-:!F 2b 7`H1!'T! mC+lܰQB^5e(QD)|, !Dp" %H"(\arJDYNA$$ɿc0 !5"pGz^ˆ65pB )xhbH``hB@k#p }Rؼ :5DOgzq}'~x`ww:QLIeU☠c#&ReU`VH %vACT|`#R>iyRfY%|\FJPA3d TbE V4`@ Puw8UA":!i0 Ј+xwx G?wH ސFt1R`\@?4,|!p&я>qFlyQHQ`U lʀ| Sp B j3D" 0)UTB " m,Jdg-( T 8"9H-(85B oPj#@#A%( /(G P |Al> z4@;Ls L[`2SL! gtSS"OJ `8Ѓ2" " M@`J ;ԠCBy\`Dc J +ܓz0@ c\p! FXHWhA0PAVo'_*՝ ǃ+>\>~{h~ M@k is顷XT2/e Ny.KҖ@!H\  ȈȀ 6s  ݀ 0g1'` ('{8 _1Xܟ c LA"aY B j*)H 8pCPP {9pްP4ЁC/Y/@ ȁ@(K> Ilz"8B`Qi Hۋ!& { # (ňs@?+X ܩr4GѐC'Qؐ ;F)̸@0`( P b{4 r`} AP#ѩ_OLPR(8 S:ǒ4=ZIG?5 PFhɜIJdDʤTʥ /B,`~ȩSQ !C׫Y QVҞVJN_:mӫsPhI/ڛ|T(9StPRT(ϧtCӧpA _! ,( NE(G  HQ`I榕(Ah c` 1dPR4b֭Sa d1`ݿGup1JhQ(N}-=I,0J>~(@5smAֿp2PB n 7a 86s{YW9 72N:ƍe~M/` h\$j@JD&GQIW,K UQ 4 dYdN8P@! ,AI@ C%1JQB8H0*!%(-V0uC'`TAAο@ !`Ǎ0rAξO9C@;0zq#`l@(!&MŽ-[;ҕJ ]b=!`ۯǨhL?{@xY9ld1عfs!ڶj]U4w`&]J2 TC+EMܞ=QFXDm(1q>č ',T(NpC8z/Ѡ} %N?~$@@! ,(%$-v 2Jl A!A00q %nq]`bD1VQl !D8pPOjI a81T>(E'BS,UX'r6i6е{6hxSٰhd-Y*1vӦ#&-2UF'H 9e |u$H@ᶬ37?腂 ZE[#wի:2芃НZ8'A12kB^2@ NqlpS*Tr(q`Ό4fh2_  (Q! ,! ,! ,(P(CˏV8 HC2J8 #F HP@1JĐQJVXԥH)cȘ1 @:\n$EڱĎ;v0o(0`pX C yYߴ&\lþh(YҢM}n(Mh )iRAѓFY3cP{ 쳘&x̃^vhF?Z >Νwd7܁c%"B+`s=UȡT(p'4 ` P5ؑ@! ,aEG( Cexp"-0AKĀ e~bu.%d(!&SSjQGe)oRJčǵ:(C9Z2u Vr(`mXR58M鱻ڧ$pL9vU#4Yk ‡ 8y\Xn=Q`uh bȸ Aʒ.H;~ɓ2Ѡ6usR*Tꥈf4?~;wc~=Ā! ,! ,! ,! ,! ,! ,(A3:P㇖:v HQ@ ͞p#F,HbE7J8rCtJ&18D 8(AH+c 0PHbh ߺ;dxAAcX`%bvֹ`pnc8Ay0=r-A7j#%Y1Cg̰;AG 7reIN]9QUkuI("LT>FIf-D$P! ,! ,%(+:N(A!$(K(1(  ( KȐc™U4$!B-V~*fÙHe*5 8LG?qǍ76Ɛᵇz@}p[VGF\KpP@10PƎ (Poaa=B)hC rL ͡(rd7aJQhP]hJܭ2˕`MGҝ ۆqhP:Mm5l0fVbNOM8A VUm\M&e1@N( @N)Vȑj-w^Aц7#  43M4@A3֜"L/*"L0'@A)P@F"M4h]uX[8CMT_F(I 8P@! ,!2zqMP0<(C 1pTA H@E8J܁#VnԥÎ0c P ml# PIQsbCiDGv?kz Wk HP@ ݩ!b=~(tPl%>~PK*Ɓɗh@> 1S_ ! ,$( LR" Z?tAP (!20 %( !2J܀]X$8`(A49HǴ8JL3 xo}P`)iA GWԁ yL &Yq֕bɺ.VЕNQ†F[4qF,.Éc[Z P@wU\`IKG;x,uR;Eu M3"mppJsJL;8 f=Z#&Û2M]Q@ARJB_ 0.Ƞ@eHu8P@! ,! ,,-H*\ȰÇ#JHŋ)@G%0Iɓ(S4X :N(!#ʛ8s%nx dϣH*]J kJeJիHwyךXÊKV"1~Y۷bMCZxՙUQL]5̸c?]+˃!J&ϠxjӨYq !4pKLW$qa`nq<8C@$Cj bM*R#γ; WZB~#Kx iTF퐖 8@ *x] 7@ ŀ ;wP ` \-\ u`_]X@6 EP=@ڈ_ I@eSb;P}6bPehWA8v9ȗDvP@!z2tb7JPSFhJ*C]4P5?UىwC4S@)Dp~u t@p)LJ @%xb ҄ڱk!A;40 @!3peKIN kl5 hb:&tbPb!Yksl3_X87~PX9uHT8 l"*r(Ўcl0-C"F1Hg̬rЃ:@ob䧉o!h`JQ`/:F0(vArh7qMXHF3p|JMAz(2q=8'K 8ţ@İFw@ @8pm|C CܠUpz kʨ e@=FSr8X `5 QЃfP됃10fLc؆(UHkPK!:0p9@ /1=F:(&59Qt?`+qg4ç" 4 @_P;H3рXAa$QR|+ffa聉ъ2=XR ^I9'$Gi+p&$pA $P؆nW,Vp+bd1ZhF x V0€㔬rS$)U1v(̬x21Ic%@zF Lt9I  .?b&$`ź&xOd!j4ьt t^stAe"bf\c zAl`E^SS Y +l=E%XG0$P`0c 1 wADąp@9%g pP =``TƛU5Qhb I}F5tE8Vo4Š(0 8C Zz߈@ ۀ2(͸x$@aA0ZI1A Û; : pIP B6j^`npl" Qr<e`۸Eh֙,g':m8 hN$Qm`@sn(ȣ @Cnܳ 0G3 6\@7} MT)4{ K0 ; I2#۠Fp j#Є/Bol.vKD ԳKaoA D+;1 "8G1:7H9́ ,ХFW1x@ aJ a3:p8JVr%Π RpGJpHJ?0+ce$#J%r  ((&\u/eWXz2r`!".(54 fe!@9'e"G@Pr6zp'@G =790%Ѐfl& n*1`"%P 45Pe?@Pt?`P? @Xtq'QdBPV"&*!.hX!1 94r!q#;] CVVB"P!506pBqkc'6 C0A1$V^)"Šr Py$ 3Q:Ba97NR4$') u4 wAr87#a+±%::!M Vx882AiD$4PB)Rg j P!q#HB"7 "`^!)&A4ҋ"?$tq И,Y%9% %6M Q#g2Ў *;0:* *0)+p*Y#0S-!ɜ7^PE  @ ӛ0Eț $ęR$鄯1,;b8<5@.A!5y Z_9`ّ$) :aJ$`P7sT 0A*ur"( 0  * xyP>P Hz-::;*9;¥ZR$C`<p1p(t4p!8`yPoAN`)Y7(cpZQ5Yz<qJy2W`(C0 0'ѝ  PH9K'Yə"Y Y"[P:KP >`+`:BY-@Y:1:"[ @h\E4`!8! 0WpA`FAM0$KkM%0MKMyPF A`N0Cp,A+[,бC@M<M0<[) # GwH O!6/jE9@  Fz p l SP fq EP 0  ' ;"1 /b q> P}'6+`nUp`t@0wPWwpocpW<y0)y`iAptp00wyGo ~@op<j`o #i`jmtphP Xn7`z` I@ B𷛐 * Q Z Ŋ Y S[   -00 0 Ժ: P I 9)D 8CopMp7p`@\wAR~:py</A` 6`kjl.@c c`HWC@ yAk i@;[̏` ~B` K3Ҡm":fk(A.|03 ` @Q Illq > gs '0 4,0! s0l0 B B [ Y@ L -2*M0}$o%@\K0=wF+ii`$'p` t0lFF,c@#oCi;.лIw0qӚP wEhƙh B sPϩ 0 `L '0>P [`>@ m5 Pv f`` `"`J<QؘO2Wwl: ŜtpF-[K.-jEm+0WA\."Y#0Ap>6pդz ZװN4 (5z9 h v p qк>0 q H* -P` B KfB @ ;Y :@In  9v@  Q $o WMp |!P |.pNkjHнmw(PqMApit`j)iN B8):*ͫ{g0Śg0Ԛsg`q0vs YE q9J s@ sh)shP h"h07mS4) )P@ 0NUW|6`PU) iMWP.WPW 7--U0 P t; ;?6Hp%Oqc17oӇ^`` R`0 0?L!/`dP`/?!Q]p<\O!p!Z.ty0y_+0~/) jPo7NZ9 7 Z #/M:Ҟ s:`+",Thq" Thb 8tAE0q# Cxh1gJ*) F:nLD$J!#И/7C ,XHуC0C@ ,lH6^ڸS@XxBL^n0RŊ^UzC\J\qℌSZh Q E{48O?QTj֭]1c/ҕަ v+F^ "շ{n*Ihs6ļp]sO_m46\Н B ?yxADӤ-@$p֨Íu`hSի@X+(ق2hKC'ٶa {7(zpP0AĘ?X̓=3c! ,! ,! ,! ,! ,2(P2evAa HL R_bl#(Q 0F=tQݿ}81Ɔ (?(DRPt;pKfشT)F\͝7ey @6 {K6)7Ba5]|*w++w͚`_6)@իY65.5oc zza cHQpe7 gqN !7*8pzGzرC 8gL!0IP0 '! ,! ,.HP tatD;' 2 BXC IP$ `@9pG6o0CH(P!g(UBd 1nT@H&u돓?!v]k ?pРc.]Pq@߾pȁ,O. }[m:+-v &'@5 6 +ҝ*G ֲ=3cjʖ`5͞eg¢VZfʘ-TcQCGLn96AgߨH +Z LtVt"@ Pp-Թ%"Ȑ`A@3ǜYj &@Cɠ78 0lp@dU% =pZUO5T' (2ɖL$8EH(PA@! 0X"ɰN7eVAmTJ'0S|VeC7D}6УV! ,! ,! ,! ,! ,! ,0Hp*, #BtPD3Zxi+%nkFl]5(`96|ޭ%UλX7MsaҘ8A0 N\Z0``kޘphMi'+f+pL 0([bnW#ǎְ^;(I294I:`?b LAD@*LpUHMU1iHW!:d" ! ,! ,.(C@b$\8Ç#.D*CF ?qd7@hhqȐ0tcǎ+7c HP qƸC]zIB%bĈ@i "Š5a?:o hXA/P[tmف ڱPrU8އô4xNYf/nX oȈMZP\x^/x@N  iվ9Xo)X0iݽmcc 2s>]  rD@WXCtgƁ \ lx :|$c7Nyt 7"hIm`a%$ "e7A8 cH?퀃'ݠA刐RYe 'd)S7\ĢDdSDWȐ! ,! ,.1@1*\Ȱ@ ! B%0j,Ɖ 7b!ǎ:z8#G $( 3Gf)'^@Ae?4Ǵ&8IfL@7%2`PĀeXoR=dqkhm34mJk۾`΁&uDH[6 ?;& CV[M6<Yz/w7iֹ!fitT,Z)yl p(<1<Kny hi&"%r (6F 5쐃*@D 7`TA1 :g! ,! ,. HPHȰ!Ō h6@ :(%8bŠY80_մ$ ؁ .HDA w;`@@8u0`@:ޗ% 5"B`  |9@. dPH)p ^P ~SDI4P`\4 @1jn'i ۀet 11%fuBAH q i0:)qG*c4Ό|䃇t*f|  pq0ȇ|!rSHtp?t@2pE`  sa@p438EvN`qtQ  D Cַ !)"$$ Bz` &A ;S ycB\ 0B SԀxB6p)IaADPjm " I Hu (Q|[@(u 7N!~ Sw%H# ajN0DZ Ur-3b[R؆@hME@}[@P*=(@RΨ%m9 7-|?5)* T HHPLLqI$LDD<43kс hнes%gA ==԰mA<hpP, /z̦S B@Wp,x h|K06G 2 bd̅=&t8Y O Wz8%8@f]B\:@, k`hpm[́@z}?xn0P`{,X FÅ4b@<-#|L@6p h 8 hP*3ƽ!,~VA@Vc@n@/' Z [}pb-\bXdtKDs@*T22[:Z+dQad 7po4ȴa7? t(`mE |0ȳ V/Io w U p`fjBBʀz~x@Ust` cY P+λ \RHp@d/w!`zA,$D|*48E,79>]#6@B<%ZXxrc8E)AݓMw0I%sr,;8\'I->ɳu~@z2RAQr}\W|+MW+@2dny;VC]VuTȄ3V4@6MsZ!Ё7`Ĉ?9,9zxO-Y?' >(0T\,ϔgVV>LwCXEuX#89d\J>pxDXb?Xqi؇3,48hM#C،He/p @rhaӇ0 CA8b1P09({'m,Wlfv7G/p90u_qmw(LaQ#*kXHR)9,ɒ8G$%NB`iM;+s,+Ո;zWHe6\:p(=}nB+\2vBWXC,|O: !Ddi!dwtO{؇x#5"Tldp[""Z)c Dp[@ua!RM0+00su[*=F!06D^3l%֚hwp_^ThF9r$#wti@# l=YB#=Q$p(T6]JbKY2o1@P(Ї0PxV8pAaT[DD4PL%40[AP8Z?8C2o5Rv Lp[ S Lf%J5! EPd1@J죒}Y,n#72%W;vj0%h;%0  VZ7Z v)!06O,i;pN`i98P S4p%T}FhS>ELEi慞a~`Gtz_CSU0]^0<]k04 vk4NF!Q˰ F+ `IԆ\OJ qJ%pe0LZ0>P XlqMx#0QY ʬ&ec ZZL**P[&> Q [*g@ЕFto,~jPy@q)pOt8i+g{)2)L9u9%2;.%M+0^ӕ8 TN88[ Q p mvI%)`J:XaIXGCGD KI G@b@QPLp rgp;QH&p Kyj֤i*H@ g P&x[ QZPB@f*gF5p_kqSٔ50]+p TL` S1 PNL5F.u\Fq2go_/#i[m  si+Fۦ yPG€>'m K@;0 ʐc pmCqK $8;p#PSR;Q ̬ 8*u jv[E9 -Ed'<+Rn@*iYœQpM;)EkZA hy!hqAEgjгp,ŝti ePD DK]P B S@p ?WJpPP%nP` tlC+X*` HU8#Q,͛ fQ  #1-PMZE *e` *0@`%:o]#pu;,LmY^]~: Ty_o`~Pij@ uLohUlaF~,Pڧ;),~yp~@hSR UɁE ,`:CM4T-DRARf kdj: }O͢ H0C鈝!$p%2< qRi#@60NvA:EI{'`^E0,7@`ȳ@'$w&8VEJh;yx>%jH;bݮx5MsHAxp5Fx>VKg/k8 /5<,7@3C@ xB2<|H &T8CÊ=~ȇ"Xcr'bSN=}TPEE)`xRʅỏ;RPQ 7VXB PkCN'>-ABޜ%<8D%=*L$7f8PrdPȫdϮ!Μ C̑J].)dG5EZn޽}\)JR@8r"U"4"{qifra:NaݗX~~/@/²J@ dpA  (7z:I&b#* G$DOD(j+"*"S@Vl#^@2=^XI&44Pm* K# S#̝fCL5L7߄3N9!2 F)g~B"aN ?Dr*rF 3(6= !8%5TS#DhT_5VY2Ѱ6b@Ax& )#^*@2uDO1vۡD}[Xu܎DwVue:s& 0χ@mhXHvFX[s5aZ #|k*JI]vWX=ƒ#fѭegvx=#@8YtNjOiF:VeXi^w[u2 zy( bi@Ik52j98HK$9@Yj-5v8CR rS*PԠ/ OW9AdPa (ҝDĨN<5 KYHFb6"`͏BcԿ* `@1 DϜHC vUF( @nZTY@ p: %G̑6Zǀ0@ZKȇp`RC0x uyHX C=CiMq j04P;)(Pn@ƁRtH- Ĭ2ZbV@reD`04]) "ĈQ@"%#p $\A@ ڈ/yLufԼ8.dYv`_ 78ΛDAjhBPq tP p`!8~ >dd70`o2TPB1)BU0W!#6\, wTxHq L Kᎀ(^`| I! Q0`8(,ciZ@A]PÝPhj"ܰƠ/ 264X&$9ihy23- PDZQ @|sy(E' @ ٺ3B8G$C&AYLņ''`n!(A"KT0-R+GZQEƚh$D6'Yzq}-/XD:~aoWZ-!% hCi"!-x -bDH/Q"F jIàŌW7t06`Q;C(@ !{HHiw9HlpcIH<uT ,lX!ܘЃit?Qf.RR 8 / Dr ?A 1H2&5~C$09~`@K=C#Ԩ}z@oD;I+0 sl ER Z};Pf%5 Dˉt@Uِeh,9n/J( 9jp jH788eeI"D"CEl))aBІsJBsXТfr1j ȁgg r8k)8?& 6=+6"* 02/8Ɂ (xrȊ4E`YZOt$% 3]w<: uNHoZ;`7+L,Ԡ K,4)~q2'+Or64`D`h9oxɊh)#^L9x J+|!L;`=邈P B G_"(@rÀ [ 78(|@/PG"T'ȃu P<Տ؀F=@/"9*AS]0u*H0-™Y-,HjC- a} Qg}) q }MTCfxן 8M= ȑ6}B8cI9Px`XhE٬-x ڈCz@YlQ-:X)z # ' X"R!X$P: `8pD\Prra rU&jT 0 21ȍ=$hY!ْX_RP)mp,y-Շ&  ! 2F p-zHu_#( (( ]٠ O`#H\ p qیX H p"C8 (@ 9`QyH0r"'( XEЀP88R(p2 Pv OѐdHX䱍XpS76a鐁 LI Ч6qQMXp,c `"G8ޝPPH%xn^Lqa B&"@X|8P e  &h*) h@ʚ6Ҁ`cЀ ̀Ȁ ؈hY}ra0g ؀  sN{ cxG% f#A/ e 5xγ) ^a(I$A0 ũЈq h9+YJ؂)&xT M"@ O"x+V0) &0&xxk`!ӯM b !((#8!H#`#Xp( nY <90Jmj55= i:[7@&ݹu d0S{ Ē &!Rm`@xSxY iH*߅-`$8!4Ѐ$@%Z(YP*'(:/ ~ :1?()0Gp5Bpɡ<`t xA+#`tp΃7;5&8o0BFguh2ѻ[\/ ҢtX#!tls±5&Y-(8"GHX @Hx)XGP@PF݁+ojȁXdLPm; ' `Ͷ-*`][?@x8~Q&lܢ Yua/od^spȃ+ }0(t7H0P?mp7'䣰#(wr@'9ML𱎠ϓp(A %J0!Ĉ'Rh"ƌ7r#Ȑ"=40Sv&82chH p`v$0A j PUJ3B3h؀Cˑ7J PD /P* `+@ͅ+~ C, @Cj, fy4bF7z@#U^~lTZ5T%@.d)4K<@( @L-bI8@. CCX@Cto P^jF =!1PvK׎H[ ]հD8iiw6 &o0ÌP@CtbP:a@$3 TA# D 0@$9)5 r!:(pL^*:+!e#%qp@"ؔMq![8dG/(눰0P@;Vr'tpvPhXR81eٰV Nh wIo}c\cLogA4D 7! @شa'/hR@aTWH#@P P ӹgP8D3P vUaPL< +@)p {}6i-"dd80@d 6<" 0JB"'*qX QqP 'h{el*DGa# Dp '8tۿ`0B6xV?|) 'Xq uBP2@7y3۝@-d@>A?tX:!ZB Ĩ@?(@9P dPI*=:ۀ6I`;8To2CҪl)R_F0d C($Մ c0F9 ^@`6aB`\;Aby%+H@R0ƫo1L o0*BB=H8ptgKU *hl4 "Eʧ'PA sN@]DWR𯪉! hŇTG $btn"`ڀ e ( /TJOJUsQG`є &@0Al`^(౏Z@XƊr>t'#}3#DDk!iAhy*-(H(p8oQ(ߡ"đBe  YSpf fWa('4( Zs +HA"P`7@ Yg(  "F9 8f=+Z@G@tujKJĠÑ@GrW@1Q`-Huйy.a1Ǫn8K @b&;W`Il phG k-i0A9(:T!pB$%n@AF2HUPCv``@-@S1 J̫  *`y'DE@ @ ;I Z G+pNLZF2P$p$;,o Wux]|MLk2PK P0y`/XG ,&Plé$԰Wp ,=45@Ps,1( 1\ e/RHcqY3 j F5a7؀"S  OS6̀#mmXc 5Dh!5>EH4@ Aw[-qHaqiXDb%%_Cdj儜o zLq,At 8~&  !=X4{:E A9I; XD@HEl9ƤtH;:"{Ѕ~#ЃߐC4xv!-~ׁGA(a{11>xEV,j jj̬%A0h<>;~n\ŀ@w,#9{?`JPsr$C=p0X)AA`*DUpC  8df3 pc٤G%n3"@:&&Y~#ьa@2ʘn;F,'*(Wqj??l n`00OiC:Y큘߀zLZ8DD؈TUyT+l4@4,9DqB6$C`OF qů.8Dl h:h0Cx@5 8T [`-JLLhFw<  (G DNx0@D}ܓ)W&R9m)L5@D@@O)| @;U DȀyܝ~I Z03< @pGTA@_ < JHMY0Oԉam$ʨ ThYȢ@ ap hh8)As"7-qcC7D&@@ R HA`9A=tiӧQVukׯaǖ=v*Vܸ!@E -t1D*BƊ5T܈nCF r,# +Zx!Bhaq5Vء?nx!ahHqHAjJaR)XlΩB'r %¡»a X jNX:bK@p08b^J(țH``J(J lk7S9s5Dʼn& I?bq > ) uI *t"vHE CKtPj POsJP6bTP;u PrR*Q@?#UOTIvx6 JRռ5'FTU>MMdkVmOC|UQQ+RKɆHyw KMRdQHW]!)1ϊ,x d QNYe8V`5CpdrE qvi@U\gB,`])3N)f1rHa꫱ZkmiO!Ho0ҳJ_'zkwCm\sXr(0rS^vcq |cwNT-NAkߞCYoKsi}6Sm]Uhށ^/^O^噷՛^驯^_EߓO_j_4oy@v#P te@Nl-A n["ABbP%4a%xB$d aƐ5 mCVo;C aD QMt<'N 4_şQ]"E16\$x+mSF91sxG=~{#GA>4$yHEtdHIư #yIM3IQR4% xJUte SJYNeByK]ebKa⯗4fryLeZtLi*Ӵ&yMmMq4yNutgNyb'yO}Oo5(rSE1ʭ! ,! M>H*\ȰÇ#JHŋ3jȱǏ Cn ɓ(S\ɲ˗0cR@R͛8sɳϟiJѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐs;"a̹ϠCO'ȥN^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&LrDJ! !@! Vf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j_2뭼o%미P+ñA 1,fv+k覫+k &"&f<ؿ|ؾ*G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n@V58#%p0lw> =萺;0 Gp8L73@2>,3| /S@~[8>C׽/~*(Ёָ xG0oȿrI̟&7.sP~xA d.X1iXPoJ| o IxQ´&;<g<#?Nv:Abv: NG>>?`YNaSm[;+N7V1:ѤhuE8"H "4'\c;gu܃ oDɔ'/bč'P@! ,.HP Á 6,8a2 %bB 'hK)XСG;TA"O"Ĩ!H$rTW0Ed5x4d Ji݊-=x}Gm@=4!562@8uRzVFc("FS ܤSx޾*p1 I ,Ο>V*Er\c5'AڱoD!5lټz7/xc V`ip=gEP򋁃=cG(&bՏ10ɀjR7eK"69QR %ԷBFT54T!KSXT! ,%.(PcPHA JxpA'>,! )81R@ =!ㅀ:`AC0TP(gU~゜`z)EC*U7 q#?8>r"H h T")-YY Yi iܞS.bQ *B[5]~F-ݲʇ)mJBgxѪ!^1Xv"xggA0Ž P9KcllRfz [>K8GŰ ;C4ZHQ E$PL HQ! ,9/HA1$AհS?HL%J 1& Dz[`Gd嚩 iabL'^pv쯒uw45 .98#z_N,(듵$P/ҀSM(XD 7KoAlA(<"!L4(o%@9@A0@%4P@ep 0PR'pD?3vpTNi$&p  V`fey՜RaP; { &T2tL"4dԓbĐF! ,! ,D/H *\H!Cp3ѣG 5j &o," ~K EN ݿ?@Q =n(qG_K8(A $Q@>aÉ8 jfZ81tY `%r ME@(& )s% +m1z|(E@֠7=79~QB ѾJ7l.t rS1m#&@ zmsh!HgVA$NTpFS^C 71Oi%@q 7tP&P"UPq%tء 4XR(N$N9CE9%"vJi X%$! ,! , 1S"H*\ȰÇ#JHŋ3Ǐ CI$H%P4ɲ˗0c|2M3sɳgϚ@KJѣ ӧP܁զRjn\MٵٳPp۷pa>3w7Wcs"hK@@D˸qN=  ` -CF[)xْ=lװ>Q2mANg_r0X.q#ަРAΝ >' ]"@!*˟2Ư*R3π`F߂ >$X?K=( n!B>(!!@J ur?xˁ/bTLrP4a8- h 7Z!rifSZxYDddi|iVcw]'f~ڄ6fa/|hL9&|)0ApT’/C:$ ,jk\X&@ 0+ *,i9fE! ,7C&H*\ȰÇ#JHŋ-bȱǏ CIc(S\ɲˆƽI͛6S(G&@ J!H*]ӧPJ5 ԫXE!B'Jّ'Z8qƍ8ZKnCHxB1J0(c1:  1Vab3 "\ 'c BȦ1`QBB6 aÇPZ @([e9VAI0%#<ŠA0.]P 8k. hCg鬱1 7gGp 7ܲ +`Vx5 :Vx0 PX @BTLx P;A1`+n( T8c@?SDt5L49 =hS1 7 40|V|)尳M5a4 5ј 714)6P 2`zD@( D0/@@2<Ќ5WTrC!5\)a%4f6nsJ2@3;bq3 TN/2d864@5[4;܄5<&HiP337P`d`a"4 ekNb13)?P0;FB8G䰀,0!Z|;D@0$@L5;LyYb7D@Sʺl0 Mi8$07?T0.8P:ZH7/TC"0@@a$ ҏA`0UG9Vp0L#L8P.D2 iRр ӄ-tC )PAA[5a00M0n0# N63Z@2|c/Z|3S-i0@ B4P'hAUez䲧 V}:lȁP3H*``>u+\%v?X j0#@'{kk XdX@7aغ"%D (?} A݅h@m B V04P8d@Hd@/DHhs<ӷvOA< h1o>=:t!oFk!e@,l | @S#T ,([P l!@0+< Fh 4<n݄&@^A b&!Wh p*a%A`l6B k'!f]l@N @*Ⱥ!PoP< RQm8PMj0@FXbs@%PX!SP,F1 6h`E-"!)b -؅I@llA.P8P H*@q"!",R8hФ((X  <C܁HA _yw#@+<.N;4iA@:4b0 ? wx#`0>@Di>0  >>p8G '0o`W)`peSj`t0y6M@ptp~@APpw`nx#Upo@"~`@p`pw0CdCJVv`p#`j@zol7Y$t'0 @QZ p<0qg s@} @ > 0\u Q ~q@p` Õ `qg0 B `` @#'`Nc@W'k,H o0jwxMiwp>f`,pW`Xw.@``{)`@8j%~ЄwyoPv#L@B GpTfe|7% 0`   6Y@Dž  Q@ g P pY  ` !]w"TmPHv|aNhzk~SYp zFv F.p)lPYFW wA`ww`{, ~@00cUwHv~0xqT" | WS8 l : tq `\  >` 2DSK @ q!t` * E"0@ ` Q  Kvt?goyc'Mz` V,jwwA@*Azo)<{wzmLPj!\U%+J*J Ld,;@*Z:2F@Q,0nm_jP;L2w'_ޥL0k.ગL+Zt%"82uoro5[v1@UT;4&\4vj" MMT.)$d&6F $&c4dãG2sF8! ,! ,! ,! ,KLQ 8‚0E%F\8Q7c’"Iz,#NJ+[|ɚ4QNT(%ϛ"! ,! ,! ,! ,! ,! ,KGq\( #RP0+ĆiFLN1`pɓ `Ab+Jv0x`vt ?7CiЅ-_kҝztTIsbEsѩjkpcI i!@:B'v"a7pȐ,Ա! ,! ,! ,! ,! ,! ,KLQ 8‚0E%F\8Q7c’"Iz,#NJ+[|ɚ4QNT(%ϛ"! ,! ,! ,! ,! ,! ,KGq\( #RP0+ĆiFLN1`pɓ `Ab+Jv0x`vt ?7CiЅ-_kҝztTIsbEsѩjkpcI i!@:B'v"a7pȐ,Ա! ,! ,KQ;zPأ (A<X#NFr/1PɔƎw8Rݿ}@r4,Fӟ<ܜxbécj,q@pVn4->G%+SSO}U[*x+[JUJ kTqi߂=/Զ)O,Wa$  4tTKLq"G#{*n_Oᅐ 1b gq*;d>t@! ,K D=~$Lx# 4X"A2f`ā)(dI&Qqĉcѡ8sN @ĉ;F!C2)>BdP zqϟW-"$JEL_ќI ;I})C4xV/\s?bcte ؏(p8Nd˥ ٤ͨiZ J׸a? Cat y5hT&( үXǎ _4R'!C@r'Cxc(} 7އ CF7Z@! ,KQBF1p@  )y۾o0"g=6X uɧ+޵ϳbQBz#򣀋kʍ{  tCFyT=! ,KQ?z$LC@(@bH0ƍ_B#*BC9߿/ QJbHv6Ès&UʔfЛAAJPK!5龥@JPB+׳L{|G N,ӕ@[rm-p[0U?d<巾DUpCH9+#A r 42p! ,K(@F qpa"h݅u3(S u È+昸W#[]Kem3W`q +iPNIJ.zIH.\t(h^}\6ҊrʳyߜB?Ok { Z#*up-vĘݧz2]Ckd"kPA"ptQUd1ї[5u vs?mg3u݊8H0s 1Ds$PL0#?P1H4'3 ILp3/d 1ψR%4T?HO;̓N%˶CF=̬Î;SO>׬3#?@3S }H#4aj&$OTJ= #d!Dka6%~;qdT#59aP2N|pV.e)HPHJ:2:` rԦD`H*G"dB2iVrZQ\2PC+w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:v~ @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫ^׾ `KMb:d'KZͬf7z hGKҚMjWֺlgKͭnw pKMr:ЍtKZͮvz xKMz|Kͯ~LN;'L [ΰ7{ GL(NW0gL8αw@;+F.25L'OQ|e(O]沖]KSM(T$50D6o 4@zA7`A7p73tDdhEB@ ` UEùd&9=@ + RP^ *hZL "6AU? вyHMK@0M^ $4KЁ@!X ʝx{ %2@98l:7UMcw ^pi@(A1 ?ы˩[ H x h&2QH 0F8" "P rf$uorD1xA}X]@,@z?ArzV.N6 D 80 6HA Jp' 4TaH9 # @82x^/Ѐ҃'8S@|F5nmwq{u (A)` (`"2 RY@`1 >@|0Q 0 K 9@ YE@ 0 ݧ7+T7B Io Gʠ%p+@p p im}rGw%wV7  ph}0P @ 0- Y`  q S 0sP q` - 00 L'7` [0LE` .U0 p ,l|pW}i`0 0 @ : IyP `Q YPlq  E@ 'B q`'xg@ I ɦyP0@Nj@w,@ѐP nq(};؃h%h s0 Y B  Sp 0>@ qP   q BsP vx( l tp0;CI g l0~q(6 'K LO X :{PжP P L|\ٛhu95; :9;P*pL:P ޘsnA > s (fp!!P+GL!%= e6зfZwV's)ne5640oke*+Y yyB q01pksg&j7`y*Pekex q!rPkrcrHo7+ળj ! `JV:*k00l#PZjxjP20 fתXk Q+?گxjYV! ,! ,! ,! ,! ,! ,vN8P*\xPW)%nIHIWa=T@ 㬔*ǎ7լb]lNx)'Yj"].%pV] jSqeRXVv[zpPb.znLP;(-G޴6`yiL)E2:[c A'D2` oAݚV0@Qc%?` 7PF9$! ,! ,WHU *( b@b"% ,7h6@ĉ"oT2Mz ء5R4td߿q+C@@Bٯ6H>Daӆ% ׮`J$WҪECJ[F%E }#[qB7h+`? P-8iA3b VZфdgmؠ J?n!F<< >l#G%z`Fa x*ذa `4F^G?`!hY! ,! ,! ,! ,NHPDB$.<`$<`CFoR)N ! WNQ@69ifˁ1uH@ td1D Tuabȸ!o(TЀCI4FգG^=9T$AF 6N쟿)c 6pc@OOf\P#N5gJQpkgv +%ݩb,`R9a@Y콛~܆f[`9nօ"Ε| bN9(\zh υ*PLf)w\Z b7|&^%4x?Ѓ? A'! ,P)8 H!C' ! ,Xpc jadžAB*VCHQ0nt`WzlR6JRgOvAHܨ@>K#"Ppdž MAt,Y9] >:@t0Kaǖ=+PX5!DغVl@ƁhNXf)dT#G#Ҁe5'Vف:ȡÆA5]j2h(!F xnaI!côo)kUKhq@ȈQ28bG 184bC-X\ƎɛG KlCǀrB޷h^/(>0Pm|sww{cջ_-0A$8Q yoAΰarXr_N{ EI=bH(=qke4'"$fR*@A T~C7ЀH5{ḑI2@S RDZd 8?S"H20H 6 5P d9 b `LD/l  kN ">*Ʉ)HAGq:_)t> @%4@DI -g=al(F:P T q)vm DN`õ'lpx Ah1D, dAN lc#;ٟ9(F Tdq@*H1 D*0P0,@h)P, EE$H1 &ؗ0 b " B4&E0>H ЌID"W(F/:',e`Y䀽'2!-l ␋88,@ -OaYA-̐O,@ D-ZDo;0($KBD(@;BH!!c&`Y]y-D"؄ PD,2Uv#`a("͵Y3R!QBBPEBCH C HVQ{"8A iԐ<#߸bdT+ q(90"-(V6-ΐf--d!YEHtYH֋mU̡` !d%2PZ{QȀ\DA;8 F pE*B7le~K@ 3`"DAL9Ȅ) g8(|@C"h8&:" *TC mE&<8e x'T a?`  ց 5 5 у:! ,|m(PLȰƒ1DDXBFE#8Ņ#qBcŠ(eAʼn/_2 rGo߲?ҌQ=Kـ 19et@ЁJQ"ƍ *)dʷSJv*9M- ZY5+ci*)+:@cr\;ּl n Kb 8w P):P[P1k(`G=5863G2]b$6`־j`Y21 dPe! ,o(PcPHa8!A% cE*N`!Ɖ'O@a *!R`>zrS"L%b_p ҃~ t>IAT,lj?t@?P4'G/sjYK *BMCz֮Zx`׭pZQRFJ5g8B(seN(A0z۶l^F;B- 8cnU2Tƍ?Nti(#0J$h뛵֪4FP; O?ce#e G! ,! ,mH*\P dHPF `Ecl8qNj%b! $NH!CEW'} e/?n~(@F28d?K *%\M6@*`̚3sjxmn֫l ~u;1X.]uFm4a4uR/n,ؤӈču'0ꛕ҄qaV7kD 6@S5(OKC'otB8Rzք QO[ݛ q^L6k~K=d~* 4pCI'C?PH!! ,mH@c\ȰÇT!C%R<Ō"qň0q %NHQaoHplz@鉀!F81)?N aƍ4n1>-:A NQD^VBg}}O@ nЅq1rJm# REP< .ᡛc VUm:"Qkx3;0V,Is4TysV߬ɷMKFS!#B~t ??! ,! ,mHp*\PcР%REAr{@arbrhaP?tZ%Qfb֢,Zt #lJ+,&*01_`)nX_Ś@̢5`^Н{v̓8 ;eLj 3/Z" t_Yl98&Ǎ r}o4# G~0zk7f@C 2Ǟ}'0 eYۯT!TCq"W_u??(P@! ,nH &DPB 812".PG)h8P#1P$q '.PBF8<Pmz@(afvX9?!QJ(cA(nܴpϟz; Ɔ?vXsزf` B00C8kV=;t 1U`گE]e8ulP)^j aW^艱A_֠ȁ`ݐ!Z/ l6 ;,ZKG)ݿ5fþYۏ $M;00р:8R@! ,n(04B)`!F J Ґ'R QF,oQ(餷/ZYF PO)?` khrd-PµWjV@7rm\ H8A.޶}F}C"4%Xj(Q&YF=Ro8Mݷgz[Z2%;ػ8DKp(aA@Ja;Zby8~f0! ,n(C@A1$p`6HCi!B !j,C 8\` "ΝtV Bf`AtE}gTp jkrXgP֙/~A'`]W<4\2 L5#)'$$ u +E#$ D% Dp&m4j8N"A Y(@;?3Q!@6у89NpQ^B $ =GP9ug@EAoĠ@@Ygl\an ߠi/HsP 2:m3;MSP4j3H詨.e#U^i1 Batx ]à!ja}99+ADC!ic' pK)~"kX1p!Q=A>X( "uAS^"4pǦ:H@#'"r".G"*34l 61q7{Q-H'Ȣ $1_Xg4Z-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n/o'7G/Wogw/o觯/ZO8 HL:'H Z̠7z GH(L W0 gH8̡w@ H"HL&:PH*ZX̢.z` L 00f 4 2pHF9mp#~ @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ81KӉȀ2eO‚5"1( zT 4h*R{Ӂ@;8HV JV!B0'`A!@4jִ9BXYb@qCa4i8( lem# Yc PIur8J `ƛt#b ?9D| /,+; 9NZ@5 PWY!%VP@@]@}Z 4dhEALq Hd A@ ŽR0$5!A\ / DlY! P\đ?8TUMlLM+!rx*x@]I r8C?h-(]:y/db B%p$ (<RdE% L & A p`,A6 Z\:`P!x\ F(@>pHX 1I :FAmhs E`@4;] J@A @TrR&#`W0H y ,2l!!SH*x [,&,dN kXFP 6sZ mC..!Cȭs oRv@nKgژb<Ѐ75@'yશ !1,xUcP./a6A΀_ A@r` n D ;W '`-PA n V`![H bT\a \ <@DU/P6|At%#@6p̒jB $8]9 >3H0k@A^`d 4pfAf z!( G] !(pK\?68A"*!Tff2vpab1a#$PuAjfHbcG1?rf% `]C/]Ń0AXb<{W40Fp/ЄM=6pw2x'z+*2`0:XF2+P*4P0`G_dD_6a%`uUD': VExAk%X A6QUkao }J%&Vfw7qyWhqD8@V_5u};0|wcćdt=,GGUTwuwUKnpQhmv\l`[LFj9iX2V f 9f/VACb)h=6D`0hG9>@mppm:ZΐYfh .0`@,FZ~l?q|;,v\c ypywy@@k W{PaMb]A]0V%p 7L2o`g@ Cnk?}qڊ83(l ` h[ Q_ /';@q2{t# Θh= b,jb$`.FmF ߭cp((h%aYu`l;zg @ҋPYA@_%g6ԪP?` qkf|Pnw'| }1`PSpA$jߴb4qb`-`Z`P'Rx'AwyA@b(vA@WY&>3cYCn vf16@/a ק vI~Bf?= v3Ԟ8pq  Lp?W|z!>kC@j\(F(qimހ=)@k|.2@*rh݁n-]  W $FHw"0.mhoI0h`Y S0`\x_b'o^"v\-wbT8 wsGcxx$ Hh&@mTAj.m6C`$AP<b)@M/z0e(C3GL' ^LBB!F%MDRJ-]SL5mĉ5(0Рa$A>a܄ 2T\l* 1JL 2R&*GA'nxAC[z~ DY\+ 8Rx J\ ^4 0`#d0W˂𨊀-|`bxpQY1bhP0ŋ>Yᢃ͝?]tխ$-InFt`N#! 'r`$6TVr 6RG̬xd!A^ &䏠 JH! PMd`2 *l0"d#(J(?d!]"*j` v؁ x+3bAvjL3D3M5T!.zσ`(OrP!>%} !+K`xmC8AaxJBypȑp`  XˠK@Ջ" :rf*rr+ 9^!,hgf!dfzg T ZݢJ]ZzP SDk^N_ @P6|].%W T:|AHp-ii4LAtvQ€Ub@):Ѓ<@ Jp T!7\0E"Bh'x}% H>(Uf@0z) =2ьgd PMgC&HBv2?B9( LB!b@ȋ$K: $Զ)pF p@A`(q.%;94(ZpE 6TC 8` 0-ѝg R%,T0B2ddd"-(AH4W(`+I PN/ ͈\@AmRK:b `hͪ50ܙ3 0x Tz1cLjAY><@9 {MĹl[ͫf6MoAwʟQ{%SK!$8[.P gM @&|P 4AU"Ӂ l dn&WXO$I2 rمxo8 W!2D a(Zp*L/#g@))=7綉 G~o$H*=dRa ?hH\Z64P `#8AuGGAnmQ` )5dѭ@Zj~g@_S 6(kiغl!R @A_ d !j)t`2Uwxf8S   ȒD٨X! 8FVQ ت^HP c9/ixw9ȁu:l#HiA>A#?EdrC7J( wҐ PKla8P WZ0Q`ӡ ?J)Y @Ĉi eLƔFiDG%x69$@lq K"[ 8] ^A a- aw)@tDjtȇHh5Va(k N _ ax. 4r P+PPȒh%86;^LLfȢ4ʣ,ҩu"VÈvӈ ʚ3!H_QpEX!iDʹK `Bȹ%AspPX`/rHD3 4MsUc̈# pMæ1(ʪ†uؙ(q *t(x)x9EZ<`t!1r-#l  @O HL*D`0( 0 `/P'#>UPP% P b/`/th5oS )q$ЙT9"pH- o^ xЅ4(+4MBF(%ځ #*-&milЁ 1: تk0)`,e詂00:"們&e aYhDUT>tψ bh(Vh[9Sz #ȠH bҝ``Rx"4<)(`A' j(]fu֕q/ PﲕRU#9{Q*"7(  BŒcrCI D}ֈu֪mLj"؁u-y|ف(Q;Ǝ2 ؁I \/qVAE <)&5ԄJ1yXZ) HCQNkŌDwjqAۅ|FXxYNQH Tؖг%DBۑ(@5^AH:Rx۩! et RH@kD,ܭP U `(E(4#Ȝt1"HhI  ğ@Ҳ IY*Xi ɷ`z]yQx?:8 @NK 8X0Hޯ* -lA6 E P\_X`Ѐ@A._xNĘ#R4l*R$ny4/_ "hP2SX?PSIK{$?T4<3)8,H(M EY @9O{qБSb(@9zhrxxQS'* *y jS#T+rR2E 0np#P^ [ժ(]؂-$X#,`\`("R:*S (aMkC@P(e3q:ϪsXˍqbZN-\" jp#!/#ch?B%ȂL,A"O0|# CrS q 0R,!3 XX,|97PSVNjKl9m j  # i [-2Ip.u}ّ:FJu4Ȅ@MK` [اL"4,/j YGȯCB+SF:X PxJJIPpk v <(P!΁dS%c8"c2#$(MgH-ɧ]H0/[M.9VSy#J&Z5[mN2PzHЄr\ ʭc`Џ\fxЁ .ioā7.*pa^`!%$/- $a?u[5AJҎ QtV9X0m۠5 Aj@# 0%8!|B0x,CPЙ2w--+bx3xZC Ō< P#bXT`Ȋְ ؝AuoY-9KY`h$ #:0DaÈ 0Ƒ\eԵ貺/_ L ! U0Q8_[?5M &xkXu2Sxƺh?Fdɯە`*Q˥ly_I֧▨|65G2v5ݩ_v}R j{9xYx9“,}Dy)O}ڇPh#g D KA~ҷ  N) o,h „ 2l!DĠ"F n8cG"G,i$ʔ*Wl%̘ (! :]'РB-jTĊ=2m)ԨRRJ&ΪZr+ذ*Zk,ڴjײ5yfζrҭk.RK/`o.l0 GU1Ȓ^Ax2̚73Т! , bH*\ȰÇ#JHŋ3jȱǏ Cd`ɓ(S\ɲ˗0c̛8sɳϟ@I JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#/wL˘c̹ϠC~ nӦK^ͺװc˞M۸sͻ Nȓ+_μG 0:ֳc>=w 8?}D?ß/>y_`F$ @ D|!GE}v{tGPzBȁ}gH#E>R@ChA @ ՅBSV)X^`ahB l`+0Q APt 8E@pj8hXP` +B xh zf8#:JA_ / x8G1z^;l@1p b(!X 0@^QV Z/C 7& =@X-nPIFDp7'p np-41l@XF).P !E1 ]"-zR A94P'q ] X8p^ ՂQK^ .S$J0"@[l HP`(]J8#T ($bE40ahE/~у ÈFO< @ >p@>9q Vk8# ыAr4A g@aF9~ C=#(+PicX0JU8EZ]|C8@j0)>4f̊ 6@0jpaXp t0 `0g8x.gD#Ph/A s4c05~,h"[fUk:_, ЅtYhf @A N7h1f`#PDN@x7n(F 4` jċ?H0 HS _;1 g( h3A2,c)~z, sڣm# s S.J`|"4P }# uB XnC 9z8E5JXC!g7A rp@ tfd#P-р4:50 8sp n,`EьP oh7ce@}l 76` fE(r@[<D/a:4+Z9;_8@xInRq ;c`a.&27B!5΀o%$6d7:AN 9,J0 з P 2c 3G @OT@`$ 0`t44)@/p ` p PZ% 7 Հ ` PP A:]``Pؠ@ P @ΰ 'Mg: ow 0ePVw, ѐ `  @@ 0aրP u u t P % 0xFD0~P s۠z`? pf:-Ll0 Pi P7ҰUFh p 4w MLL b`@0qX <$ `=@VPz h8 E@: ]c/@x`'@tģ`/ p4)PPf 90P s0 `.@G A8pS:B;HPr@0v ?>5P ._l` TJ`gF]z@;p p `  p Dp pP` e @:70vDwwP ( 0JP%ǰ 0IJVc @ $GC` @ 0 @Z t0 @wh ˀJ@eߠG039V PG ЇI eBd,7 tO"@%[(@. %2a ݠ]02H @ 0[ %  pWӠ p"{Г  E\n5v"lkp f;7 ; E@ @ `0 π ǰ= [P@ rPCEpsnv  29':P )Ya  ϐj  P֔ qyPQ;@el p pC ϐH f{ W@@-%=BE? &fEpE 6 ˰;@V @'-Pl?B.R 4z@ p "P# `0 S/ `nX9:fC9 ϤPp Eu Ж0 ep P =^  h2$QE6 2H aPe  p S9p9@ @ µp:;@Zp ?@ @M D nwC80URz p<ppv0; P: ͠ Xo  lk6 |JٟH.*0+#'2E(`4D]w,.G ˤ4  ,Џ R 9;'D%S(r.8HJ26p<@L8@38@Կ.0 Ae@=41p9E .=  5(ISZ } p>87>vKc'8,Ies '1g `DĞdye $? iڤ*ZP@7:MQ{7c8/pyyb/4G6%'X@J4 5: -l+Q5V%4 'et4Q0AC>8;t#fs572 ?# =4L.kyPBE7>'3l7?%S>S2<)7{@puDNBTT/4>: c'B9R\F̂wJ'V)KwC>fD>Yc'UI*;@X2, d,I0ČT2`D$qB =2p=Ɍ>ܓ i]d`@1Ғ=@C0%cH(JyBT"P4 v'"?R62]Q:;Pʲ4&C7=̵]Jq @.ع)u/e38p1*?@'Isr7_q!{ 82j1 z7B@ f0 v>;}+SX"G5 a/v@۱+.  zP\, 3qvX1-}r6*0X N%^6vRpu7p4ɲ0{ @ p YM`4M p yӵՠ)[ׄ ` 78%}>5|eHmۺM\Qp p$؃])$- *#4"-%`߳ 2\6*2*0h s`'0? ى,2',,$^", }'`W{1/ z p 0:JFbMd;p{ԮpD S/훍0?дj'G7?P⊀zP@02P=.ygP3vBrۙJ s7{4J5DJQʒNXn;m^q Q b0 ` 00 S> `  0+ g)S l @ K9`` f *  >P$@N g6 Rr4J@@ n& P   `9 i 0u19 P ^3PĀ f 0PzZp EGPA! YA"6c!6$`$F\PA;$c"40c@Z Z Vad8H7xÐ4< t9~FQ&Si^`[Nf&MBjz!0(Ё*dJo8jPE f41,т0jNv! (4&+8f-dm¨d9~`vt9EpitcYF d`oiUNx^{7_}@Dc9DZĔ*E!Va#MFTnb)Z 60ɂ!FE$?FU#Yq!4Z@Z^d&2(OhB@xH AEoBy`vXj@n(@tYMBzN/v#dp(G Pduzqq`r~a qzH4nhphm^RqF vЍz`AY3sȖa9Ej"!IQpH4w?~{?|#b 3$Hn҂`5XphQt lHBraDN\Kz.4 ]VnMAz1cP` P@+p#5 E0@`XSk<2:&A(5 TC؁0 t7& 1h0QW GiֳGR`( sLa(:^: b^^ķK^җe>aL!P P-D+0 4d %IJ@Æ("݀ ,FQ0|ЊHS F  "'p1$h@@,A@ in,@( t0QtiҁB; & a . v< @h|cXݦ#pC8!- F9҈6~p P @ t<Y _@ @.pwǁͻD t47qxB@)*c|PЃK^mhE;Z`2Ёr`@-( pP 9 :@@2L FPRQB. YYh"@2Hnx2A@6h6_BV k@@ ѺA 7z;` (,Z((aAp6\ 7 0(LEJWpP  ,gOp, @jL4i܃d꒴_sż/6NVY N0* J$:,D!B00 +HA T"" ܞ@8 T `xK0o{ Ch :h.dED"rjpU'x7O@H+bmbsq/ FW@l@$ ܓ:((Jwʇ+ew¯yMv!W#>fW{eYZJlF@߯ H@lTlc,aY>|Ky VPJ8#O@Vk\ë`iF|v6[> y ?M.:Am\Š;聖aE6U0`żW7}rKtqxW ^>yǹwǷ9PSˀzɉ y0tS\ >Ak@'Aq4߸ (q{ lՋg?6@ tJ7o:W[|,g]PP-M#9h&;*H5H@pb<{ Hr/M8B/:H 1Ӹ0k>H:". 0"%; ȁ:Ђ_8]x?`/8Ѻ-2783Kͻ|3](:3l<j`2[7k<<]ȿJLMXss_B9`%ݡ?=4ԞKC7\]^{ Rxip4d{Ĉghi`?"MuEkYDj4sDtȁ8Ѓt ج3Iq,uȀ%# i12GHȉȊHɕ0jhss0FHFȓDɔ$5=dЅ,pDf%.EɞI`3A IYTɜɤɨsYӏ;) 1;Ȋ0=l0 D@;IK;x˺ʽZ '7h/ ecG9Pm8aW/ ^8%Hcj + P8ˮ >a-vPGRPuЂZ2hPht^NC8n8 U{@~:51"P P(8X3W(0\(GɣSXrhe)8؀( 30!/_2x89`2$Qۻ ȧU:]gG.ss9/:3A_9:wv<ԢAЁQ 1}h/c@0H:k1l`Z>K^2q8;Z1YzCnfCPPP[aՃsځjZ9:8o/!>Xj}O;{uD_;yt ثx' ѩ)@3F;ZxؼH5x(0e`"@ x$*@*J HP@ 0d!D4R8qA"haĐ"2p#"H704aAkDp #%D>'P)qp(,~FP2p Ke*#(9@fb37q pD] o-H"5[T};#F2e@5ۉ3*r4 bD E>E RzGJD YJcsUq@ OE.tH4u $G4BDn\4_1D…R=#RnRK4'Ct?t9gR"@ @$A7w\ Џd\ Yd'|B @  ,BY @p @Ppϟ@@  ܡl @ 7p/7d{ @A t ( 0`@`Hix(S'4. (A  O `L`(*cXA ùNj|lcy;vs2Nd{˟C(CWJ6*`=67oo3E9b(=g'W |(&Bh,&B&H((HB@.Al(ā()D&B,[w +cB.B@ *(A40l -x0 8HFmNAC9H 64C5p  8F(@(|ö639C7D5pD1lÎ( )WC94l3@3`+|6lu:kS8lCv<@!@e |QF2RxD iȸQEA&00F  P9rJ/aƔ9fM7qԹgO* uhT&P$ɒ*qraTML5! ,=j1) ,G* O((WH%EJE 08(PH2N)>XPNW<\H_tiCu<еʆsHk`X)9@Wlkt}c\z9 :i* b"p)u.@aa~a&ܯξ58UPƒP* 4J"I tH) 1P 9Ca@<` "Ck%߄EtIp7Um/ڽ Aܫ.} @u2b\7$Q>" XtEo^ Ϲ5nQLmt?z  -4 d "`]?HH z=Az_=`T>e0 D@ d}@Bn^7` `@D%j@rXou쎩" $^@o@Џ "ҏ""ED. BCN"X⌆!=X$/DDNDPb@/D+Dm%: ːHP{^T!ȏ tlOOK&4.lxo0 X HHl #) kT` `ZT[2OH` RXò4*@ t Zԫ tA X`n 40ϻK"v@7Q@X@"ˑ t<`@tʑ h С @`"$p!"b.8@.'RH K jn""ƫ`# v` :@0@MR[n ?`u~`BAmf"jM<脧*+<~TVNpH6A !~D@Rz`A@ zR@-_lp!Dt[ܠ8 2Aa6$zA~!`z`A 8/k VK@6@V.@!N4!Rt@!daX&<DzAte AdBa0R   <nAn( zv`4AJ@H`N !>N5a7N*T0tAl a&  F D+y+4Lf acras~ A%n@!B!!AQZ-ǪqX4Ba *&a&UlUm!!@&z4Tan؁a`AA%n`СQat4AZ @ҁA&ao! ~^!q"mat@ !@ʁhoAȁ%V"/p#0 ܡV >~! Ca! \Vsm~o6ptjVb"@֠4A` B<ДnN ~6 6 XI0 A 4.' zj A.2^2 R4N nA rT@< . NX8 t AA>A~Qk!̻/`b^0 ~X @͈&vNA A'ˁ w(@Nra|1}(8 ԤrE蜶jqK ($B"%.!6@!\h.a Az@"UV O;@z``Pa:~WCX@*`@aA H|l<@"@6aS 1K6Ba.~a_)!"8  k@  @`ܠxA=A@xUvT55Δ7 !x^0\|Jaкd`13WazN[6`6gAA7!j,z!ڹhAA:aO҉aR`Q@:@FtȨq4ȡʦ mztJ^ a^ " 68@aJ M`ʩA}OvNٽt`w)DBB!z7k${l`~ZjS:*JHB'X$;x:@ nA4aB`n~@ TbW\Nc A)X{NpB@[D"t9`*<!Fr@Jj0 #`8LPub7,D$V#cb:V 8X#;C1` A7dP!B;8$HA@ [F;:@ 8 #BaJhȀq"Q J`ЬZ2~@ ''p@A)ĈG*Vtz.ĹnAA{`d 7T!-ҠpP\8ѤK>:լ[~ ;ٴk>Aŋ'q=z * ,pcE:zaep Gp8h;(|20 \a?4LFTPo'@uRadP};P$;!D;蠃lS Q ƷC| s]ah;XgP 2 BrrL@ (wp 7`"=]2f]T>×鐃b1pG\ Ji[zg~ hA9`Z PHXth IC[aph Ϋ(Bҵ^hUR-\ t#pgvPh('xl lh ~:(P"Pր 3fq @ q 0 8Jp  @  zp  p P `V   ?P Ͱ =0   P  p Ӡ F D p /0 A p Pp @5 p%犯hL0 0 ``  0`: g00 E p0 @ > @ p,) ,@ v E 8<$`tCQt` ʠ UPyX ` @ VPð Pz۰ PD ĠaJ  0 `0P p  p ;@y=Y p pՀ p z@ 0 z0PXPt?90 fv Y` -SP l` ` Q0 Ylh@W0 ]L@ lpvELЁ> s B  IQ? epi0cz:͐pvP=  Ipґ  P  00 z0p P@ )  J  P 0 @p P P ?P1y p: @+OZ?p0 "p > u0 Q YG gXlB sřP pH E0(Pp@60RWM`J ܀ Z\vFFRVaP !۠ VP p ! p  ۠  4 P`  Ұ  'Z   % @ P  p  ZzՀI J P`J kBU:  v >gpgZQPIP f>@ uY -`- vQ`f >-~&R6@`u`T p} @ )+p Ѡ ذ G YӰ 0  0:` @ P P :PM&ٯ5jQ@p] Wqyɫ"v` I u - (p@ Hu"phOg l0K@  B @ &759`Y@ 8n  vĀ ٰ; apߠ ; & J:0aip@  0ِp00  1UD aP@  NJE`ǬJ`ԤVLȰS QIS&BB"ShWɕ "Q"Eb0|l6`"YaLYP6;p ,2P,@pͩ Jg5B*@9  )? 9 09 Π+0 @+8  VP G  0 aP 0 ߠ%1 e a;.Z p%Ѭ`,q0 pV3Mӫai"0v#wo'!u8ivP'v v@#6pw vwJ"5)w>CN7M5>/p {KrC4 @ Y*>.Z{ߚ6@:4 yB1Q }J} E |P0A V"/Նܪ]܅! d6m7϶oWhXl-`,*/+G*rV=orV!?Ugm. " "N=;0Jp z`5xU@$rB%粞֑N\+ -'^FA ZhNj%FM8{K'f6mi O$6V!/ rƒ@"ZR]ZnTJB/Paa+wfF&1%.oCKcevA6@e6$wnD!s\R4. OCeNPnL0`!-=(,!m)"q*́r^<\R"[*.@Gr(-b6'@[c*`r2f+ӢY&e'`o22NEġ]uH&=.9LNn-J24Bq+G3%)1B!!4 a.'{1J3 fp01/#l#j)6'3>&+<@A[kl0)$@WpV%Hcy)122H4`n\OR6N0PWm# >c$ p f- 9 ' P8XA1)@VRq00Y~&ip R#% Ez)3q9P) S 0B@9 6 E /:qQ/QC#%lq 0lرʘ .` <^%hd!@F;NX) .H9E>)q2FF$2GN,RXN(昌+<* De8q-J憌a~@)"% !Í%e ߔ-!g1@ -zr@c@ a=CQ2qC[9HfsѥO^uٵowl|e*hU"+V@g929"<``F'C iHx x<;\؁4p#<yȃ 8" ?B:ޠ!,#p#Џ \?pa!T :aH?p []RzKgf#ЙD-Blֱf6xh &1lXug ^FvU4zѤ(caЁ he^9"8ui NArIufv[n[p7THE"V 2`\<;ׇO>sO^uWHϢ@>s@~H+ ?X0" x$$!;t&xxĈ4$:"1xD40I!J x `?2'~n'08 5n`i'`J R,fR!_ipuhVp l'lp mЅXXl @ņ+>Mhr *ȡg k $%p&aTetn9OQ dq~z꫷z-nyY<34[%(_B*R TX#>(Ax@jූ H >0 ! AP.n@+#`X ön " xH+LK.HCb UAy0sMP^ D 'H 88P A & r#Kor0 (puq5x5,z" ke80 (@a2tҐ4B Ca \ؠ&Z ]@76AD8 xF`B x^ҡgi^ڥ\]a8=$~;23%@7xF6ub& ,e 6 `Jpٓ!0BCJ[~S( pg`X ,m8Θ;4SYpVY;mVi[8Y}Vr-Z^qhW8SЃh8RfЅua=`n f`9V t(Pt ܁m(RtHҡܝ\m1ܙYH ph T1S\2{8Dl&@L 0,aLYL3}ӳٞ߁>Cd S-UbV:߷tO<k+k4m;kk/Xh[Z:BbEЁ /-36 򥵀Cā(+_rE`ĐҠӱ0m&+)%}m6ּ-T1&BRct̝e=Evn3DN p MHQKH5= H˫ֶO L堎O@ Y,ʡDk2s3/x P(9s9G9?s(\)'L+k? ΀{StBIdt8IFlIp/ϻрH*$h,L@TTuQ ]ѐ6㼋1wkDϮZVi ǞM0 ])esu_e  |p,Xqq!6Pz'' ,86Q8Ɨw'NoxZqxN\wxЀwm3~,Q PV0 E%(@фC %zIP X@pv-۶n+w.ݺvͫw/߾| d(Ug(•Ֆ BF*&&Sj0VA%dJQlejV >>њeYHBF 1d0TsX2ejTUrÅ 7A ܡF|4tDDx:~\Dž :ip(qG#yT1`4F@l`wD c.\0D~C`F# #%ZGw\@/K(8t 3LCh@@3`c D1 3.0Dp(6΀ 3S@)\c) :H3IrP&tP:`P.BRZ}0J 8I$L1Lqd'|0k-bDJ Q-@(8 qB* BE)lC>@98`MWANM~o)AcQA<2 - Dc H!p<4W;8a 1 @ A41 x`0 kf*:5P  YI0́et@-7h.<9v#(`91i# 5$ Gn .9$@B! VhG4!uh0" @$';Ov >)tTȎvp(b *21RAW>X)Q"BT KH`(A T5V x@v@Pp 8x|' 4w\ #ʠ p'f sYAc2?4a4>xF0,̃扢 P2HNC~;jP$s@JmҶL5q "$"`&iCNA aQ'Gvs(X1` E(N!Fmh7@aV,a kط `'PQ0,VZ0 (HHdK#>#S` C T8"hQB>HE*1@Ȁb0VAA9pF% 7N 5Nw{}!aPz! b j9Axq|vz6>" j.вڷiH`f4*!ACh@W0Bq a֥nVP!8@RcI9nQ[L"`Aqj̈@! xFB,`[ Ƃ^(:/ʠ=z3lX" @C1-֔Ϛ(氉,L;8Ҏ`V !D@3W(Bo3$7Plp`hsO\/d!p`ط `$"7S& \ o؈@fFI1<C?  ,rafM .p5+=)~pqWzx8 \NK8 ]D`8:\@4czhapc@y k8.tΈR/de" 6As"" h@01j_;L`4pk69@À)p3 "EPi@,ppKEA}#T|5`Ѓ}I6C# Q,D0|chJ yȔ#2r*7"x!}.@9<]A p+t@O`ܾA a8mD@Y@@8\8I:@G@8RZ0`tp@Gp <9T a @ Ț x ,;t  e,a G ހ x&@olUoSlЀh&W [ l@v &^ G!vA Gzvle hR K䥀& ADZ@B3\D 5 cG@pZ @]W֢Z%>e_^0D a@v$[B^ FB&@EVcJ&ZP o$fRZ@o  &';@ #% WUvh>*m~DPaȍTlLnTrD~^eI#r @Ĺ &HnV.b.[@01c"ȁPȁܡ@A 谒hm:ܪJn+-Z,©^fnP.a@$X:dF/^2Nhhb-iJ"z.j/_0"p Sa 4JWWBrc'"y@Ĺa"&[ #*c ! qN$ |HRpn(;!-an\ բj aZtvhΨ^r$}lp^&G`pj tq[PX9c&YNWMpqa (j @XPbPh eB䂦 ˡL"_D(bh'5@R°~ tzZO&d@^  Vfa](F\#iy,{9x4@q(,jR0Z8uZ`@TG@<z& 4 q>Rc?0@c@!g5j \';ݰeCט F"4**r )^` #!f)֥ , Ѐ @z.GȴQbHpA2Yڀ!' xb\(glJ^4I ЀLs]W4&hX3@#~O#'G"BX33{&XMZx$3b7F^W>`t@݉Ch @,A.p(f Z+Dp` &fɡtWOҝ]zruGEF(bXG& XA ~0o t@՗_l.|" 4Av5u,x@ |D @Ν4 :@&U?N! h8!LΦQ(AA3Ct Գ` x06$JcC9`:G7PC8|7HtE450Nni&!@ n% x@$Ak $* (y 01Ad%D)haAu@,u@A:P$E‟7 @T0NjGd&B ,DˀP u 5GA A_P,}@PbS PB@V=DPA  2 {" ;tA@ {DG92lZXA)- vޖ@X$hHXAx#82@q$@ ̑&pB(|+XpKR0@/C07Z1X"lC40@(%Gȕ.@|;} @ah*c\':eXF-LAxhi(h}((**hd)@ `BBYW|x7&uwxy@zA 09S  "6L4‹$ Hx  @8@/\)BI( Ӵ3* č&A<`,4XI9.@$לBp)2Q$26\aD:N4bH!FA1yɃ! 1AU+E0Ʌ!~Q%*\xƅ&Ia?'0c ~ppa%v[!pth8fnA'Ifhr6Maph e cQtJk.8@3QdJ6`RHQ0AE!V! Q$p`+]`Î82"hUUV HeTC6VQ@Zΐ ZHaYF(!n 0x#1h:`*0x+xC??1 ";:0Ήbw-'XH;ƸUF 0d@PCx;bCv2 l`^Avڡ^f f vqi&rT(:"f(@f"XaF~0un ]it(#8f%#zh`k(Ђi :`^<=U_u(La$vqNs`$Jst AE(h"\bؠU@$Ĕ Z8AH$c4cRR\X^a58!"r@60rɃ@ W+tlp'``rӄ]s !F V8YƮ /B#`Ti4nbh `]S;00iX F9IXG&SPҠG'#@X3Dq (,(6n+Z#"xD4:P*#0HI/Qpm ^ (0[COTl.yK_)9@@qGyB+T,E2P DBL%v$BQD`)T`hQ>0E*0Nh@ @ UXB@"@b  *y )(b@ a5(vAX@˪1(:U#/@4Cx#``n<L*.z$ٻ@PBh$2ð8@R#A =B 3ֈ#G)"PVbUPuN[Rz1Fr@BOdbd[$8&! t F9& =F4@(CZFd:`>ѕ ) lC>HA>Mda|@,aqE&PQ!QTaLX)@$h`%2!Ǩ@7 ^@>O 8B6J' 5WPd  CNxpqtru}%pп4ihXP|@8NИu.'_ih#A#2VU5W AiP А'8 )(% 0jDCaրAJ@P =)*[X@.jP11f6q/ #7/aghAXFbփi`#Q kZZp3, bVP 0 2@ޝ` -o . .LQswV0o `>$DŽ7@ B`yg!-hQL;q` H/7b c X~hB@"6N  P,XzRIK.43zhz(`Jy~0 ! H@D 5@`9;ЀP`@+o@.Yӟ GTp? h@V^_<,WM/_}?7 n=o}H՟~;21V/ DLlAt"h@Lbnb U`&Jg&l ^j@v: z@ H#gplb`TR@'"C0T |g'} `jW $hPP2@ N8"b~HD@ZN kzhvPLF"N Vw i0n@{@ׯ qq`L~V#PLJ w z` kѹOJ ΄$vx#n`1CMޜE0/ BP@(Bl\l0)h' %':g''1l8Ϡ :͒|ƹP(ʑ: ߱뺎" k'0dⱢJ _` D  A^N!e@!Ñ!2#R"'s(t# _qo e1(n` ptBI8%ʯA@ a^- P UR"`hZA25  rD$.adj)sE }8:Rp BA4 <BA d ("~@*=+2*  8%ʠ nbhV@8@ JA D@LU@@@  @ :)5A r׈;ٓ?O 0_.Jo*`^\6)KY i9w< .>KhI=RK [qDW<8'+xAٛ&K@CQBr 5#M+ٙ0k"QWԘ^qtXth%/u%%3'bE#Z'q@) &mR-tYq8aEt8Yj@h4lX,cM={gG qZ B@V NNE@8dn@ A[&8J% 8NU nl 1RX[\rqԸ At B!@ apD D?W+&! n2SBA( a.@aB1; A !0@h8iM[ɗ\59ҡ`t!A`\!E<ʁ~d ڹfda n!ٶ:`!8```p-W Ap.!\2_2ɑə$ R$V4OBtAa!w>A `haџANYV R !VB&J!.` r XaxmyӅ?$ "a"gA(\>@ P( ' `}>e@"!lbtj "taAؿ S[Hk;Q)M8 a[}*@z,p! AVO!i@kAK^ Z ";g!,>1t ` \$  "d _򠲳eՁ("0&j~HT"a!~`!*.×1J9^YAĉTm*`…! ~[!K!V"u n0ϟ"~ P1p>AG"6aUI X H qA2谡IA4D C)f±CD;6Z:Q''B Qs&0V NA5h(! ))B(jԖA4DQFm&UV확QՁ^ 4C^$JHQec$I˘3k̹ϠC @" SABU5Pn,$hp *T81D 7|;bcC Օ HA@)M0 !;oXnphe,X %(]x $PP` 0@V_Tq@8A;Uh %N%cv8<#gЂ *g+ + J… A ,yc)  8W/H 8 hSGZ(C XZx 86^C;p1@t%ܰC7 1_O e;J`t7´(jK^C|)XAi뭸檫 :IR Zhd p dh!pBPHUY(Sjf5@&gK)mfw A+ t*A8\@0@@ taU"L@.u[0A OVxCF1 ,2I. `+P 6UِCA{d'6-D=@V&s.ЁJdg7 F:?03dd[* =p-wj%D{aTC - -l) q,7:ò4`iq!wnW1 vɺ@+NS14D[Ẑ %pB CzCa<|d5M߈cރ6仔觯"c2 6080*`/v L@G+Ip",8qF /,L)[351V4W6sa ``+A uߡ R!l/# gy_ %PeaRktc爽mVnc8@V[A Rp!@)Q bn M$@԰3fcp8i\=@3 eT hA Zp1K,xA Xἠx6b%a! IdAtn '8lj. :*80 ^{5kPL@f #<1 B!ͨj< Y-PZЂ@)j08 +! 0A+t@8A p3@(ՂZNeL 9Nv$A:P$A X挫*׺*XSvzfWk}իf  |(PIf7 Q:h*FGKZy B/ 89@`3TC8z[X)h&1 ,F ^8#:8SЅ*1\UR `(`J7A.W'ծ/U9H@Ě'd9o*}^q2pg%L2bj37lZdp@-( B lPB1A+NPvDC!g [a461ij [qU6','4t l17,68kmxP! P@-рP@Z` ϸ/tUNse ͝=5٨YT_Vm[/L7sp @p@ հ7 j\#G l09 | 3ЃcuSV[\]DnWsηG&2%$P4`倂<E(b V0 @PXЄz , J@8B.weUǔ{yBcNfU\޷w]Cy|_Ɓa  68 @D` 8` HFߣ7C[ <{dPqRiG>o`bVi)bG!۳T }@5 |UŖ%\eñmg5d62ڤc87TN| aCHM5e-C߳6G(ŒS "FjYH/3cQ{CB*~0kCt2A1L)_^R%g!v=1l$eD1wR1jMTP`j1X1(Z)/A=Wp7F-wO脺%OH*-9P؄%,'HRH~g~G02PjX0rTxwZBXk? /`"p 9pG0 09t#PP p z@' >a#(=:q"a  U5)% D'HH7%fX"")(V0590-.,ҍF91P4/(:pJ(*Q2SFR5{"1 ZX~)?3V3ՏY(XD^0~`(UH{2`$̸c!eRU(, X!fHIf (/7@ ``81P"Ѱ0 @ /r) p @  `rzWg UcyP  P0 h"G5=0 P  0 @-Q  0t  0 qfPm ( *51 0JW7 @00P$0I* p Q 9!QU )SwR$J f%x0 0D0 %0 p'tKω @90@9z@ ` 㞓,ihI9Q S @0 H<G)G̓02c(1= Iz  `(*P `p 7 rp Q? Dg#`P  ܠ`yr PP Zp [Pp uV q W  z@;`0 p P -xPzy҂p 8Z 8r@ex װ  ap ZP6 *n"0@`p ?`p aX S-P;P ̠ % thz =J ǰ G Dp!rP /q0@gyz z% `$@ e8`ߠ&Hz 5 Gz;@Pp)05r#@sB Ɓ8 P]B* P F P  ؀ '! @  @, ` Iрˀ0 c9lP7R֐Uy FJp `; 0 ͠P?֐ P ` Ӱ ! @  p )`P0 p P b) @  jPP @ $`9@ P ր Ϡ eP ˠ\= Ұ @ п=@ P] &9 2`P å@@ P  P% c;@{0ý `1! 2L{[!0 #1$8(9Vq0r$ }<%! ߠ9j p 9 p H0\P  DiJ`@\Zp  @0  0 5jJ  iG T @ `Iu 0 }| h Z 5R[0q ``TS @e  V ِ$P0y 0D`1 '?@A۠ ~;A P0 J0:0J P' " ,Kk]P ۠\E Ý@ @ = ælL' aG?@;z 0@/;AP 9YBbeZr` e pP P☼ @ p 0sk,A@ ء@3S Ml}  ``ߠ  p 'q ']p l ڗဵA^1θà 0 a p Z0  @ ϧ =.03~p;z i a@ "0 ~CP0 H jR Pnl͢0 00  rPZ: p PP kѰ PԠ f 'e 0 p  р=0 HZ p T @޽` 魷)P5 / JZD2t7@?0t l ^4 0zPJPA \P  A0 ('~ p@.n `mVZ@ `Dp =P J`PԠ Xk '@ G  GRMZ ^=% PVepR HP ? Ԩ{ Z0JPЂ? P5-5 0+=Ā \IӀP98Ӿ  ڲ)p$T)9r@v zM#ʎâ9!GG=Kc@/iJ`(*uVS 1=@ETRM>UTU^ѢIGz:9ha3xt:Ru?JD֬׶kJ4lr5Lf ;X(B;gkWzѢ=!q׀cNe6R䘛pSĴx,e DKr,~s0 _&%6,+st J^c0ʁ"Frr~{_ E4QG 8Ь2jJ`f8^) H ~@ufLG X^rLP'g4=9np@uz_Ft(V9%8Pb&!p Hg_.*`g$H  pxH?pr8i]nH@jAtFmI 7)G0(R9QbjiQ&"XcE6YeML)(PQƨ ƚi92j%Z+EHiaR7l#&v@h!f0p~F f;J J tJ ͨ0c:ln)E^ vX bbEMzI@ivfFBI@cd`i99fJa% a8 &dpxAN t _l]F R>efx#腕JPb(ہRF b`jt9f0T_]bӫ#kٷ(ƖE*!9ґ7g5f(ZbhR0X/p h~"j ŃNb =VƮgfqrjAlY`%8A fDQ` Hp  np2^/ HS(`CG7 P\ h$ )1Ѐp?Є@DpmhBE`N$r!:{P 1#E `&1F1 b@e,A:u H68؀ϡ$ TΐP`]c0I"r 8tB^@LS7:҅)Q 02%-@!Ҹ_ (nt!M@0 DD$r̛($ Ȁё7gt!v'EiJU:dA pl:At`(= wJV4Riz(Ԡq?xQvЃ,h; Rf,JGSNtUyNU2jvS4L 15T;*T( $.& "Q (; IKآT( zDnPNvQw[i ?(@o[1j&(3 4ThU`6TѭO\mHh% cRuyp`VXJ`7X) EĔ1PAn ٣ F TpdY%XAP)X+QBĴYJ dH84QjpȞ 2lϣu"R`W~qIJİ t_ e0G#P f+ qv7P Ѻ1أl4h#8~T,pV[-3H rbĀ٤~ʍrcFà|2I/uؠ(6J]@8V)`3f#0y B&c')Jq/ lT`ƴA Ʊr@vR {2R@{G01R~ P2ʹEBSx3wD2 lVv~a+M *Ё>)1xV6-yutQD6kYϤu=uW] .-CȠ$ Xf!* 7A Vvh@qDDPb\y#.bcw pCc}#Lݑ7 t=đzZc~ ^P @ x&@"sS G pu{~4ۑ_|0< bD4)pV`nA \:~K/S8*˜F ZJ$(4@( jM jr9{I*+5 @ @. <@ܲ <܀}C+< D @I^  `8tI==÷=7; X,@i(82 ؘKڝz0(k 1y  P Ӂh"( Y&q$< |ǐ۹ǭH_ATȅ<)JLOH؂QMHxf\_p^""*ni(@R XQL((n078a"H9h`+a!hb;d@6+`G: ͼ*  3=T (M `p! =pw+Tr/XsN5gxys4/[pKKx<% `s@  jVʫ E6+p5P+Hl(r#\R 8<+Epq*(YPZwu|u@ǷP)bfvvC@B$ 3`3h%-Ȁ:  '&{T#F<;Oj{ "؀pRpÀGh4ہOvGP z+R,ĺyDN6yy1緽ɋxF0!wc2`č1x@P!Cta+ Աr "|Db0Sʜ8(1'J 8\C%0rPBJ1ƢkЋ8elZkX_%֫ZcՖ:µ`/.l0Ċ3n1vH27 2n„edȠ!D 9n {#@/pqB 0tȠqlXHaom"׋@x6p ;V8A %hĠB@ w>o/J"J6;x uհ 7C meC!(C9DUP_ZtCJjŀ[ NEBPPgeehiţ IB3YhiU\Ldq=_S*d]}Y 0bI9cey&i`l/8 ,pXЁy2 P/`m)dh /P1pk1Mp`fnXW WL6|`C (l2 88 R  Y $P@z 72 Q A D`q^AL4T@MA  0$a[QVAg3~ٖ$)+0 ;̖^  hb8݀= C~a9pPB = BzP`$p2Hp(R7Z ?tL E5@I $X4J8X?`oli$U"zTӯZC l ɔ-B Ls)豁Qh!lziq +PT)." \ʹh^z®zP p%L{ ?< CEF@95@8Pl7sW@4@ x pL5RN T7LzPL$Z W MTk@F`@/pv0tL"{ Ȭj bV2j5,;1 tIRxN `* 6`\@*"w\# PB5a sYO jjCԘDE; H~# 07` F2lܢ0@[8B(NPh($(E/?+v`H@Jq2B+z0x8F4k#&P+h"# 5J@$ a&hI PB) R(! 84@R'R_ E0}A/z!|IN-pP,@1 <VBzaT4A8kD=YzS<<*Rԥ@axh:z%dic>4 T87dЀ`F58hC8ag#X318+q!CײT0vTC-@5 :qV@ F4(cD:[:X2CF9q>`hF4tQcd0.f49x8ЀRúMUP8-3Bl+&5H1;H50@5QTlC0 ssf4`1 p8~mrF)4QRrF/faV,7uA 5S 0&P ^LzaJh4ԡ Sl(-Fnat(@4g8DX2S@)QJ6D`t018Y< G( lLp8p+/<@밬 oʹ:%@0 $C*A(nqu(\0jm6-B1= 7N1^\#̘f@aGƍC wLc"g``m!`1ҡ2 ogR˦=6Rp$6H@ V`+̷"A jl5n8B`u"j"hGA<@`t@Pp8B pir ۻ+j[ D6Jrt@yVh!40 g, `{@ QJTϐ@~@ )0@T͆r(H]I酶5uIdͤ'V* $D~LFԜ BEEZoxFFerFN -^N,p r̨ƒFN4n D.IX GʨI ^z@kao,<*VOEKD*>F KP!n,kdn(0& `K ,ZZVVeQlDB TQ ꈾB @tTѐAl ̨qohXVT .M,E0ALOl\qJBĈp /mF,/(,0,d,Gdm D 43 >b.l[HJ"/2`PP Dr$*A(h8=ߦj@#0)$H P!a#c zÈ7 C?+1?@A  ?pA ZG&," jB'怅 հ&q!+P#8ÊSpn=H "Ef*s4I9$2֙n)(NJ#4Bk)0e|< pfj``8 ft a98P`<b(t~Q j ʁ+L_gs7EeRP|"&` T"9p*2Q 6h`v|$bH4LBqL S" '{D )@(Ql>0䁔4pBfV j( T7:'@pAxC#9!yXPЈatBZ4a M2`& ``A~65,(\~P ;(H&9q(Nq;p-1 tD2ܡ @ 7HN" s|JHX纞CpeGQd=~\7XJ0ȁ3 jX!:1I<8Vp' 5kޏ uC!́F5xAp @%`FQ@K("1(gn Pt#,p" 1 T`dp2 @52 64,@B&i؁JV>+&;؀ `WCtO &R  A :0WW, H;׹z<B 47^P" Ћl H 0 l$Ђ~#=hʪD8B p<͕A ^dbuJS7BT @Ak @@(Cn@Aa (A=@ ~ =k ,FE RH@) (ֲ}Ry$ `A0,A[@Vh9Z1`$ &%h DH/ h`%("@!F1CvW@ X@]r!HOYLd R<@Sr4k2NjHPc!!Yv Nm H@P(2LH$c `0r@c ]bdX"hl f @PWY%( */*P0pA7{Zny(Ay_`*7 ^U{A$ H k$f<鍒 n!%;A4,;v@KvqOl;kx G pHYO1V NJ'C p,Q UWYը9:+ 4@)-uD31PegLxΘ ޞ|y[e&^{Az0AP}cDlo``?qͯL$4` pm$8 OܠO@vP=E7;R s_RȮuÜ_w2Ϙ(:䏼N+ Z} O6}P$Pۼ2.oBnFoIä"t * z)^d@T4A:NPzlj ϲB NB!BUl@t n`>@zAZ鷺l Pp %00t@+`˒320SM!!B@Aa!at>@zAU:Aq@Jz  0"A1{Ա/r999O:31N 3;r0;Co#YaaA@!$z``N aJAP`!~N@t` h*ơϠ@&Th\IN!́fI;Q:"SEQE.1]EFqL!APP̰€܀rFbBaa@(Ҩn`@@С`0l(*tn`zn@(e0! EaFUPSt/ Q rR-ZL1#b (@a JP%B"!A@ @-K*`#@@r@b@08)@ "ҁ` [#UP \ɵߐQR]u)R5^3~$(Nats`r1JT!t"PKA@ܡ 0Ha!aznAV́K8Vwm qfu]Q2g1F%g0 U^6i(@ () "@4 vA6/N`\I̖Fb!BhUr(8VZeǕh}6R#;'9ѵ!P/Ur QF6tE10@`v ʁgO\8  v b @bOS`du7l@w `\6l݄V뼕hrs!y+UF1:.Gw~Cwq  Tp`~`(OwW`D|` /z- ŰtmN^8FeRQj۷:iK`7)~:ra/C]QQ5+h鷈+8b.qpBboL+9YlM'(^hN r|_qr )1!"<`k鸎 XAA7sw)9۷1&C57xR8/)KYԉc`DHl2bdYp@2@TKn"'`/q56OX~H T̀#1T` Ps7PIfp1I|Y7"sh1y%Y#rh@bp ]2Vp*! D XM/ NYTnǠ)n{y% /h.Gpq)n む$+ |h RN3B ZbM}zߪ b k&A @4wq*@u/ٟzMDHlD@XYZE4h[Z L4 4"D`HbB{GucPZ9@ 1h 062(*M)>`FH  > 8Հ|Y` nҠ X >@`A BJ >F @ 0@ jFFޠ , fkbny j `/@ Ԡ n&! ~@3  d-ء=' 2!a2` I,!&` $hT\*J 7f7~#6A!ޏ#9R^5d!J`:C@ ` Dr9`@Sa@ļ ޠՀY ~BX@H䃠 j&Fڻ7 b D2Fkl@>|5%8\y&M;rD i鶕 #8*CPZ#k!@2F 4СD=4ҥL:} 5ԩT65cԙMsmʱJ+(S-,  FeEZSB&RREF)VT!FBjUv$UDZeHF–UQ.5+`GC𸁡ɛ6>Tycΐ<<.ʆtXp'+t,`aqO(Ew; F# :_`b W8i҄A %@4S&4 R1pP@/2H%DPBN#qhU.c2Hc62ՂV\UI(F.YRZ2Y*$h'(YvВ$C*E"-P)D1 )9YԲ$AN\0%5lPC}a.\pEMA8!@#шc^5{p8al7 H<#` !- С

09C 6B -/B Q˹ "*Ab1 QA n;b% J@"'=` n9N@ R$B{#5d5pz``, NC`/ jԤ$آq#1 zA0tр.&&P (! = N4HQ Hl{'? J /)Ҕ% r0A `P)TIKHE`/(PĠuK h`h0dG"@= &M|P0Ȁ$`pPb=u$A Dܽ' H`{| P p,GBK @ yV0x@4MX v0H BSPPDِDcm4(;O\`݁JP Eؤ7xIRl } i+`zԤX&)F4JeJGrj#Iܠ /8g> h@l (A8P#@ 1 ($0  !iCTl[ hЬ1 YP@pX[dы (Ѐ\ʜC=F}å.O= MjM6eQ`=hcC.VXtzp:q +4@8E0z@(Ő80RbH<l A~d8jp -P8NӁP(p~ V8ޡk()J!@}+lߨ/OyĠ$D{{~!1 $q90Cԣb 5ьth-A@F)`o.sq׷wR@ f:ьS 3pG=@ p p 0?oq(7`zȁB  g~ P.z ͠P @0  apJ 5 Aq'Yy%;pp P0 @ 'x2H &h  P!yM'zc舏0 ՀpF{`/ 0r`e `x7 P p  0 8V@gG woP= @0 P  @ Pр@X PϠ 0   0   GFZ$w iS$0H z I r P  0 `p"@   P8p 0!oo5r WJrmp J@0 7p9l:) P UT?g)z j yٴp 0 p   ` ? p 0  J('װ @'eV.54 3q p 0 5? ggP a hxao驞#4MV 0 z_zVp W F;Pe Ϡ YP(2U G Pp@oe"W"g Z7  Z0 P]T ' `rp(` Pz ewzɞO k(s0?  4` qTPnCӑ;l 0Xі"V"eoؤ`n4Z"l5Єp 0!2嶧7l8[vm"Q*"TNuXdJ5CZn]EAo1@V ozp pe àfoVTl@;}%ZW= ggڗR6F7(?g9:` fa^Һ^oV6\i~i}IQ@El^*=]х$a4Ze8I,IܴV IJT Pm!qlcR֤VH6Ѥ횯Jr)iKшjG+Xe@TG_P7'E7Aŗ#\t U@fB4E=PiA$S4 `'RN 4o,kHK0YKQ!UEK ?\uYTbAM%V:@M2*y\*)Y%WIJ "I8Z(:z bF1 pfh$ƕ$S"1?X'B`=p w? X0Ph"fU2! /!AH-6F2(`)2(Rr`0C3d(CF6B|aC@ *38bA )X8lܰLJǂ Cի7(4XP H A vDpCk1- B0R[` 4cni)A3EvTh _z&]iԩUfkرeϦ]mܹuE-gb @[ZtH%NTl2 Bi' MTe)lА$q*П9C7N@ƔA6bTP#% HU>YURC{*[`YPYe eMFBh: .HAcD%v zgb9tN`ui1 QktpHi+8lN)icz)`tG`it)#-a'PVPg pdSVye[v96FAc9$*TT`deF1%r-HIb8XCMH`T@"3V0% tamX QŇ$hqćr"Q0CMʩ DPS &&h@rg4yMh,@P"Oe8&purP4]Jā"crnIڗ{Fb@*DPM%SLLqh6$d ,e(fɢ]d C&B:h H !s,!6B,rq ,f@h ̡Rp 7 01С $5 uьr$ vP`FAG3؃܀_B r p~06PPA `pE :H5Јq|dd#HH^%f[D "bD*NpX` @FGCOEV |"ZP3#榁,Sfaɂ;-@r܀z Dp32@(p_0{9DPm1048`lc?g1D5 Q Bh2l $f = ` `6ь@/3P$mzST,CX#@(栊V. H@P-)R]QhP!ȂUR Ubt'x N7Pg^(9d*AR+p ""a /W m`AHrs&l t0H[H) Ta`P8ҡ R.~Q5`=Hmm`4I_] 9̔ Myq wk6){p^}J> @ r˲m ȉ A IP ) ,A?@a[]?P= B 4Ƙ * k>+C>ң?&.Ba@+@2,C3 X8ip2(@P(؁hC(DCCDD?LB"D>+dX&BȾ6vD0l!Q4GLqBE!4KKtDɴI@[ɱ xR] hRxsx؀k` Du6S Ȝ̞[KFɱL,ΔK ͝2n8}ɁHl(Ph1P/üЁ,3{޼LlINLLlNt$X^ ϘEhi+n`iU TDŶdRdO{kOOR8  )# "ѸO|+& =|II !KO-ѓ!p# й3 }D{L,BuPG@Ҹ $ P/B/O? e=L04Q/R8hX@ EN(" [S=S)R~02xf8f"3(qB SJh Ԛ2l>-@@3SS)mU+ CzRzی`U^ Hݍ.TdMXY[h @`&30R$>H&@ @8׬0W0HxMef`VXuZݞZL><=!U Q\p 8[GQG %3]0( \@Pȅ9(qF`+RX@„O(%p}Qf7bE஥=ݧ`}UX4ȁQ09M$ApU PHpS1r-OZL0 Z؂H:TX!C"Xg 8bP5+PobĊH]mZ:`t]2.3F؄ =11SSh 6x`r3;H0@8U \J 3&8]P  @!7p9s(x/F53G3e@SPs* X;%4Ȁ`A%S(X3p%3!YHI]YQRLad9&Fha[EfـЁ,l w[2e4*U*Pr Ȅ=T&X S`SQY SAZ5YhZ HPX` %^Xs `Zn.X]^h Zk$Й^a330ሂ3Hx3Ё6H 0;X!60a -`^1 &0W@iM=2Vh(b/c~_~J FHm `L؄J\[{W~΅ Ӑ)0  X6 (MЃ=نmoH:-ooo-@!HvV3`ؗ})xUZ~7w(PРX%XN(Œ>:ND qqwqPh+  o +8r$')o'orG:0o iՋ Gw=U g Y('/GU@3es7';HҋrNrCsW AT& I1^: !)P2t Bm Nw f(8 3d8@FCXq&:P*l FI+dâH2hLFDam<(\xqV)hFAQ@h3C:4 "IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0IbL2 %Q_<_2bH N#5dҘL)ET13AHceF 8R4`T&j9QL5=WMBP҅#rʐI](2(PjFt8Y I(`t|[#ħL@ ! ,! ,! ,! ,v}T DD0B*H A+RؐŌ!rh#H%F4)pȁ(->tGHʞ=i*!΢! ,! ,! ,! ,! ,! ,v}ǏȈ1p "(0†tGHʞ=i*!΢! ,! ,! ,! ,! ,! ,v}ǏȈ1p "(0†tGHʞ=i*!΢! ,! ,! ,! ,! ,! ,v}ǏȈ1p "(0†I%Y\R _e?^)fwVX{kgw! ,LPBFd h!… :TPņ'^,Hq#Ņ121#ȋ Mj4q%$=f(%F)KBL9SΏ8! ,! ,! ,v}T DD0B*H A+RؐŌ!rh#H%F4)pȁ(->tGHʞ=i*!΢! ,! ,! ,! ,! ,! ,v}ǏȈ1p "(0†*(ѣF"])ӧNBIQթBQ<@` KVlٳfӢ]-۷n+.ݻvݫ/߿~,0Æ#^/p ,YP˘/yϠCM;Y׬7~`}߼Mȓ+_"hXfF-@CHB b9(7"igxީg|gxVH !Q&f@^RGu[F*餔8Hi"覌zx}x訛rxh A EeV魸+j-DB%zRѬ*`ZЅ25費vBtiiuIRtIf#}ċ"% QNTkkAP~5D Ai/Andfi ,l) +9c/!M=_aqA*$| _ŒT L5XS 5bоR,d/'0ϜB93(pd)xdTe4 Jr1$)1 &r՗N:HsM:T@(W褗>ڸ1 9pK9 $`9/8eC` u3K> d>LeG8|#*LǼ2g8@6"C؊ rkL:Ann|N*+<P kF RMJ dXXӠ[0ԧ@Wjk5S=ո5n Ygպo%Z֚+z֨&CMmZNH0n)M낀N=S`ܙum"`Fb:ޚNHMG>5Om;\"w-[A8p 'x=D!Oy5q.!4P̻=L.@ @nc B;}ޠSC xօ"pF}1Cpu׿g:xou~<.vbA@Oӽ'HOyG|7bdzo&3?ӻ^#?EWi|O>K/|Q͏Ez[j<2R_,}?~' #v@X [BzXݲ"z x=% x|z'z)"X+"xG&؂A .XɁQ6<ǁ@8Dx!H#aL!P8Tx!Xa\`8}w~d!j^؆pȆp8o8i(vȅu`|x{[臂ux((~hf({׈w؁78L/wgS(0x0xBNHzH|H;(.Ę@h~ȃ!hqhJX5 h%:丁^븁q6+hh1ȏ( ii 9hM " X}(s0'N@ /X59~֘x< 8Dx7J|ٔǔPI|8̷V}(Yy}>ַٕ`i}7ɕc|bygfWnizXo۷s#t{F{zp vy)QMYzbDy ;nIzIyhYyI9A phq tR3)sy)gr(a t^8өuRt̹'ٚ'OipݙonYFm iq9pNx pؠ ׊/ 7 y'˧o_G"*(Zp.jȠ1*5Zm*f@l-:6F u&:Iz7~MJKQlHZXlB[wS*4֥I2f^ʦ愪 4Iq@fu|h^:GJKꊏjiF9ZgvVYJ:eVZe]UzW0'nzbzw敫TjQz$'ʺ\dJZ%ΊǭEB:ڭxN%>:x%j:Nگ J>wMFH* [ kQ8pgܴQM+"2BZd,.$2[dDz1;BF[)VHI{>ٴPk>O;eㄽi쇮^K6HWb@cc]# l2c#r[,Sx"qa[3/N/B(-z۸ѷ;!!${+Rr)$y{ۺqk 趴%{[8*R%Vbċ"{" ڰ{"ZKw|ث"۽q;!miQ: ZkozA/|;a\a` ܃zȸlX(§a&,l+2<1\A8|855,8 hEwFlL"2\RT‹W,VhacYJgkiqlsu,wly]8o }|W\ F,Kmɘ/ k P' qjG} Gw ɩ%`k]p 4s ui<<'Ps.d'%L65K'tD,oV<\|<\|{jF*ѻq =]} ="]$}&(*,.0 ! ,bH@*LhÇ#JHŋ3jȱǏ CIr“ 5\paɗ9 I͛8sɳϟ@g 4(ѣF"]*ӦP#UXjʵׯJv,Uf˪*P؏}ξKݻx6L-YmV 1ƒ#KLr] gAu6`"AK%Ϡ?S$('QrMԲ {KJ35|x 'P9dz_ν{ËsԚ 'w^ٓ۩Ͽ^|HR@ '10i&F)~e^$$ZqD 斈#VNg!jyuh8w8v8}$HS9HS f(;c+DH`k(ptb9k)cN4՜s4!+G`. 93V٨Tr)s:#'"  11! LPIR 9# 1l;v(S'u3(ؙr3"k$d+! cI$mwb3̈ 3TӇ Wm5;z-'9JC*0g^Z" IoաGkNFys˔=SM?^m჊x,"FN2x& N2e,*KVβ].^3W,2kfNOȬ6n3L,:vγG>s~tE,BOІNAFюV4#hHSГ-i?gӁ4QYԦsS]gTͫ~]-k3Ǻi5|]Y׾re$wu-gWXe=H{֒.masv;s{63o^'7|s;\ e\6 ,\~x-qG.8Q|XqCb|#?Mrf9X6osn_;9{}.t%:ҫ{WWN7nӣn\S}Snuf:MVflY=k{f.wƽ;#{GV~wlX>?|b x&e<Vk3Ws~^=/zx%=Jd d -2}K}\U/|n%>zUGkVSӿS}{,/?=ͯ{d?/Sgf8I7$`7b xn x bxy8a(X4a"8XC(x5'.2-W413x c:.9؃Ã@*?8"F8(EL(KR%TUV@_[Vw!b}!X8pEl|i\r(}qXmm8|!Tᇂ!XAxdtw~Hxg؉lj8K8hኲ8XxA8uoXx^a،[8X!ָ՘@܈=X:A縎7/xx#a؏ 98!   Y (AYAnE82(Y .)- 194Y68A>!=;CEGIIKIMOQSUWY[]Y_Ia)cegiɐkmoqisYu9w)y {}ُɐyiI9 鎓ُyYI)鎩ɍiY9) ٌɍÙyiI9?P ^d@Aә]^E؝9\)Ah߉!칋 \!p ^03陟! _$ ZZ! ,[G@A\xpÇ#JHŋ3jȱǏ CIɓ(Qȱ!‡ c| ZtsѢ?*45*]ʴӧPJq eeS`<+.^8 KwK ˷߿È/^vR$WU /$VϠA ӨSN'<4󢮂.yr]6E^wW+_μ/ 2N5^>yW7^e8m?>68ӫ_?y&z(KJo-rI|%ށ&g[XYe  wmaYGڂ$h≂X NjU}- tw 8Xkl#L6y~?u-BY r]v Guqm_64 tdgN)t${b!8'@gN$ߎHV @HGYI駠"%Y؁c+ pazeiٙ}93 )k챫r"k5h6(vorA`aQZ\r1P)Y"+R5*O}xR+uHR!!O[ZXV#4,@ʡ`+9tI0ly,))|DSNj'(ل#֣ͯb&`YpxB\B@Ґ)L7tF7-P8!XZ:ZoAFcfVZx%LN8ŒCS>L܊2+H3Y>l2!J5dsXl誣p8c@v|u%uľ-H[lMVG Į(}TρVR(7ml9LpXE荻AC<Η^;OI_:CX 934&->|`o׿ Z0='őGCmIL םk#4b w|{8_Bc:} &jN̊zH* B'g!"I*ัm 'b:Q*8Hbh7J0xID>‘p v0716h&  莘dS)"xg"bHbQMZֹ2,KWR떱@>;0ɇ:TL2f:Ќ4IjZ̦6nz 8IrL:v~ @JнBAj.'Њ&/naюzshF=JRo(&HEҖ^.)3W ˴)NwzGꔧ@OJTHPTPRJU=X]Ty]`eVJVO}hEX%pZJxE\Wܵ=^Ku`ؿ=b#KYniLT C>2O&7e2)TV&hR,s9[G,f%3y5Tng,P8ӹs?gy3ASІfgmOD3:~<-isF4yMSӞgCNP>9Mjmd5YSֶfsmR^t׾&L`>LCZSe_$56iRֆfIls-neU$7eyuPdmTfϛ;7+}+7{;g:3< . FVE8q?k9<).rܝ$?9.r~d9̏7M6Us>2ܬ/y9}.9":ҝtKNwkУkzVvֹ ^_P.'Ac?{̮Jb;HvN 9{;.!0|s,yd<7.= :~=FoJs^)^|/T!>MrGEIS$ӿRd5>5DHO"H/R"?sD*׀HX8Qw\r,ǁ"($~&x)~+(-h~/18~3؁5~79};8=}?Ax}CEH}GHI}KM|OQ|SU|WYX|[X](|_(a{c~e{g~i{k~mh{oh~q8{s8~u{w~yz{}}z}zx}hzH}8z}z|y|y|xyX|Hy(|y{x{x{xh{Xx8{(x{wzw4u#H2Xɨs̶j匟)X'Q#E('up ؍q*csX'D! ,#H*\ȰÇ#JHŋ3jȱǏpg L $$ȗ0cʜI͛8szϞ@iihE- :ySӧtJJիXjU@W. J֩٦Ŋ,xIҠ>RܸxSj˷߿S\: 9 Oǎ^$%rlخϠCM$SVXߝ9.goK Np y>fN=ȡ}7Ëo]&i^}(rf>s(URa-FKvvRq"s' a u4`$hյffpvZu@zv_!(MAX؈(&Lta ĉsAȒ,cp a["aH6lG [%R:aR7P dm&袣'BVsNA|yAcЙ訤*q"^{&䉑 r8*tHhyۃ:h8 ٩ǐv<k>ԇZyP*&GՙA]^uٚ]z),%o=)ҕ#]+*5JqI!BnJNJn0A]jgn祄A}lxI,(s D|Cd<(IS9'Uuu< G]\md}Tla<2J-Rto#Y{S+ـN![pA]8 T܋ֱWڑAWjm F85-|9X+d;VWIG񸛛J OEY]a PwϽ,D$꿖b^}s?\y?+8u݋2bI 'KD' +\H4FB((L^*8! ,+#P L8'A *D(`! ,! ,! ,! ,! ,! ,! ,! , ]H*\ȰÇ#JHŋ3jȱǏ CDH'Sɲ˗0cʜI͗'oZ$Ϟ yJѣH*I@ӧNB*tuBVÊKٳ Ao+7 x7)W,0[˸nAb,B pѠ>u0ky>MGP׮c^M;uX͛5?|l[#puYУK>Oɂe߮;X۱yWuֵVN˟O_>'RϿw |h`&H"u$R߃."K%V\"naJ"Inh(6 ~|^-j@@#$|']F6^R{)65W"!",$n&d+$ !nql楗"ti'Y5'_'ɘoncK$2 2@F`LdX"XeK P靠*ML)AߋZBVj4w$aG"x$;Ï= $4DzuAe#Vk-+Y$4# kH.bH:$}@"+4uy^M:笣9#z'|d3Ϸȳͳ J.BOT *T0%ۓ>';!oL>D=\Mpmݢ2"  %0_rxνL(xD'c#ZS + ms$}H! qC䜅j(JӚbd1l$eM$)ƥKzz$PEsZ%M`KU@ mղ5|Y>VІO2V,hVu3}Ln\ѳZiV_:xlfPbu6+dRY5=jINi`XSk%ò({䕴+,gp9yY,g47̸M=c'MSBv>Yқ0-mhD+ZԨ&a! Ts_Mk@|f5k]Խ6D@x:N~=ke;Z6Mj1;ζ}VkPMp{Nĭvܟvyۛ4F=zhɷNp_w+N.K(G8.&OyEHc.9CX.?6@h>9σtC?΍'5g:E\Vxճrs[Ƚ.';~[\n'xqӝs{w{;[Owoo3܋/lG<}̓[OvCmГף?MzZf=SZusOkһ}}/E&>|SZoshSӿ~&gm>[Yqd_/ǿ=?i|Xc7bx4f b ؀1ƀb8.&Xb+b("a!X%F(a' .xa-4`3xf:h`9؃ƃ@`?8WVjfWlpJXdBUR`QXEX_We^[]OdhXcx4ejXVi؆ņpTo8$vHSuÄ|(Q{䇂NX[D8L$XIExcHB؉vÉ?8>#h;h7⊲3XB0h-u8*xOb*،)ŒX'8&"$՘ܘ"Ƅ&Vf؎8!8{YYxA)f cyVaip8nهo!IQYG('D.p4y-y5a:I9ٓ2@y?97f\TJBٔ7P)?O9/VU,\[''by7aYhygnIm/GtيH9pw0p1~9}3NHf)*1y Iya)ٙ9yY&k騚h`'yiɛ雚 )Iiɜ霎 ~)I{iwɝt靁 q)~Ini{kwɞht e)qIbin_kɟ\h Y)eIVibS_ɠP\ M)YIJiVFSɡCP @)MI=iJ:Fɢ7C 4)@I12p*1)*?%@C*;:=$;*"vqkwB'$p[%Ф)Ҥp=;?"Fiv:PvZ7 Ib";Pph z@2 M"6;zP?2Ч=P;PZ':pʚ y"; **m$$;:J'@q& fPP z֚Pjٺ٭P n J % zڬښ$ 4: j' jƖfNB;z9V`P0Dv}}P;)pE"[Dvh"? N*50,.kj `MOh[hC@ AMaZ sklzkzkT&! ,]HA*\ȰÇ#JHŋ3jȱǏ CTpIN\ɲ˗0cʜɱRs>)5 IbA*TӧPJJ@uʵk֯ZCpP`ӢsO"V zK+q˷ߗI [NÆ7⺉#@'˘/kΜYۿCM4><]ź͚"]glη7 VO8.8jZУg\TpN=]{Kv H'q葧wp۵ˏO_9m'`jmx9W Ǟ^\`f3 &(dG`k&ᱧ }N^_y7k-h%r|K6ʩJY }]ɧ$??Tf 믽 wC'ԃ%H@vr""Ϭe|:*ºTsm;}Xv&QbRO4i:+n>Y*/f$z60ܲ%D343Kʧ¸!0:X'';$pÎ$]z)9!BO=`M̶2r.Tׇ+#1mL{&v2S;׸O4z 8Hm5ޯj9^w? ϗ܇褻tI" ;#L:XJ mMYw<kwS1!33×.=vH A RbRx+l0eEM])_0SΝj<7;&E`{ O9U%A ZPDu7)IIʞf4> Fa|ס0O9HNJkO+V!P h1AH!a}Fgꤸg:3^q.bGOId Q&<" 9;Iz%BBQH22 HHle9h`!B CIX0dNddBaxR. k8P2L ɿTȥ.wK]vI 0=R2< L&2'p9 me*STH%hRA,›\$IbA:9g<)-!Dg>&ZhLBbG|E=YPDtͨF7юz )10 "MJ{U6@K,\Lg6a Nw@.DӢ4iLԦ$8SJժ$uUͪVʥn`a:˰*ZVDm\zw+Y׾7_S^8%b bTxKYӘF5!z%xP kLԐgW`,jPViglS[7%nS:׆%pi*4=-s]uF7ڥnwI.W%zwa 7ݘtwz@vykpx L\ [y0z/QXq|Qbؾ-T,uD?8 PM*V2U.[^L,2fNJȬ6nsG,:v3E>[~B,B7ІN4h с^4IYҖ.t3]gLsϛ=-wͭnf7Ey3Xp]`|[w~-%8{Wo#]S|s-f8ȭV&wnSZ+ye].sƼ报9?{U>lσ~WC?\&ke:UVokճUs[zV.S%;ڷz3Unj^TݩsN2;yTiR3~|G/yF?0Mzd=RfsOF󾓻=}/?6$>xsP_b?Sӿ> f>M^4t/ſ?vK11xb . ؀€+8d"()>8c`xxVb#Rx*#)؂‚0#/8!6!5wJ6hU}:Mp߶;ڻx矺LW}˥X  52˖+C̹z,Ve)sr+٫ԙaSٗ(Np{nk@ N#xR^pr9\/̝/^@ӫ_ZTn+DyM5'~T;~ Z% H9w|-'@MFֹg dnBAV(!{(wT }߈'yx %Շ L6]qS1# 31VءkzXAz^!(5Cws ȗ2 ϣ%K馜*@"I:#1#[#> mm|Ϥg*Or&Ri?TͬjTyI?s 3ʶ}jrp-1w]^*4L05 })%3:*Vl1+]3P(u;V>(| m(\#캘bK̳<о6ijU%&6Mc2>S?{dsqĸS<ĬM(Y>'.=䝷yu(dj-nٌ7΢".2h#<.7[#)63 w8K/.`n{zg]YPa}$apܡN6|.A{A^c&l<}o~R6v9{V&3 S4%mh?IԿ@m31`p>ZH'v3AX+8ߡ`vë o-kM2$ىEj*ȍ3QS.P@ bH0*P<|Kp@" \0wAԁ OȢ.rQ`aH2R7.ы`\#OЕ m"=&}I$8/2,4"P2!dd&Ƀ$GH&шD24 “ 4]XP+`IZDBK[r6a T2i'"Ij<[Bkz)z<Lp 8pӝQS< t-̧>m'ܧ@ iIІ:$uN͇ZZvb HDi(UF9Ѐ!@Q][Њ[Ӧ@Mj>#ZgEɽ~4osL`N˛o0q, 0d(S8,/&NqLH.1JX,6qGhk>2Ex,"GFNB&#N@,e)CM2|-Y^6rd09c>ͬf5f3k9Xvvqb<9{,h&4;|E[Xюp#aHS:“t-g4 QWԦoS]_T~5{]-kƺ5{]oW׾nM]`>6rl&e6iV֦mZlsg-φܖ%7-{uV.lWx[XoT7Uj~S3 xJ.F!8CzcThCP#?9AMrd9S6gsN\;98}.tp$:ҭy3SNgfӣВf_^NKc?+ͮvWd;?+RvǬS޼O. A$<]xŻP`#AS>|-e;uW\7/~=wD8b6x'}4NxbLH_Q>PXHaXxW1^]/6]G:3h`+nm3t8{fxgz{{M؇;sXAhxa8؉8!  ኲxXAH(8hȌ茵(Hhȍ荩(HhȎ莝(Hhȏ菑(HhȐ萅(Hh}zȑ}wz(tHwhqtnȒqkn(hHkhdhaȓd^a([H^hX[UȔXQU(NHQhJNGȕJDG(AHDh>8_Ĉ'jlٖv8]pWr9~VWdXwI~"dY˥VSo ٰY ĘMBAq Ӡ p 7h dmQQ rp WGN pqYN$ ! ,! ,! ,! ,qx(00! *H(Ac@F q0Hx0# ȔᆀJS|8` )Ujm !q7H[ c"=~`. XU<#A[ i@֜(u0hV=j7 ށp_ !U(ro8Q.B^mmrn),_kaWX SR 2@}@X C̕[_ΜO.o]'(Q^ρp@KGID5M*T4P@! ,! ,dH*LhÇ#JHŋ3jȱǏ CIɓ.\J0c $R͛6s)ϟ@ JQ:Tʔѧ JuժU@ʵׯ`Êz,V ʍKw\x˷SS,ˆ Q?}42˖,r̸ϠCKYPf̨[vhפP=۸s^V x"ݜ.%_rI,vuݷKZZ(4Ã/^<ͽ_Ͼ}_Aj ɓ_4u"ODހ7%%G\‡ܹgfey ޷"u0"l} T"$.TaTȑ( @)M6H8 'yrOE&d=vтn!)db(]H$R"ubLyR"@$HeSHi}Y梌6ꗋ-bL~L:ft̨I'%8тTi|X旪:j뭸rY/C" &4E%+a=*%-*cqŒ5hsM5R&R:cM)$ʒMDl)|*rOӎz¢ lM:l;ڬ+$G!H/4TpJ:s/> #jѢvIF8%ӎ5=n%wuׇl)ĤsJC-wqjOAm'4oЎ}JWE&3QC3֡p@udr08̛qrMf$s CE09ʡDm>JbR'JU; Q!0&6Yb;Z3Ix7;3@8 ~$~j2CJgpR8{щ`u+6)nɐIs (=L6D!D\ f-kNIIVkT(_.96@mfDqЌ&Th,!d 2R/ @`&IJJ) Ǖ-˓F*:'VaO3φ:$䈇AvYj(DIG$䠒J8LHҖn$l*BIK+sg.AbFq1!"۩KTd8ҏL U |irCV̹DiVԶEd\sVxOClsaOP@:% .e"#?ȭC0'Xm&51͒į,yF%e/#XF"|1juCn*ZRvҬp*M.rz hqnN$Tf;E uUC!BwM/eŻҲ1/{ʳTWy] @Y0a N'|a à P R `/@Wl(0YLfpp#l19>1N HJ !o8!AL堰A*{>Iue?D`N;dP^17Yf2灴[-;3& t@F{CbG[Z͆^C)^H5\ӏ f]CNVX\D bո'-c,Nt\Mfx5uojV6mnڽ6rgɖ6Mxۻ-MorCsf'.G\x!o{G@(\;{v׵渂9qs2<=t.龸ї>$3ΡNu8XԳ\`N|hvp۝(oއ2=(yawP@O#+R{"GO#@OџnW/Ͽ~ı k|??;>w|?xSӿ߭}={^0oi wݯӿܿ~ pwlvdwgYy(aw*HJ2 ](uL.t-E4(t3x=g:s9؃7ǃ@8s?8.'FrE(LHrKRqQXGXHqW^p]dpcxfjhoi؆Ɔphno8&vmuՆ|l{懂8lXFjihxf8h؉}Ɖg8t&8gkf`抲eXUFHeId?f|Hl}gǘk6j,VxuGfz؈$(rz֍%n(pHh֘wȎ}8hoggVHg6_ye y_ ِŐ^9%YVm"T!YKE(or+e*u2P1YD8 O7Ѥ>M=D)JCyג6,NiCF7T @Sy׏.Ɣ@fbi9YYCh5gnY2m]t)2}wy_{i_y\ٔ%P~)\sby+9Wa)((c♢9&YCBt9u9`隯)p9m!i!YA9ǹiu9ɓy?i)ٝEɝ9KmhsԜٞ}9z!nWLKRQZAXW^Z]d*czajiڦpo:vzD)|{I(*xju:: ڦڦzzJJꥧꥩZZ**ʤʤÚZZ*gp  *|*ʣʣ㚣嚣jj**ʢʢjvI$y {Ij;z ;o'f;`qV&+ 5y1b˦a )Ck8pP@ CvAGcc&6c7%`X{Z\^۵`bd;f[X[g۶lnp;r[t{vxz۷|~;[Qbq&;[{۹;[{ۺ]&ۻ;[{ʛ̻ۼ;[{ڛܻ*! ,aH@*LhÇ#JHŋ3jȱǏ CI$(M\ГN/c„ɲ͛8sɳϝ. ѣH*]ʴӛDUOq3(ׯ`ÊK㠨ev8HiʝKnϮWР> +1[eE䉱Ɛ?$خ˘3kv6gɞ=+5ӒcM{%Nc˞[͸s N_ N|pNHJsjluνw}n__RkI}.Oy&h/7"^ymlSN"$2H}R%bMw ($6H''^6Xk:&PȆ)G&!!6cHv:Q=+ $Fi`P# N>ST=@%D\lWGdCCnzs$&ݪX>lm8 nySE7Iώ4@¦A\_JPB:IL1}-R%zЫ%(] csj2H}̡U "RO¦ hrXd&jXQTo6DTJE܆+T TzIZu_>!ךVVp]Y6:ԁx^zֳuCn%_JؾɋIQd'KZͬf7z hGKҚMj빁պ=9lgKa-nw-pK'q{.t ̍i4tKZW K."E0x!5a~ $ 7~yA_* ~;.p{[ IHp32 J0^ 6pBd/J`W/"|LdHp$;dG~K&Oʦ2\*sK2L"/33ͻQ37Ζ3<;d3 ?N4C3EQ4'GS7Qp1iXӠCMj|Ԩֈ7Tz#fngmQ13q\WývDb-b D0ve [vvH{ڿNAm#vMk5ܳѝlݸrnj[ӧ-pJ&8}/ZGt#NhS|-q>S[O &gUrFgp4aJ97rz{vρ~g9x~93߶ӓ{zѫ;]s>ec?ͮv$Ef;}Xvqb{{.&<|;XGp#`S><~-f_VWmZsi/~҆7C_Xqz $ _ۿ8hoxz(uh{8{ xE~(`؁g (|8'&$uȂu~0a(8%6R'15Di 8oG$F&1NYM\T@\ij[ؓbIaYHh:mn g Hؖxv?~p5Yy ٕ٘i}9(yyْ晢9YiɘY7wi y Vqᕨ9i+ɛ‰I̹ٚYYI ڶމ)IQ9뉜ə) k1ji9qY * Z J f53 Cơ:Q9#*9A)+z(z>if9 y8Zv;6f *Aif,`Gu$PrL ynQ8V]U:Xw_~Y:u % ]_Z] Vg,60@vZxzz|~ڧ:Zzڨ:Zzکzt֥pڪ:Zzګ:Zjoڬ:Zzښܺڭ:Zzꚮ캮ڮ:ZZ! ,]Hp /!\ȰÇ#JHŋ3jȱǏ CI'IG@˗.cI͛8sɳƖ gLHCӧPJJ¤X:0טM$*HТ?]V-?aʝKݻ;ۖA}6D+&:t$h˘/qZϠCI!'S z'Ltio{4h߾{ K|ȓ+_<^INAhqok<|Ijξyw:cVI_zԭ߁& T\YAY($@fo.kbȀ%|,,Q5_37 'cEI&pet.6M XpVZuGpU(#\Qp|PPi͝)Ic3&- }֗c~RG.Z%$IxӍ(4E#+q'xjvQi%v `Y"+'[@YU!J9IpsFP{ڛ`ܲ+;WG)#9Rt>vH:fp1)+ݨ#-yIf 8!#ʺjtI"(\,-@RElo --{+Q'`J I0](WDN5_})t\%qK \,0gMuBǧo|]+HSm}9{]}xr@#{UPwK`˘(ne9]I_o㥧n !`s9Ky[U:ࡅ.y8,I>9YBיaC.iDu|c&0C8wC! UK ӘzOj82(:ޘ0WC1.Mܨ39!Vb< CF뭰;(L"i~TIKRԟ '1ië`'QQ&QBKeVV^,?"A:de, .0syG6 Tw8S!M3gIjDJ(ĥ43c@s=p gKƳfv LA\vZDCO˞ yςԳtOgIPMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞTDAӢb4{~ .P( ^eQͪC `VǪЩ ZՁtX\iVl@Jw+XKX;ikaEaZvf7uZfCKڭu6-j5պVZUkgkwmjq&ٶen+"M{΍.r+ͮ] T+FM/OȫL+ͯGr pE+ON0C#v0#aS8-ag0W&oS_8+~|],cƸ1{W>n^ 9C>vd&e2);WV6n\,s[rp,f܆̼%3g{5Vn^mZ8әssiϠ3-A_VІfl YD3~ta-iF4zMUӞ&kCVP:>VMjPe5}YTֶisS\uN}-6%6ezeT~i ShSӾvKf*6MqTiMRt~wH-ƻ75z}oThQ?xE &R`!ՇS 8C-qf 8T&'hSN+y^ BY[⏵yN]sYƼ9!QF,Γnl{LңlTԳ.m˖+-:%ݎb?vc;NvNR=qu{.x%GoNs_9~r/ф!?AsFKӿ.?]bX7T!(Q  NX=A:7$X#x4a*)؂*08/8"!65<;BAXAHxGNHMTSxaZY؅ `_8!fHelVloHihlfiȇcf`(cH]h`Z]ȈWZT(WHQhTNQȉKNH(KHEhHBEȊ?B<(?H9h<69ȋ360(3H-h0*-Ȍ'*$('H!h$!ȍ(HhȎ (H h  ȏ(Hgǐ'GgǑ'Gg臒⧒ǒߗYB%X4)-pVP 9- ^g3)! ,%H*\ȰÇ#JHŋ3jȱnj>B )ɓ(S\ɲ˗0cjL$A7s)ϟ@ JTA$a.ÐND}JթբXjʵWLBJ6ٲ.:hѷݺ_˷_ѝKXPaG]' "ۇep ϠCw.˖4M鷍+tܻY,{znÃLY$:k$Imw~6^OqjϿ?ፅ@Ftwk uA<&k F=vauuإXn @W}h8jWXxT!\Gqb%N-Eak=CPqaXf%W!veRuPWډ$8pR"|͘`[@ W%ěWWeMG$o $Ɋ9851Q#Y秠Q\y%cyqI%Rad*B4g X ]#ԬMwAIv-ᕖvP)8qw ^cdpEbrrW\ؤ,pU]4 \G+% a6e+VjTMh0SA l[f |Zi}d' 1hʌ@x$VSͺQ6j 0L7_q%2Hኵ8,qFdkۡNuLgr`Gݶ9-܅{(n} D3Sk&xp# S(ݐG\bRVޒZCcu]4Un_'s/Iƹ&{nY'mZ쟣Ti@f87|Ň[@aiM-o}o6^s ~ηL7%'}܄܊~KNr|oTf ):7n"H@! ,+#P L8'A *D(`! ,! ,! ,! ,! ,! ,! ,;pyenv-2.5.4/libexec/000077500000000000000000000000001476513315000143035ustar00rootroot00000000000000pyenv-2.5.4/libexec/pyenv000077500000000000000000000061601476513315000153750ustar00rootroot00000000000000#!/usr/bin/env bash set -e if [ "$1" = "--debug" ]; then export PYENV_DEBUG=1 shift fi if [ -n "$PYENV_DEBUG" ]; then # https://wiki-dev.bash-hackers.org/scripting/debuggingtips#making_xtrace_more_useful export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' set -x fi abort() { { if [ "$#" -eq 0 ]; then cat - else echo "pyenv: $*" fi } >&2 exit 1 } if enable -f "${BASH_SOURCE%/*}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then abs_dirname() { local path path="$(realpath "$1")" echo "${path%/*}" } else [ -z "$PYENV_NATIVE_EXT" ] || abort "failed to load \`realpath' builtin" READLINK=$(type -P readlink) [ -n "$READLINK" ] || abort "cannot find readlink - are you missing GNU coreutils?" resolve_link() { $READLINK "$1" } abs_dirname() { local path="$1" # Use a subshell to avoid changing the current path ( while [ -n "$path" ]; do cd_path="${path%/*}" if [[ "$cd_path" != "$path" ]]; then cd "$cd_path" fi name="${path##*/}" path="$(resolve_link "$name" || true)" done echo "$PWD" ) } fi if [ -z "${PYENV_ROOT}" ]; then PYENV_ROOT="${HOME}/.pyenv" else PYENV_ROOT="${PYENV_ROOT%/}" fi export PYENV_ROOT if [ -z "${PYENV_DIR}" ]; then PYENV_DIR="$PWD" fi if [ ! -d "$PYENV_DIR" ] || [ ! -e "$PYENV_DIR" ]; then abort "cannot change working directory to \`$PYENV_DIR'" fi PYENV_DIR=$(cd "$PYENV_DIR" && echo "$PWD") export PYENV_DIR shopt -s nullglob bin_path="$(abs_dirname "$0")" for plugin_bin in "${bin_path%/*}"/plugins/*/bin; do PATH="${plugin_bin}:${PATH}" done # PYENV_ROOT can be set to anything, so it may happen to be equal to the base path above, # resulting in duplicate PATH entries if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then for plugin_bin in "${PYENV_ROOT}"/plugins/*/bin; do PATH="${plugin_bin}:${PATH}" done fi export PATH="${bin_path}:${PATH}" PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d" if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then # Add pyenv's own `pyenv.d` unless pyenv was cloned to PYENV_ROOT PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${bin_path%/*}/pyenv.d" fi PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:/usr/etc/pyenv.d:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks" for plugin_hook in "${PYENV_ROOT}/plugins/"*/etc/pyenv.d; do PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${plugin_hook}" done PYENV_HOOK_PATH="${PYENV_HOOK_PATH#:}" export PYENV_HOOK_PATH shopt -u nullglob command="$1" case "$command" in "" ) { pyenv---version pyenv-help } | abort ;; -v | --version ) exec pyenv---version ;; -h | --help ) exec pyenv-help ;; * ) command_path="$(command -v "pyenv-$command" || true)" if [ -z "$command_path" ]; then if [ "$command" == "shell" ]; then abort "shell integration not enabled. Run \`pyenv init' for instructions." else abort "no such command \`$command'" fi fi shift 1 if [ "$1" = --help ]; then if [[ "$command" == "sh-"* ]]; then echo "pyenv help \"$command\"" else exec pyenv-help "$command" fi else exec "$command_path" "$@" fi ;; esac pyenv-2.5.4/libexec/pyenv---version000077500000000000000000000011701476513315000172060ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Display the version of pyenv # # Displays the version number of this pyenv release, including the # current revision from git, if available. # # The format of the git revision is: # -- # where `num_commits` is the number of commits since `version` was # tagged. set -e [ -n "$PYENV_DEBUG" ] && set -x version="2.5.4" git_revision="" if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then git_revision="$(git describe --tags HEAD 2>/dev/null || true)" git_revision="${git_revision#v}" fi echo "pyenv ${git_revision:-$version}" pyenv-2.5.4/libexec/pyenv-commands000077500000000000000000000014541476513315000171750ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: List all available pyenv commands # Usage: pyenv commands [--sh|--no-sh] set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --sh echo --no-sh exit fi if [ "$1" = "--sh" ]; then sh=1 shift elif [ "$1" = "--no-sh" ]; then nosh=1 shift fi IFS=: paths=($PATH) shopt -s nullglob { for path in "${paths[@]}"; do for command in "${path}/pyenv-"*; do command="${command##*pyenv-}" if [ -n "$sh" ]; then if [ "${command:0:3}" = "sh-" ]; then echo "${command##sh-}" fi elif [ -n "$nosh" ]; then if [ "${command:0:3}" != "sh-" ]; then echo "${command##sh-}" fi else echo "${command##sh-}" fi done done } | sort | uniq pyenv-2.5.4/libexec/pyenv-completions000077500000000000000000000010621476513315000177230ustar00rootroot00000000000000#!/usr/bin/env bash # Usage: pyenv completions [arg1 arg2...] set -e [ -n "$PYENV_DEBUG" ] && set -x COMMAND="$1" if [ -z "$COMMAND" ]; then pyenv-help --usage completions >&2 exit 1 fi # Provide pyenv completions if [ "$COMMAND" = "--complete" ]; then exec pyenv-commands fi COMMAND_PATH="$(command -v "pyenv-$COMMAND" || command -v "pyenv-sh-$COMMAND")" # --help is provided automatically echo --help if grep -iE "^([#%]|--|//) provide pyenv completions" "$COMMAND_PATH" >/dev/null; then shift exec "$COMMAND_PATH" --complete "$@" fi pyenv-2.5.4/libexec/pyenv-exec000077500000000000000000000022361476513315000163170ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Run an executable with the selected Python version # # Usage: pyenv exec [arg1 arg2...] # # Runs an executable by first preparing PATH so that the selected Python # version's `bin' directory is at the front. # # For example, if the currently selected Python version is 2.7.6: # pyenv exec pip install -r requirements.txt # # is equivalent to: # PATH="$PYENV_ROOT/versions/2.7.6/bin:$PATH" pip install -r requirements.txt set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then exec pyenv-shims --short fi PYENV_VERSION="$(pyenv-version-name -f)" PYENV_COMMAND="$1" if [ -z "$PYENV_COMMAND" ]; then pyenv-help --usage exec >&2 exit 1 fi PYENV_COMMAND_PATH="$(pyenv-which "$PYENV_COMMAND")" PYENV_BIN_PATH="${PYENV_COMMAND_PATH%/*}" export PYENV_VERSION OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks exec`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script" done shift 1 if [ "${PYENV_BIN_PATH#${PYENV_ROOT}}" != "${PYENV_BIN_PATH}" ]; then # Only add to $PATH for non-system version. export PATH="${PYENV_BIN_PATH}:${PATH}" fi exec "$PYENV_COMMAND_PATH" "$@" pyenv-2.5.4/libexec/pyenv-global000077500000000000000000000025051476513315000166320ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Set or show the global Python version(s) # # Usage: pyenv global <..> # # Sets the global Python version(s). You can override the global version at # any time by setting a directory-specific version with `pyenv local' # or by setting the `PYENV_VERSION' environment variable. # # can be specified multiple times and should be a version # tag known to pyenv. The special version string `system' will use # your default system Python. Run `pyenv versions' for a list of # available Python versions. # # Example: To enable the python2.7 and python3.7 shims to find their # respective executables you could set both versions with: # # 'pyenv global 3.7.0 2.7.15' # set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo system exec pyenv-versions --bare fi versions=("$@") PYENV_VERSION_FILE="${PYENV_ROOT}/version" if [ -n "$versions" ]; then pyenv-version-file-write "$PYENV_VERSION_FILE" "${versions[@]}" else OLDIFS="$IFS" IFS=: versions=($( pyenv-version-file-read "$PYENV_VERSION_FILE" || pyenv-version-file-read "${PYENV_ROOT}/global" || pyenv-version-file-read "${PYENV_ROOT}/default" || echo system )) IFS="$OLDIFS" for version in "${versions[@]}"; do echo "$version" done fi pyenv-2.5.4/libexec/pyenv-help000077500000000000000000000067531476513315000163330ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Display help for a command # # Usage: pyenv help [--usage] COMMAND # # Parses and displays help contents from a command's source file. # # A command is considered documented if it starts with a comment block # that has a `Summary:' or `Usage:' section. Usage instructions can # span multiple lines as long as subsequent lines are indented. # The remainder of the comment block is displayed as extended # documentation. set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --usage exec pyenv-commands fi command_path() { local command="$1" command -v pyenv-"$command" || command -v pyenv-sh-"$command" || true } extract_initial_comment_block() { LC_ALL= \ LC_CTYPE=C \ sed -ne " /^#/ !{ q } s/^#$/# / /^# / { s/^# // p } " } collect_documentation() { # `tail` prevents "broken pipe" errors due to `head` closing the pipe without reading everything # https://superuser.com/questions/554855/how-can-i-fix-a-broken-pipe-error/642932#642932 $(type -P gawk awk | tail -n +1 | head -n1) ' /^Summary:/ { summary = substr($0, 10) next } /^Usage:/ { reading_usage = 1 usage = usage "\n" $0 next } /^( *$| )/ && reading_usage { usage = usage "\n" $0 next } { reading_usage = 0 help = help "\n" $0 } function escape(str) { gsub(/[`\\$"]/, "\\\\&", str) return str } function trim(str) { sub(/^\n*/, "", str) sub(/\n*$/, "", str) return str } END { if (usage || summary) { print "summary=\"" escape(summary) "\"" print "usage=\"" escape(trim(usage)) "\"" print "help=\"" escape(trim(help)) "\"" } } ' } documentation_for() { local filename filename="$(command_path "$1")" if [ -n "$filename" ]; then extract_initial_comment_block < "$filename" | collect_documentation fi } print_summary() { local command="$1" local summary usage help eval "$(documentation_for "$command")" if [ -n "$summary" ]; then printf " %-9s %s\n" "$command" "$summary" fi } print_summaries() { for command; do print_summary "$command" done } print_help() { local command="$1" local summary usage help eval "$(documentation_for "$command")" [ -n "$help" ] || help="$summary" if [ -n "$usage" ] || [ -n "$summary" ]; then if [ -n "$usage" ]; then echo "$usage" else echo "Usage: pyenv ${command}" fi if [ -n "$help" ]; then echo echo "$help" echo fi else echo "Sorry, this command isn't documented yet." >&2 return 1 fi } print_usage() { local command="$1" local summary usage help eval "$(documentation_for "$command")" [ -z "$usage" ] || echo "$usage" } unset usage if [ "$1" = "--usage" ]; then usage="1" shift fi if [ -z "$1" ] || [ "$1" == "pyenv" ]; then echo "Usage: pyenv []" [ -z "$usage" ] || exit echo echo "Some useful pyenv commands are:" print_summaries $(exec pyenv-commands | sort -u) echo echo "See \`pyenv help ' for information on a specific command." echo "For full documentation, see: https://github.com/pyenv/pyenv#readme" else command="$1" if [ -n "$(command_path "$command")" ]; then if [ -n "$usage" ]; then print_usage "$command" else print_help "$command" fi else echo "pyenv: no such command \`$command'" >&2 exit 1 fi fi pyenv-2.5.4/libexec/pyenv-hooks000077500000000000000000000023341476513315000165150ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: List hook scripts for a given pyenv command # Usage: pyenv hooks set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo exec echo rehash echo version-name echo version-origin echo which exit fi PYENV_COMMAND="$1" if [ -z "$PYENV_COMMAND" ]; then pyenv-help --usage hooks >&2 exit 1 fi if ! enable -f "${BASH_SOURCE%/*}"/pyenv-realpath.dylib realpath 2>/dev/null; then if [ -n "$PYENV_NATIVE_EXT" ]; then echo "pyenv: failed to load \`realpath' builtin" >&2 exit 1 fi READLINK=$(type -P readlink) if [ -z "$READLINK" ]; then echo "pyenv: cannot find readlink - are you missing GNU coreutils?" >&2 exit 1 fi resolve_link() { $READLINK "$1" } realpath() { local path="$1" local name # Use a subshell to avoid changing the current path ( while [ -n "$path" ]; do name="${path##*/}" [ "$name" = "$path" ] || cd "${path%/*}" path="$(resolve_link "$name" || true)" done echo "${PWD}/$name" ) } fi IFS=: hook_paths=($PYENV_HOOK_PATH) shopt -s nullglob for path in "${hook_paths[@]}"; do for script in "$path/$PYENV_COMMAND"/*.bash; do realpath "$script" done done shopt -u nullglob pyenv-2.5.4/libexec/pyenv-init000077500000000000000000000152561476513315000163440ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Configure the shell environment for pyenv # Usage: eval "$(pyenv init [-|--path] [--no-push-path] [--detect-shell] [--no-rehash] [])" set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo - echo --path echo --no-push-path echo --no-rehash echo --detect-shell echo bash echo fish echo ksh echo zsh exit fi mode="help" while [ "$#" -gt 0 ]; do case "$1" in -) mode="print" ;; --path) mode="path" ;; --detect-shell) mode="detect-shell" ;; --no-push-path) no_push_path=1 ;; --no-rehash) no_rehash=1 ;; *) shell="$1" ;; esac shift done # If shell is not provided, detect it. if [ -z "$shell" ]; then shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)" shell="${shell%% *}" shell="${shell##-}" shell="${shell:-$SHELL}" shell="${shell##*/}" shell="${shell%%-*}" fi function main() { case "$mode" in "help") help_ exit 1 ;; "path") print_path print_rehash exit 0 ;; "print") init_dirs print_path print_env print_completion print_rehash print_shell_function exit 0 ;; "detect-shell") detect_profile 1 print_detect_shell exit 0 ;; esac # should never get here exit 2 } function detect_profile() { local detect_for_detect_shell="$1" case "$shell" in bash ) if [ -e '~/.bash_profile' ]; then profile='~/.bash_profile' else profile='~/.profile' fi profile_explain="~/.bash_profile if it exists, otherwise ~/.profile" rc='~/.bashrc' ;; zsh ) profile='~/.zprofile' rc='~/.zshrc' ;; ksh | ksh93 | mksh ) # There are two implementations of Korn shell: AT&T (ksh93) and Mir (mksh). # Systems may have them installed under those names, or as ksh, so those # are recognized here. The obsolete ksh88 (subsumed by ksh93) and pdksh # (subsumed by mksh) are not included, since they are unlikely to still # be in use as interactive shells anywhere. profile='~/.profile' rc='~/.profile' ;; * ) if [ -n "$detect_for_detect_shell" ]; then profile= rc= else profile='your shell'\''s login startup file' rc='your shell'\''s interactive startup file' fi ;; esac } function print_detect_shell() { echo "PYENV_SHELL_DETECT=$shell" echo "PYENV_PROFILE_DETECT=$profile" echo "PYENV_RC_DETECT=$rc" } function help_() { detect_profile { 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 'pyenv init - fish | source' echo ;; * ) echo '# Load pyenv automatically by appending' echo -n "# the following to " if [ "$profile" == "$rc" ]; then echo "$profile :" else echo echo "# ${profile_explain:-$profile} (for login shells)" echo "# and $rc (for interactive shells) :" fi echo echo 'export PYENV_ROOT="$HOME/.pyenv"' echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' echo 'eval "$(pyenv init - '$shell')"' ;; esac echo echo '# Restart your shell for the changes to take effect.' echo } >&2 } function init_dirs() { mkdir -p "${PYENV_ROOT}/"{shims,versions} } function print_path() { # if no_push_path is set, guard the PATH manipulation with a check on whether # the shim is already in the PATH. if [ -n "$no_push_path" ]; then case "$shell" in fish ) echo 'if not contains -- "'"${PYENV_ROOT}/shims"'" $PATH' print_path_prepend_shims echo 'end' ;; * ) echo 'if [[ ":$PATH:" != *'\':"${PYENV_ROOT}"/shims:\''* ]]; then' print_path_prepend_shims echo 'fi' ;; esac else case "$shell" in fish ) echo 'while set pyenv_index (contains -i -- "'"${PYENV_ROOT}/shims"'" $PATH)' echo 'set -eg PATH[$pyenv_index]; end; set -e pyenv_index' print_path_prepend_shims ;; * ) # Some distros (notably Debian-based) set Bash's SSH_SOURCE_BASHRC compilation option # that makes it source `bashrc` under SSH even when not interactive. # This is inhibited by a guard in Debian's stock `bashrc` but some people remove it # in order to get proper environment for noninteractive remote commands # (SSH provides /etc/ssh/sshrc and ~/.ssh/rc for that but no-one seems to use them for some reason). # This has caused an infinite `bashrc` execution loop for those people in the below nested Bash invocation (#2367). # --norc negates this behavior of such a customized Bash. echo 'PATH="$(bash --norc -ec '\''IFS=:; paths=($PATH); ' echo 'for i in ${!paths[@]}; do ' echo 'if [[ ${paths[i]} == "'\'\'"${PYENV_ROOT}/shims"\'\''" ]]; then unset '\'\\\'\''paths[i]'\'\\\'\''; ' echo 'fi; done; ' echo 'echo "${paths[*]}"'\'')"' print_path_prepend_shims ;; esac fi } function print_path_prepend_shims() { case "$shell" in fish ) echo 'set -gx PATH '\'"${PYENV_ROOT}/shims"\'' $PATH' ;; * ) echo 'export PATH="'"${PYENV_ROOT}"'/shims:${PATH}"' ;; esac } function print_env() { case "$shell" in fish ) echo "set -gx PYENV_SHELL $shell" ;; * ) echo "export PYENV_SHELL=$shell" ;; esac } function print_completion() { completion="${0%/*/*}/completions/pyenv.${shell}" if [ -r "$completion" ]; then echo "source '$completion'" fi } function print_rehash() { if [ -z "$no_rehash" ]; then echo 'command pyenv rehash 2>/dev/null' fi } function print_shell_function() { commands=(`pyenv-commands --sh`) case "$shell" in fish ) echo \ 'function pyenv set command $argv[1] set -e argv[1] switch "$command" case '"${commands[*]}"' source (pyenv "sh-$command" $argv|psub) case "*" command pyenv "$command" $argv end end' ;; ksh | ksh93 | mksh ) echo \ 'function pyenv { typeset command=${1:-}' ;; * ) echo \ 'pyenv() { local command=${1:-}' ;; esac if [ "$shell" != "fish" ]; then IFS="|" echo \ ' [ "$#" -gt 0 ] && shift case "$command" in '"${commands[*]:-/}"') eval "$(pyenv "sh-$command" "$@")" ;; *) command pyenv "$command" "$@" ;; esac }' fi } main pyenv-2.5.4/libexec/pyenv-latest000077500000000000000000000057701476513315000166750ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Print the latest installed or known version with the given prefix # Usage: pyenv latest [-k|--known] # # -k/--known Select from all known versions instead of installed # -b/--bypass (internal) On a resolution failure, do not print an error message # but rather print the argument unchanged # -f/--force (internal) Same as -b but also do not return a failure exit code set -e [ -n "$PYENV_DEBUG" ] && set -x while [[ $# -gt 0 ]] do case "$1" in -k|--known) FROM_KNOWN=1 shift ;; -b|--bypass) BYPASS=1 shift ;; -f|--force) FORCE=1 BYPASS=1 shift ;; *) break ;; esac done prefix=$1 exitcode=0 IFS=$'\n' if [[ -z $FROM_KNOWN ]]; then DEFINITION_CANDIDATES=( $(pyenv-versions --bare --skip-envs) ) else DEFINITION_CANDIDATES=( $(python-build --definitions ) ) fi if printf '%s\n' "${DEFINITION_CANDIDATES[@]}" 2>/dev/null | grep -qxFe "$prefix"; then echo "$prefix" exit $exitcode; fi suffix="" if [[ $prefix =~ ^(.*[0-9])t$ ]]; then suffix="t" prefix="${BASH_REMATCH[1]}" fi # https://stackoverflow.com/questions/11856054/is-there-an-easy-way-to-pass-a-raw-string-to-grep/63483807#63483807 prefix_re="$(sed 's/[^\^]/[&]/g;s/[\^]/\\&/g' <<< "$prefix")" suffix_re="$(sed 's/[^\^]/[&]/g;s/[\^]/\\&/g' <<< "$suffix")" # FIXME: more reliable and readable would probably be to loop over them and transform in pure Bash DEFINITION_CANDIDATES=(\ $(printf '%s\n' "${DEFINITION_CANDIDATES[@]}" | \ grep -Ee "^$prefix_re[-.].*$suffix_re\$" || true)) DEFINITION_CANDIDATES=(\ $(printf '%s\n' "${DEFINITION_CANDIDATES[@]}" | \ sed -E -e '/-dev$/d' -e '/-src$/d' -e '/-latest$/d' -e '/(a|b|rc)[0-9]+$/d' \ $(if [[ -z $suffix ]]; then echo "-e /[0-9]t\$/d"; fi) )); # Compose a sorting key, followed by | and original value DEFINITION_CANDIDATES=(\ $(printf '%s\n' "${DEFINITION_CANDIDATES[@]}" | \ awk \ '{ if (match($0,"^[[:alnum:]]+-")) { print substr($0,0,RLENGTH-1) "." substr($0,RLENGTH+1) "..|" $0; } else { print $0 "...|" $0; } }')) DEFINITION_CANDIDATES=(\ $(printf '%s\n' "${DEFINITION_CANDIDATES[@]}" \ | sort -t. -k1,1r -k 2,2nr -k 3,3nr -k4,4nr \ | cut -f2 -d $'|' \ || true)) DEFINITION="${DEFINITION_CANDIDATES[0]}" if [[ -n "$DEFINITION" ]]; then echo "$DEFINITION" else if [[ -z $BYPASS ]]; then echo "pyenv: no $([[ -z $FROM_KNOWN ]] && echo installed || echo known) versions match the prefix \`$prefix'" >&2 else echo "$prefix" fi if [[ -z $FORCE ]]; then exitcode=1 fi fi exit $exitcode pyenv-2.5.4/libexec/pyenv-local000077500000000000000000000036331476513315000164670ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Set or show the local application-specific Python version(s) # # Usage: pyenv local [-f|--force] [ [...]] # pyenv local --unset # # -f/--force Do not verify that the versions being set exist # # Sets the local application-specific Python version(s) by writing the # version name to a file named `.python-version'. # # When you run a Python command, pyenv will look for a `.python-version' # file in the current directory and each parent directory. If no such # file is found in the tree, pyenv will use the global Python version # specified with `pyenv global'. A version specified with the # `PYENV_VERSION' environment variable takes precedence over local # and global versions. # # can be specified multiple times and should be a version # tag known to pyenv. The special version string `system' will use # your default system Python. Run `pyenv versions' for a list of # available Python versions. # # Example: To enable the python2.7 and python3.7 shims to find their # respective executables you could set both versions with: # # 'pyenv local 3.7.0 2.7.15' set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --unset echo system exec pyenv-versions --bare fi while [[ $# -gt 0 ]] do case "$1" in -f|--force) FORCE=1 shift ;; *) break ;; esac done versions=("$@") if [ "$versions" = "--unset" ]; then rm -f .python-version elif [ -n "$versions" ]; then pyenv-version-file-write ${FORCE:+-f }.python-version "${versions[@]}" else if version_file="$(pyenv-version-file "$PWD")"; then IFS=: versions=($(pyenv-version-file-read "$version_file")) for version in "${versions[@]}"; do echo "$version" done else echo "pyenv: no local version configured for this directory" >&2 exit 1 fi fi pyenv-2.5.4/libexec/pyenv-prefix000077500000000000000000000033751476513315000166750ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Display prefixes for Python versions # Usage: pyenv prefix [...] # # Displays the directories where the given Python versions are installed, # separated by colons. If no version is given, `pyenv prefix' displays the # locations of the currently selected versions. set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo system exec pyenv-versions --bare fi if [ -n "$1" ]; then OLDIFS="$IFS" { IFS=: export PYENV_VERSION="$*" } IFS="$OLDIFS" elif [ -z "$PYENV_VERSION" ]; then PYENV_VERSION="$(pyenv-version-name)" fi PYENV_PREFIX_PATHS=() OLDIFS="$IFS" { IFS=: for version in ${PYENV_VERSION}; do if [ "$version" = "system" ]; then if PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python --skip-advice 2>/dev/null)" || \ PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python3 --skip-advice 2>/dev/null)" || \ PYTHON_PATH="$(PYENV_VERSION="${version}" pyenv-which python2 --skip-advice 2>/dev/null)"; then shopt -s extglob # In some distros (Arch), Python can be found in sbin as well as bin PYENV_PREFIX_PATH="${PYTHON_PATH%/?(s)bin/*}" PYENV_PREFIX_PATH="${PYENV_PREFIX_PATH:-/}" else echo "pyenv: system version not found in PATH" >&2 exit 1 fi else version="$(pyenv-latest -f "$version")" PYENV_PREFIX_PATH="${PYENV_ROOT}/versions/${version}" fi if [ -d "$PYENV_PREFIX_PATH" ]; then PYENV_PREFIX_PATHS=("${PYENV_PREFIX_PATHS[@]}" "$PYENV_PREFIX_PATH") else echo "pyenv: version \`${version}' not installed" >&2 exit 1 fi done } IFS="$OLDIFS" OLDIFS="$IFS" { IFS=: echo "${PYENV_PREFIX_PATHS[*]}" } IFS="$OLDIFS" pyenv-2.5.4/libexec/pyenv-rehash000077500000000000000000000112471476513315000166470ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Rehash pyenv shims (run this after installing executables) set -e [ -n "$PYENV_DEBUG" ] && set -x SHIM_PATH="${PYENV_ROOT}/shims" PROTOTYPE_SHIM_PATH="${SHIM_PATH}/.pyenv-shim" # Create the shims directory if it doesn't already exist. mkdir -p "$SHIM_PATH" acquire_lock() { # Ensure only one instance of pyenv-rehash is running at a time by # setting the shell's `noclobber` option and attempting to write to # the prototype shim file. If the file already exists, print a warning # to stderr and exit with a non-zero status. local ret set -o noclobber echo > "$PROTOTYPE_SHIM_PATH" 2>| /dev/null || ret=1 set +o noclobber [ -z "${ret}" ] } # If we were able to obtain a lock, register a trap to clean up the # prototype shim when the process exits. trap release_lock EXIT remove_prototype_shim() { rm -f "$PROTOTYPE_SHIM_PATH" } release_lock() { remove_prototype_shim } if [ ! -w "$SHIM_PATH" ]; then echo "pyenv: cannot rehash: $SHIM_PATH isn't writable" exit 1 fi unset acquired start=$SECONDS while (( SECONDS <= start + ${PYENV_REHASH_TIMEOUT:-60} )); do if acquire_lock 2>/dev/null; then acquired=1 break else # POSIX sleep(1) doesn't provide subsecond precision, but many others do sleep 0.1 2>/dev/null || sleep 1 fi done if [ -z "${acquired}" ]; then echo "pyenv: cannot rehash: $PROTOTYPE_SHIM_PATH exists" exit 1 fi # The prototype shim file is a script that re-execs itself, passing # its filename and any arguments to `pyenv exec`. This file is # hard-linked for every executable and then removed. The linking # technique is fast, uses less disk space than unique files, and also # serves as a locking mechanism. create_prototype_shim() { cat > "$PROTOTYPE_SHIM_PATH" </dev/null 2>&1; then rm -f "$SHIM_PATH"/* fi break done } # List basenames of executables for every Python version list_executable_names() { local version file pyenv-versions --bare --skip-aliases | \ while read -r version; do for file in "${PYENV_ROOT}/versions/${version}/bin/"*; do echo "${file##*/}" done done } # The basename of each argument passed to `make_shims` will be # registered for installation as a shim. In this way, plugins may call # `make_shims` with a glob to register many shims at once. make_shims() { local file shim for file; do shim="${file##*/}" register_shim "$shim" done } if ((${BASH_VERSINFO[0]} > 3)); then declare -A registered_shims # Registers the name of a shim to be generated. register_shim() { registered_shims["$1"]=1 } # Install all shims registered via `make_shims` or `register_shim` directly. install_registered_shims() { local shim file for shim in "${!registered_shims[@]}"; do file="${SHIM_PATH}/${shim}" [ -e "$file" ] || cp "$PROTOTYPE_SHIM_PATH" "$file" done } # Once the registered shims have been installed, we make a second pass # over the contents of the shims directory. Any file that is present # in the directory but has not been registered as a shim should be # removed. remove_stale_shims() { local shim for shim in "$SHIM_PATH"/*; do if [[ ! ${registered_shims["${shim##*/}"]} ]]; then rm -f "$shim" fi done } else # Same for bash < 4. registered_shims=" " register_shim() { registered_shims="${registered_shims}${1} " } install_registered_shims() { local shim file for shim in $registered_shims; do file="${SHIM_PATH}/${shim}" [ -e "$file" ] || cp "$PROTOTYPE_SHIM_PATH" "$file" done } remove_stale_shims() { local shim for shim in "$SHIM_PATH"/*; do if [[ "$registered_shims" != *" ${shim##*/} "* ]]; then rm -f "$shim" fi done } fi shopt -s nullglob # Create the prototype shim, then register shims for all known # executables. create_prototype_shim remove_outdated_shims # shellcheck disable=SC2046 make_shims $(list_executable_names | sort -u) # Allow plugins to register shims. OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks rehash`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script" done install_registered_shims remove_stale_shims pyenv-2.5.4/libexec/pyenv-root000077500000000000000000000001571476513315000163560ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Display the root directory where versions and shims are kept echo "$PYENV_ROOT" pyenv-2.5.4/libexec/pyenv-sh-rehash000077500000000000000000000006741476513315000172610ustar00rootroot00000000000000#!/usr/bin/env bash set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then exec pyenv-rehash --complete fi shell="$(basename "${PYENV_SHELL:-$SHELL}")" # When pyenv shell integration is enabled, delegate to pyenv-rehash, # then tell the shell to empty its command lookup cache. pyenv-rehash case "$shell" in fish ) # no rehash support ;; * ) echo "hash -r 2>/dev/null || true" ;; esac pyenv-2.5.4/libexec/pyenv-sh-shell000077500000000000000000000055711476513315000171170ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Set or show the shell-specific Python version # # Usage: pyenv shell ... # pyenv shell - # pyenv shell --unset # # Sets a shell-specific Python version by setting the `PYENV_VERSION' # environment variable in your shell. This version overrides local # application-specific versions and the global version. # # should be a string matching a Python version known to pyenv. # The special version string `system' will use your default system Python. # Run `pyenv versions' for a list of available Python versions. # # When `-` is passed instead of the version string, the previously set # version will be restored. With `--unset`, the `PYENV_VERSION` # environment variable gets unset, restoring the environment to the # state before the first `pyenv shell` call. set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --unset echo system exec pyenv-versions --bare fi versions=("$@") shell="$(basename "${PYENV_SHELL:-$SHELL}")" if [ -z "$versions" ]; then if [ -z "$PYENV_VERSION" ]; then echo "pyenv: no shell-specific version configured" >&2 exit 1 else echo 'echo "$PYENV_VERSION"' exit fi fi if [ "$versions" = "--unset" ]; then case "$shell" in fish ) echo 'set -gu PYENV_VERSION_OLD "$PYENV_VERSION"' echo "set -e PYENV_VERSION" ;; * ) echo 'PYENV_VERSION_OLD="${PYENV_VERSION-}"' echo "unset PYENV_VERSION" ;; esac exit fi if [ "$versions" = "-" ]; then case "$shell" in fish ) cat <&2 false end EOS ;; * ) cat <&2 false fi EOS ;; esac exit fi # Make sure the specified version is installed. if pyenv-prefix "${versions[@]}" >/dev/null; then OLDIFS="$IFS" IFS=: version="${versions[*]}" IFS="$OLDIFS" if [ "$version" != "$PYENV_VERSION" ]; then case "$shell" in fish ) echo 'set -gu PYENV_VERSION_OLD "$PYENV_VERSION"' echo "set -gx PYENV_VERSION \"$version\"" ;; * ) echo 'PYENV_VERSION_OLD="${PYENV_VERSION-}"' echo "export PYENV_VERSION=\"${version}\"" ;; esac fi else echo "false" exit 1 fi pyenv-2.5.4/libexec/pyenv-shims000077500000000000000000000005741476513315000165210ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: List existing pyenv shims # Usage: pyenv shims [--short] set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --short exit fi shopt -s nullglob for command in "${PYENV_ROOT}/shims/"*; do if [ "$1" = "--short" ]; then echo "${command##*/}" else echo "$command" fi done | sort pyenv-2.5.4/libexec/pyenv-version000077500000000000000000000007751476513315000170660ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Show the current Python version(s) and its origin # # Shows the currently selected Python version(s) and how it was # selected. To obtain only the version string, use `pyenv # version-name'. set -e [ -n "$PYENV_DEBUG" ] && set -x exitcode=0 OLDIFS="$IFS" IFS=: PYENV_VERSION_NAMES=($(pyenv-version-name)) || exitcode=$? IFS="$OLDIFS" for PYENV_VERSION_NAME in "${PYENV_VERSION_NAMES[@]}"; do echo "$PYENV_VERSION_NAME (set by $(pyenv-version-origin))" done exit $exitcode pyenv-2.5.4/libexec/pyenv-version-file000077500000000000000000000012261476513315000177730ustar00rootroot00000000000000#!/usr/bin/env bash # Usage: pyenv version-file [

] # Summary: Detect the file that sets the current pyenv version set -e [ -n "$PYENV_DEBUG" ] && set -x target_dir="$1" find_local_version_file() { local root="$1" while ! [[ "$root" =~ ^//[^/]*$ ]]; do if [ -f "${root}/.python-version" ]; then echo "${root}/.python-version" return 0 fi [ -n "$root" ] || break root="${root%/*}" done return 1 } if [ -n "$target_dir" ]; then find_local_version_file "$target_dir" else find_local_version_file "$PYENV_DIR" || { [ "$PYENV_DIR" != "$PWD" ] && find_local_version_file "$PWD" } || echo "${PYENV_ROOT}/version" fi pyenv-2.5.4/libexec/pyenv-version-file-read000077500000000000000000000024111476513315000207010ustar00rootroot00000000000000#!/usr/bin/env bash # Usage: pyenv version-file-read set -e [ -n "$PYENV_DEBUG" ] && set -x VERSION_FILE="$1" function is_version_safe() { # As needed, check that the constructed path exists as a child path of PYENV_ROOT/versions version="$1" if [[ "$version" == ".." || "$version" == */* ]]; then # Sanity check the value of version to prevent malicious path-traversal ( cd "$PYENV_ROOT/versions/$version" &>/dev/null || exit 1 [[ "$PWD" == "$PYENV_ROOT/versions/"* ]] ) return $? else return 0 fi } if [ -s "$VERSION_FILE" ]; then # Read the first non-whitespace word from the specified version file. # Be careful not to load it whole in case there's something crazy in it. IFS="$IFS"$'\r' sep= while read -n 1024 -r version _ || [[ $version ]]; do if [[ -z "$version" || "$version" == \#* ]]; then # Skip empty lines and comments continue elif ! is_version_safe "$version"; then # CVE-2022-35861 allowed arbitrary code execution in some contexts and is mitigated by is_version_safe. echo "pyenv: invalid version \`$version' ignored in \`$VERSION_FILE'" >&2 continue fi printf "%s%s" "$sep" "$version" sep=: done <"$VERSION_FILE" [[ $sep ]] && { echo; exit; } fi exit 1 pyenv-2.5.4/libexec/pyenv-version-file-write000077500000000000000000000015231476513315000211230ustar00rootroot00000000000000#!/usr/bin/env bash # Usage: pyenv version-file-write [-f|--force] [...] # # -f/--force Don't verify that the versions exist set -e [ -n "$PYENV_DEBUG" ] && set -x while [[ $# -gt 0 ]] do case "$1" in -f|--force) FORCE=1 shift ;; *) break ;; esac done PYENV_VERSION_FILE="$1" shift || true versions=("$@") if [ -z "$versions" ] || [ -z "$PYENV_VERSION_FILE" ]; then pyenv-help --usage version-file-write >&2 exit 1 fi # Make sure the specified version is installed. [[ -z $FORCE ]] && pyenv-prefix "${versions[@]}" >/dev/null # Write the version out to disk. # Create an empty file. Using "rm" might cause a permission error. > "$PYENV_VERSION_FILE" for version in "${versions[@]}"; do echo "$version" >> "$PYENV_VERSION_FILE" done pyenv-2.5.4/libexec/pyenv-version-name000077500000000000000000000035061476513315000177770ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Show the current Python version # # -f/--force (Internal) If a version doesn't exist, print it as is rather than produce an error set -e [ -n "$PYENV_DEBUG" ] && set -x while [[ $# -gt 0 ]] do case "$1" in -f|--force) FORCE=1 shift ;; *) break ;; esac done if [ -z "$PYENV_VERSION" ]; then PYENV_VERSION_FILE="$(pyenv-version-file)" PYENV_VERSION="$(pyenv-version-file-read "$PYENV_VERSION_FILE" || true)" fi OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks version-name`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script" done if [ -z "$PYENV_VERSION" ] || [ "$PYENV_VERSION" = "system" ]; then echo "system" exit fi version_exists() { local version="$1" [ -d "${PYENV_ROOT}/versions/${version}" ] } versions=() OLDIFS="$IFS" { IFS=: any_not_installed=0 for version in ${PYENV_VERSION}; do # Remove the explicit 'python-' prefix from versions like 'python-3.12'. normalised_version="${version#python-}" if version_exists "${version}" || [ "$version" = "system" ]; then versions+=("${version}") elif version_exists "${normalised_version}"; then versions+=("${normalised_version}") elif resolved_version="$(pyenv-latest -b "${version}")"; then versions+=("${resolved_version}") elif resolved_version="$(pyenv-latest -b "${normalised_version}")"; then versions+=("${resolved_version}") else if [[ -n $FORCE ]]; then versions+=("${normalised_version}") else echo "pyenv: version \`$version' is not installed (set by $(pyenv-version-origin))" >&2 any_not_installed=1 fi fi done } IFS="$OLDIFS" OLDIFS="$IFS" { IFS=: echo "${versions[*]}" } IFS="$OLDIFS" if [ "$any_not_installed" = 1 ]; then exit 1 fi pyenv-2.5.4/libexec/pyenv-version-origin000077500000000000000000000007141476513315000203440ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: Explain how the current Python version is set set -e [ -n "$PYENV_DEBUG" ] && set -x unset PYENV_VERSION_ORIGIN OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks version-origin`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script" done if [ -n "$PYENV_VERSION_ORIGIN" ]; then echo "$PYENV_VERSION_ORIGIN" elif [ -n "$PYENV_VERSION" ]; then echo "PYENV_VERSION environment variable" else pyenv-version-file fi pyenv-2.5.4/libexec/pyenv-versions000077500000000000000000000103051476513315000172370ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: List all Python versions available to pyenv # Usage: pyenv versions [--bare] [--skip-aliases] [--skip-envs] # # Lists all Python versions found in `$PYENV_ROOT/versions/*'. set -e [ -n "$PYENV_DEBUG" ] && set -x unset bare skip_aliases skip_envs # Provide pyenv completions for arg; do case "$arg" in --complete ) echo --bare echo --skip-aliases echo --skip-envs exit ;; --bare ) bare=1 ;; --skip-aliases ) skip_aliases=1 ;; --skip-envs ) skip_envs=1 ;; * ) pyenv-help --usage versions >&2 exit 1 ;; esac done versions_dir="${PYENV_ROOT}/versions" if ! enable -f "${BASH_SOURCE%/*}"/pyenv-realpath.dylib realpath 2>/dev/null; then if [ -n "$PYENV_NATIVE_EXT" ]; then echo "pyenv: failed to load \`realpath' builtin" >&2 exit 1 fi READLINK=$(type -P readlink) if [ -z "$READLINK" ]; then echo "pyenv: cannot find readlink - are you missing GNU coreutils?" >&2 exit 1 fi resolve_link() { $READLINK "$1" } realpath() { local path="$1" local name # Use a subshell to avoid changing the current path ( while [ -n "$path" ]; do name="${path##*/}" [ "$name" = "$path" ] || cd "${path%/*}" path="$(resolve_link "$name" || true)" done echo "${PWD}/$name" ) } fi if [ -d "$versions_dir" ]; then versions_dir="$(realpath "$versions_dir")" fi if ((${BASH_VERSINFO[0]} > 3)); then declare -A current_versions else current_versions=() fi if [ -n "$bare" ]; then include_system="" else hit_prefix="* " miss_prefix=" " OLDIFS="$IFS" IFS=: if ((${BASH_VERSINFO[0]} > 3)); then for i in $(pyenv-version-name || true); do current_versions["$i"]="1" done else current_versions=($(pyenv-version-name || true)) fi IFS="$OLDIFS" include_system="1" fi num_versions=0 exists() { local car="$1" local cdar shift for cdar in "$@"; do if [ "${car}" == "${cdar}" ]; then return 0 fi done return 1 } print_version() { local version="${1:?}" if [[ -n $bare ]]; then echo "$version" return fi local path="${2:?}" if [[ -L "$path" ]]; then # Only resolve the link itself for printing, do not resolve further. # Doing otherwise would misinform the user of what the link contains. version_repr="$version --> $(readlink "$path")" else version_repr="$version" fi if [[ ${BASH_VERSINFO[0]} -ge 4 && ${current_versions["$1"]} ]]; then echo "${hit_prefix}${version_repr} (set by $(pyenv-version-origin))" elif (( ${BASH_VERSINFO[0]} <= 3 )) && exists "$1" "${current_versions[@]}"; then echo "${hit_prefix}${version_repr} (set by $(pyenv-version-origin))" else echo "${miss_prefix}${version_repr}" fi num_versions=$((num_versions + 1)) } # Include "system" in the non-bare output, if it exists if [ -n "$include_system" ] && \ (PYENV_VERSION=system pyenv-which python --skip-advice >/dev/null 2>&1 || \ PYENV_VERSION=system pyenv-which python3 --skip-advice >/dev/null 2>&1 || \ PYENV_VERSION=system pyenv-which python2 --skip-advice >/dev/null 2>&1) ; then print_version system "/" fi shopt -s dotglob nullglob versions_dir_entries=("$versions_dir"/*) if sort --version-sort /dev/null 2>&1; then # system sort supports version sorting OLDIFS="$IFS" IFS=$'\n' versions_dir_entries=($( printf "%s\n" "${versions_dir_entries[@]}" | sort --version-sort )) IFS="$OLDIFS" fi for path in "${versions_dir_entries[@]}"; do if [ -d "$path" ]; then if [ -n "$skip_aliases" ] && [ -L "$path" ]; then target="$(realpath "$path")" [ "${target%/*}" == "$versions_dir" ] && continue [ "${target%/*/envs/*}" == "$versions_dir" ] && continue fi print_version "${path##*/}" "$path" # virtual environments created by anaconda/miniconda/pyenv-virtualenv if [[ -z $skip_envs ]]; then for env_path in "${path}/envs/"*; do if [ -d "${env_path}" ]; then print_version "${env_path#${PYENV_ROOT}/versions/}" "${env_path}" fi done fi fi done shopt -u dotglob nullglob if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then echo "Warning: no Python detected on the system" >&2 exit 1 fi pyenv-2.5.4/libexec/pyenv-whence000077500000000000000000000014011476513315000166350ustar00rootroot00000000000000#!/usr/bin/env bash # Summary: List all Python versions that contain the given executable # Usage: pyenv whence [--path] set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --path exec pyenv-shims --short fi if [ "$1" = "--path" ]; then print_paths="1" shift else print_paths="" fi whence() { local command="$1" pyenv-versions --bare | while read -r version; do path="$(pyenv-prefix "$version")/bin/${command}" if [ -x "$path" ]; then [ "$print_paths" ] && echo "$path" || echo "$version" fi done } PYENV_COMMAND="$1" if [ -z "$PYENV_COMMAND" ]; then pyenv-help --usage whence >&2 exit 1 fi result="$(whence "$PYENV_COMMAND")" [ -n "$result" ] && echo "$result" pyenv-2.5.4/libexec/pyenv-which000077500000000000000000000053441476513315000165000ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Display the full path to an executable # # Usage: pyenv which [--nosystem] [--skip-advice] # # Displays the full path to the executable that pyenv will invoke when # you run the given command. # Use --nosystem argument in case when you don't need to search command in the # system environment. # Internal switch --skip-advice used to skip printing an error message on a # failed search. set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then exec pyenv-shims --short fi system="system" SKIP_ADVICE="" PYENV_COMMAND="$1" while [[ $# -gt 0 ]] do case "$1" in --skip-advice) SKIP_ADVICE=1 shift ;; --nosystem) system="" shift ;; *) shift ;; esac done remove_from_path() { local path_to_remove="$1" local path_before local result=":${PATH//\~/$HOME}:" while [ "$path_before" != "$result" ]; do path_before="$result" result="${result//:$path_to_remove:/:}" done result="${result%:}" echo "${result#:}" } if [ -z "$PYENV_COMMAND" ]; then pyenv-help --usage which >&2 exit 1 fi OLDIFS="$IFS" IFS=: versions=(${PYENV_VERSION:-$(pyenv-version-name -f)}) IFS="$OLDIFS" declare -a nonexistent_versions for version in "${versions[@]}" "$system"; do if [ "$version" = "system" ]; then PATH="$(remove_from_path "${PYENV_ROOT}/shims")" PYENV_COMMAND_PATH="$(command -v "$PYENV_COMMAND" || true)" else # $version may be a prefix to be resolved by pyenv-latest version_path="$(pyenv-prefix "${version}" 2>/dev/null)" || \ { nonexistent_versions+=("$version"); continue; } # resolve $version for hooks version="$(basename "$version_path")" PYENV_COMMAND_PATH="$version_path/bin/${PYENV_COMMAND}" unset version_path fi if [ -x "$PYENV_COMMAND_PATH" ]; then break fi done OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks which`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script" done if [ -x "$PYENV_COMMAND_PATH" ]; then echo "$PYENV_COMMAND_PATH" else if (( ${#nonexistent_versions[@]} )); then for version in "${nonexistent_versions[@]}"; do echo "pyenv: version \`$version' is not installed (set by $(pyenv-version-origin))" >&2 done fi echo "pyenv: $PYENV_COMMAND: command not found" >&2 if [ -z "$SKIP_ADVICE" ]; then versions="$(pyenv-whence "$PYENV_COMMAND" || true)" if [ -n "$versions" ]; then { echo echo "The \`$PYENV_COMMAND' command exists in these Python versions:" echo "$versions" | sed 's/^/ /g' echo echo "Note: See 'pyenv help global' for tips on allowing both" echo " python2 and python3 to be found." } >&2 fi fi exit 127 fi pyenv-2.5.4/man/000077500000000000000000000000001476513315000134435ustar00rootroot00000000000000pyenv-2.5.4/man/man1/000077500000000000000000000000001476513315000142775ustar00rootroot00000000000000pyenv-2.5.4/man/man1/pyenv.1000066400000000000000000000476621476513315000155410ustar00rootroot00000000000000.TH PYENV 1 "24 Apr 2023" "PYENV" .SH NAME pyenv \- Simple Python version management .SH SYNOPSIS .B pyenv \fI\, \/\fR[\fI\,\/\fR] .SH DESCRIPTION pyenv lets you easily switch between multiple versions of Python\. It's simple, unobtrusive, and follows the UNIX tradition of single\-purpose tools that do one thing well\. .P To start using pyenv .IP "1." 3 \fBAppend\fR the following to \fB$HOME/.bashrc\fR .P .RS 15 .nf if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init - bash)" \n fi .fi .RE .RS 3 .P .nh Appending this line enables shims. Please make sure this line is placed toward the end of the shell configuration file since it manipulates \fBPATH\fR during the initialization\. .hy .TP 13 .B Debian note: Modify only your \fB~/\.bashrc\fR file instead of creating .br \fB~/\.bash_profile\fR .P .RS 0 \fBZsh note\fR: Modify your \fB~/\.zshrc\fR file instead of \fB~/\.bashrc\fR .P \fBWarning\fR: If you configured your system so that \fBBASH_ENV\fR variable points to \fB\.bashrc\fR\. You should almost certainly put the above mentioned line into \fB\.bash_profile\fR, and \fBnot\fR into \fB\.bashrc\fR. Otherwise you may observe strange behaviour, such as \fBpyenv\fR getting into an infinite loop. See #264 .UR https://github\.com/pyenv/pyenv/issues/264 .UE for details. .RE .RE .IP "2." 3 \fBRestart your shell so the path changes take effect\.\fR You can now begin using pyenv\. .P .RS 15 exec "$SHELL"\fR .RE .IP "3." 3 \fBInstall Python versions into \fB$(pyenv root)/versions\fR\.\fR For example, to download and install Python 3\.6\.12, run: .P .RS 15 .B pyenv install 3.6.12\fR .RE .P \fBNOTE:\fR If you need to pass configure option to build, please use \fBCONFIGURE_OPTS\fR environment variable. If you are having trouble installing a python version, please visit the wiki page about Common Build Problems .UR https://github\.com/pyenv/pyenv/wiki/Common\-build\-problems .UE .P \fBProxy note\fR: If you use a proxy, export \fBHTTP_PROXY\fR and \fBHTTPS_PROXY\fR environment variables. .P .SS "Stop using pyenv" The simplicity of pyenv makes it easy to temporarily disable it, or uninstall from the system\. To \fBdisable\fR pyenv managing your Python versions, simply remove the \fBpyenv init\fR line from your shell startup configuration\. This will remove pyenv shims directory from PATH, and future invocations like \fBpython\fR will execute the system Python version, as before pyenv\. .IP "" 0 .P \fBpyenv\fR will still be accessible on the command line, but your Python apps won't be affected by version switching\. .IP "" 0 .SH COMMAND LINE OPTIONS Like \fBgit\fR, the \fBpyenv\fR command delegates to subcommands based on its first argument\. .SS "Some useful pyenv commands are:" .TP 5 .B commands List all available pyenv commands .TP .B exec Run an executable with the selected Python version .TP .B global Set or show the global Python version(s) .TP .B help Display help for a command .TP .B hooks List hook scripts for a given pyenv command .TP .B init Configure the shell environment for pyenv .TP .B install Install a Python version using python\-build .TP .B local Set or show the local application\-specific Python version(s) .TP .B prefix Display prefix for a Python version .TP .B rehash Rehash pyenv shims (run this after installing executables) .TP .B root Display the root directory where versions and shims are kept .TP .B shell Set or show the shell\-specific Python version .TP .B shims List existing pyenv shims .TP .B uninstall Uninstall Python versions .TP .B version Show the current Python version(s) and its origin .TP .B version\-file Detect the file that sets the current pyenv version .TP .B version\-name Show the current Python version .TP .B version\-origin Explain how the current Python version is set .TP .B versions List all Python versions available to pyenv .TP .B whence List all Python versions that contain the given executable .TP .B which Display the full path to an executable .PP See `pyenv help ' for information on a specific command. For full documentation, see \fBCOMMAND REFERENCE\fR section .SH OPTIONS .TP .B \-h, \-\-help Show summary of options. .TP .B \-v, \-\-version Show version of program. .SH COMPARISON .P .B "pyenv does\|\.\|\.\|\. .P .IP \(bu 4 Let you \fBchange the global Python version\fR on a per\-user basis\. .IP \(bu 4 Provide support for \fBper\-project Python versions\fR\. .IP \(bu 4 Allow you to \fBoverride the Python version\fR with an environment variable\. .IP \(bu 4 Search commands from \fBmultiple versions of Python at a time\fR\. This may be helpful to test across Python versions with tox .IP "" 0 .P .B "In contrast with pythonbrew and pythonz, pyenv does not\|\.\|\.\|\." .IP \(bu 4 \fBDepend on Python itself\.\fR pyenv was made from pure shell scripts\. There is no bootstrap problem of Python\. .IP \(bu 4 \fBNeed to be loaded into your shell\.\fR Instead, pyenv's shim approach works by adding a directory to your \fB$PATH\fR\. .IP \(bu 4 \fBManage virtualenv\.\fR Of course, you can create virtualenv yourself, or pyenv\-virtualenv to automate the process\. .SH "How It Works" At a high level, pyenv intercepts Python commands using shim executables injected into your \fBPATH\fR, determines which Python version has been specified by your application, and passes your commands along to the correct Python installation\. .SS "Understanding PATH" When you run a command like \fBpython\fR or \fBpip\fR, your operating system searches through a list of directories to find an executable file with that name\. This list of directories lives in an environment variable called \fBPATH\fR, with each directory in the list separated by a colon: .IP "" 4 .nf /usr/local/bin:/usr/bin:/bin .fi .IP "" 0 .P Directories in \fBPATH\fR are searched from left to right, so a matching executable in a directory at the beginning of the list takes precedence over another one at the end\. In this example, the \fB/usr/local/bin\fR directory will be searched first, then \fB/usr/bin\fR, then \fB/bin\fR\. .SS "Understanding Shims" pyenv works by inserting a directory of \fIshims\fR at the front of your \fBPATH\fR: .IP "" 4 .nf $(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin .fi .IP "" 0 .P Through a process called \fIrehashing\fR, pyenv maintains shims in that directory to match every Python command (\fBpython\fR,\fBpip\fR,etc...) across every installed version of Python .P Shims are lightweight executables that simply pass your command along to pyenv\. So with pyenv installed, when you run, say, \fBpip\fR, your operating system will do the following: .IP \(bu 4 Search your \fBPATH\fR for an executable file named \fBpip\fR .IP \(bu 4 Find the pyenv shim named \fBpip\fR at the beginning of your \fBPATH\fR .IP \(bu 4 Run the shim named \fBpip\fR, which in turn passes the command along to pyenv .IP "" 0 .SS "Choosing the Python Version" When you execute a shim, pyenv determines which Python version to use by reading it from the following sources, in this order: .IP "1." 4 The \fBPYENV_VERSION\fR environment variable (if specified)\. You can use the \fBpyenv shell\fR command to set this environment variable in your current shell session\. .IP "2." 4 The application\-specific \fB\.python\-version\fR file in the current directory (if present)\. You can modify the current directory's \fB\.python\-version\fR file with the \fBpyenv local\fR command\. .IP "3." 4 The first \fB\.python\-version\fR file found (if any) by searching each parent directory, until reaching the root of your filesystem\. .IP "4." 4 The global \fB$(pyenv root)/version\fR file\. You can modify this file using the \fBpyenv global\fR command\. If the global version file is not present, pyenv assumes you want to use the "system" Python\. (In other words, whatever version would run if pyenv weren't in your \fBPATH\fR\.) .IP "" 0 .P .nh \fBNOTE:\fR You can activate multiple versions at the same time, including multiple versions of Python2 or Python3 simultaneously\. This allows for parallel usage of Python2 and Python3, and is required with tools like \fBtox\fR\. For example, to set your path to first use your \fBsystem\fR Python and Python3 (set to 2\.7\.9 and 3\.4\.2 in this example), but also have Python 3\.3\.6, 3\.2, and 2\.5 available on your \fBPATH\fR, one would first \fBpyenv install\fR the missing versions, then set \fBpyenv global system 3\.3\.6 3\.2 2\.5\fR\. At this point, one should be able to find the full executable path to each of these using \fBpyenv which\fR, e\.g\. \fBpyenv which python2\.5\fR (should display \fB$(pyenv root)/versions/2\.5/bin/python2\.5\fR), or \fBpyenv which python3\.4\fR (should display path to system Python3)\. You can also specify multiple versions in a \fB\.python\-version\fR file, separated by newlines or any whitespace\. hy .SS "Locating the Python Installation" Once pyenv has determined which version of Python your application has specified, it passes the command along to the corresponding Python installation\. .P Each Python version is installed into its own directory under .nf \fB$(pyenv root)/versions\fR\. .fi .P For example, you might have these versions installed: .IP \(bu 4 \fB$(pyenv root)/versions/2\.7\.8/\fR .IP \(bu 4 \fB$(pyenv root)/versions/3\.4\.2/\fR .IP \(bu 4 \fB$(pyenv root)/versions/pypy\-2\.4\.0/\fR .IP "" 0 .P As far as pyenv is concerned, version names are simply the directories in \fB$(pyenv root)/versions\fR\. .SS "Managing Virtual Environments" There is a pyenv plugin named pyenv\-virtualenv which comes with various features to help pyenv users to manage virtual environments created by virtualenv or Anaconda\. Because the \fBactivate\fR script of those virtual environments are relying on mutating \fB$PATH\fR variable of user's interactive shell, it will intercept pyenv's shim style command execution hooks\. We'd recommend to install pyenv\-virtualenv as well if you have some plan to play with those virtual environments\. .SH "Advanced Configuration" Skip this section unless you must know what every line in your shell profile is doing\. .P \fBpyenv init\fR is the only command that crosses the line of loading extra commands into your shell\. Coming from rvm, some of you might be opposed to this idea\. Here's what \fBpyenv init\fR actually does: .IP "1." 4 \fBSets up your shims path\.\fR This is the only requirement for pyenv to function properly\. You can do this by hand by prepending \fB$(pyenv root)/shims\fR to your \fB$PATH\fR\. .IP "2." 4 \fBRehashes shims\.\fR From time to time you'll need to rebuild your shim files\. Doing this on init makes sure everything is up to date\. You can always run \fBpyenv rehash\fR manually\. You can disable this functionality by adding \fB--no-rehash\fR to the end of your \fBpyenv init\fR command line. .IP "3." 4 \fBInstalls the sh dispatcher\.\fR This bit is also optional, but allows pyenv and plugins to change variables in your current shell, making commands like \fBpyenv shell\fR possible\. The sh dispatcher doesn't do anything crazy like override \fBcd\fR or hack your shell prompt, but if for some reason you need \fBpyenv\fR to be a real script rather than a shell function, you can safely skip it\. .IP "" 0 .P To see exactly what happens under the hood for yourself, run \fB"pyenv init \-"\fR\. .SH "Uninstalling Python Versions" As time goes on, you will accumulate Python versions in your \fB$(pyenv root)/versions\fR directory\. .P To remove old Python versions, \fBpyenv uninstall\fR command to automate the removal process\. .P Alternatively, simply \fBrm \-rf\fR the directory of the version you want to remove\. You can find the directory of a particular Python version with the \fBpyenv prefix\fR command, .P e\.g\. \fBpyenv prefix 2\.6\.8\fR\. .SH "Command Reference" .P The most common subcommands are: .SS "pyenv commands" Lists all available pyenv commands\. .SS "pyenv local" Sets a local application\-specific Python version by writing the version name to a \fB\.python\-version\fR file in the current directory\. This version overrides the global version, and can be overridden itself by setting the \fBPYENV_VERSION\fR environment variable or with the \fBpyenv shell\fR command\. .IP "" 4 .nf $ pyenv local 2\.7\.6 .fi .IP "" 0 .P When run without a version number, \fBpyenv local\fR reports the currently configured local version\. You can also unset the local version: .IP "" 4 .nf $ pyenv local \-\-unset .fi .IP "" 0 .P Previous versions of pyenv stored local version specifications in a file named \fB\.pyenv\-version\fR\. For backwards compatibility, pyenv will read a local version specified in an \fB\.pyenv\-version\fR file, but a \fB\.python\-version\fR file in the same directory will take precedence\. .P You can specify multiple versions as local Python at once\. .P Let's say if you have two versions of 2\.7\.6 and 3\.3\.3\. If you prefer 2\.7\.6 over 3\.3\.3, .IP "" 4 .nf $ pyenv local 2\.7\.6 3\.3\.3 $ pyenv versions system * 2\.7\.6 (set by /Users/yyuu/path/to/project/\.python\-version) * 3\.3\.3 (set by /Users/yyuu/path/to/project/\.python\-version) $ python \-\-version Python 2\.7\.6 $ python2\.7 \-\-version Python 2\.7\.6 $ python3\.3 \-\-version Python 3\.3\.3 .fi .IP "" 0 .P or, if you prefer 3\.3\.3 over 2\.7\.6, .IP "" 4 .nf $ pyenv local 3\.3\.3 2\.7\.6 $ pyenv versions system * 2\.7\.6 (set by /Users/yyuu/path/to/project/\.python\-version) * 3\.3\.3 (set by /Users/yyuu/path/to/project/\.python\-version) venv27 $ python \-\-version Python 3\.3\.3 $ python2\.7 \-\-version Python 2\.7\.6 $ python3\.3 \-\-version Python 3\.3\.3 .fi .IP "" 0 .SS "pyenv global" Sets the global version of Python to be used in all shells by writing the version name to the \fB~/\.pyenv/version\fR file\. This version can be overridden by an application\-specific \fB\.python\-version\fR file, or by setting the \fBPYENV_VERSION\fR environment variable\. .IP "" 4 .nf $ pyenv global 2\.7\.6 .fi .IP "" 0 .P The special version name \fBsystem\fR tells pyenv to use the system Python (detected by searching your \fB$PATH\fR)\. .P When run without a version number, \fBpyenv global\fR reports the currently configured global version\. .P You can specify multiple versions as global Python at once\. .P Let's say if you have two versions of 2\.7\.6 and 3\.3\.3\. If you prefer 2\.7\.6 over 3\.3\.3, .IP "" 4 .nf $ pyenv global 2\.7\.6 3\.3\.3 $ pyenv versions system * 2\.7\.6 (set by /Users/yyuu/\.pyenv/version) * 3\.3\.3 (set by /Users/yyuu/\.pyenv/version) $ python \-\-version Python 2\.7\.6 $ python2\.7 \-\-version Python 2\.7\.6 $ python3\.3 \-\-version Python 3\.3\.3 .fi .IP "" 0 .P or, if you prefer 3\.3\.3 over 2\.7\.6, .IP "" 4 .nf $ pyenv global 3\.3\.3 2\.7\.6 $ pyenv versions system * 2\.7\.6 (set by /Users/yyuu/\.pyenv/version) * 3\.3\.3 (set by /Users/yyuu/\.pyenv/version) venv27 $ python \-\-version Python 3\.3\.3 $ python2\.7 \-\-version Python 2\.7\.6 $ python3\.3 \-\-version Python 3\.3\.3 .fi .IP "" 0 .SS "pyenv shell" Sets a shell\-specific Python version by setting the \fBPYENV_VERSION\fR environment variable in your shell\. This version overrides application\-specific versions and the global version\. .IP "" 4 .nf $ pyenv shell pypy\-2\.2\.1 .fi .IP "" 0 .P When run without a version number, \fBpyenv shell\fR reports the current value of \fBPYENV_VERSION\fR\. You can also unset the shell version: .IP "" 4 .nf $ pyenv shell \-\-unset .fi .IP "" 0 .P Note that you'll need pyenv's shell integration enabled (step 3 of the installation instructions) in order to use this command\. If you prefer not to use shell integration, you may simply set the \fBPYENV_VERSION\fR variable yourself: .IP "" 4 .nf $ export PYENV_VERSION=pypy\-2\.2\.1 .fi .IP "" 0 .P You can specify multiple versions via \fBPYENV_VERSION\fR at once\. .P Let's say if you have two versions of 2\.7\.6 and 3\.3\.3\. If you prefer 2\.7\.6 over 3\.3\.3, .IP "" 4 .nf $ pyenv shell 2\.7\.6 3\.3\.3 $ pyenv versions system * 2\.7\.6 (set by PYENV_VERSION environment variable) * 3\.3\.3 (set by PYENV_VERSION environment variable) $ python \-\-version Python 2\.7\.6 $ python2\.7 \-\-version Python 2\.7\.6 $ python3\.3 \-\-version Python 3\.3\.3 .fi .IP "" 0 .P or, if you prefer 3\.3\.3 over 2\.7\.6, .IP "" 4 .nf $ pyenv shell 3\.3\.3 2\.7\.6 $ pyenv versions system * 2\.7\.6 (set by PYENV_VERSION environment variable) * 3\.3\.3 (set by PYENV_VERSION environment variable) venv27 $ python \-\-version Python 3\.3\.3 $ python2\.7 \-\-version Python 2\.7\.6 $ python3\.3 \-\-version Python 3\.3\.3 .fi .IP "" 0 .SS "pyenv install" Install a Python version .IP "" 4 .nf Usage: pyenv install [\-f] [\-kvp] pyenv install [\-f] [\-kvp] pyenv install \-l|\-\-list \-l, \-\-list List all available versions \-f, \-\-force Install even if the version appears to be installed already \-s, \-\-skip\-existing Skip the installation if the version appears to be installed already python\-build options: \-k, \-\-keep Keep source tree in $PYENV_BUILD_ROOT after installation (defaults to $PYENV_ROOT/sources) \-v, \-\-verbose Verbose mode: print compilation status to stdout \-p, \-\-patch Apply a patch from stdin before building \-g, \-\-debug Build a debug version .fi .IP "" 0 .P To list the all available versions of Python, including Anaconda, Jython, pypy, and stackless, use: .IP "" 4 .nf $ pyenv install \-\-list .fi .IP "" 0 .P Then install the desired versions: .IP "" 4 .nf $ pyenv install 2\.7\.6 $ pyenv install 2\.6\.8 $ pyenv versions system 2\.6\.8 * 2\.7\.6 (set by /home/yyuu/\.pyenv/version) .fi .IP "" 0 .SS "pyenv uninstall" Uninstall Python versions\. .IP "" 4 .nf Usage: pyenv uninstall [\-f|\-\-force] ... \-f Attempt to remove the specified version without prompting for confirmation\. If the version does not exist, do not display an error message\. .fi .IP "" 0 .SS "pyenv rehash" Installs shims for all Python binaries known to pyenv (i\.e\., \fB~/\.pyenv/versions/*/bin/*\fR)\. Run this command after you install a new version of Python, or install a package that provides binaries\. .IP "" 4 .nf $ pyenv rehash .fi .IP "" 0 .SS "pyenv version" Displays the currently active Python version, along with information on how it was set\. .IP "" 4 .nf $ pyenv version 2\.7\.6 (set by /home/yyuu/\.pyenv/version) .fi .IP "" 0 .SS "pyenv versions" Lists all Python versions known to pyenv, and shows an asterisk next to the currently active version\. .IP "" 4 .nf $ pyenv versions 2\.5\.6 2\.6\.8 * 2\.7\.6 (set by /home/yyuu/\.pyenv/version) 3\.3\.3 jython\-2\.5\.3 pypy\-2\.2\.1 .fi .IP "" 0 .SS "pyenv which" Displays the full path to the executable that pyenv will invoke when you run the given command\. .IP "" 4 .nf $ pyenv which python3\.3 /home/yyuu/\.pyenv/versions/3\.3\.3/bin/python3\.3 .fi .IP "" 0 .SS "pyenv whence" Lists all Python versions with the given command installed\. .IP "" 4 .nf $ pyenv whence 2to3 2\.6\.8 2\.7\.6 3\.3\.3 .fi .IP "" 0 .SH "Environment variables" You can affect how pyenv operates with the following settings: .TP 28 .B name (default) .B description .TP 28 .B PYENV_VERSION Specifies the Python version to be used. Also see \fBpyenv shell\fR .TP .B PYENV_ROOT (\fB~/.pyenv\fR) Defines the directory under which Python versions and shims reside. Also see \fBpyenv root\fR .TP .B PYENV_DEBUG Outputs debug information. .br Also as: \fBpyenv --debug \fR .TP .B PYENV_HOOK_PATH Colon\-separated list of paths searched for pyenv hooks\. .TP .B PYENV_DIR (\fB$PWD\fR) Directory to start searching for \fB\.python\-version\fR files\. .TP .B HTTP_PROXY,HTTPS_PROXY Proxy Variables .TP .B CONFIGURE_OPTS Pass configure options to build. .TP .B PYTHON_BUILD_ARIA2_OPTS Used to pass additional parameters to \fBaria2\fR .UR https://aria2\.github\.io/ .UE If the \fBaria2c\fR binary is available on PATH, pyenv uses \fBaria2c\fR instead of \fBcurl\fR or \fBwget\fR to download the Python Source code\. If you have an unstable internet connection, you can use this variable to instruct \fBaria2\fR to accelerate the download\. In most cases, you will only need to use \fB\-x 10 \-k 1M\fR as value to \fBPYTHON_BUILD_ARIA2_OPTS\fR environment variable .SH "License" The \fBMIT\fR License pyenv-2.5.4/plugins/000077500000000000000000000000001476513315000143515ustar00rootroot00000000000000pyenv-2.5.4/plugins/.gitignore000066400000000000000000000001151476513315000163360ustar00rootroot00000000000000/* !/.gitignore !/version-ext-compat !/python-build /python-build/test/build pyenv-2.5.4/plugins/python-build/000077500000000000000000000000001476513315000167675ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/LICENSE000066400000000000000000000021111476513315000177670ustar00rootroot00000000000000Copyright (c) 2013 Yamashita, Yuu Copyright (c) 2012-2013 Sam Stephenson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pyenv-2.5.4/plugins/python-build/README.md000066400000000000000000000355251476513315000202600ustar00rootroot00000000000000# python-build python-build is a [pyenv](https://github.com/pyenv/pyenv) plugin that provides a `pyenv install` command to compile and install different versions of Python on UNIX-like systems. You can also use python-build without pyenv in environments where you need precise control over Python version installation. See the [list of releases](https://github.com/pyenv/pyenv/releases) for changes in each version. ## Installation ### Installing as a pyenv plugin (recommended) Since python-build is bundled with pyenv by default, you do not need to do anything. ### Installing as a standalone program (advanced) Installing python-build as a standalone program will give you access to the `python-build` command for precise control over Python version installation. If you have pyenv installed, you will also be able to use the `pyenv install` command. git clone https://github.com/pyenv/pyenv.git cd pyenv/plugins/python-build ./install.sh This will install python-build into `/usr/local`. If you do not have write permission to `/usr/local`, you will need to run `sudo ./install.sh` instead. You can install to a different prefix by setting the `PREFIX` environment variable. To update python-build after it has been installed, run `git pull` in your cloned copy of the repository, then re-run the install script. ### Installing with Homebrew (for OS X users) Mac OS X users can install python-build with the [Homebrew](http://brew.sh) package manager. This will give you access to the `python-build` command. If you have pyenv installed, you will also be able to use the `pyenv install` command. *This is the recommended method of installation if you installed pyenv with Homebrew.* brew install pyenv Or, if you would like to install the latest development release: brew install --HEAD pyenv ## Usage Before you begin, you should ensure that your build environment has the proper system dependencies for compiling the wanted Python Version (see our [recommendations](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)). ### Using `pyenv install` with pyenv To install a Python version for use with pyenv, run `pyenv install` with exact name of the version you want to install. For example, pyenv install 2.7.4 Python versions will be installed into a directory of the same name under `~/.pyenv/versions`. To see a list of all available Python versions, run `pyenv install --list`. You may also tab-complete available Python versions if your pyenv installation is properly configured. ### Using `python-build` standalone If you have installed python-build as a standalone program, you can use the `python-build` command to compile and install Python versions into specific locations. Run the `python-build` command with the exact name of the version you want to install and the full path where you want to install it. For example, python-build 2.7.4 ~/local/python-2.7.4 To see a list of all available Python versions, run `python-build --definitions`. Pass the `-v` or `--verbose` flag to `python-build` as the first argument to see what's happening under the hood. ### Custom definitions Both `pyenv install` and `python-build` accept a path to a custom definition file in place of a version name. Custom definitions let you develop and install versions of Python that are not yet supported by python-build. See the [python-build built-in definitions](https://github.com/pyenv/pyenv/tree/master/plugins/python-build/share/python-build) as a starting point for custom definition files. #### Adding definitions with a Pyenv plugin You can add your own definitions with a [Pyenv plugin](https://github.com/pyenv/pyenv?tab=readme-ov-file#pyenv-plugins) by placing them under `$PYENV_ROOT/plugins/your_plugin_name/share/python-build`. ### Default build configuration Without the user customizing the build with environment variables (see below), `python-build` builds Python with mostly default Configure options to maintain the principle of the least surprise. The exceptions -- non-default options that are set by default -- are listed below: | Option/Behavior | Rationale | |-----------------|-----------| | `--enable-shared` is on by default. Pass `--disable-shared` to Configure options to override | The official CPython Docker image uses it. It's required to embed CPython. | | argument to `--enable-universalsdk` is ignored and set to `/` | | `--with-universal-archs` defaults to `universal2` on ARM64 architecture | the only dual-architecture Macs in use today are Apple Silicon which can only build that one | | argument to `--enable-framework` is ignored and set to a specific value | CPython's build logic requires a very specific argument to avoid installing the `Applications` part globally | | argument to `--enable-unicode` in non-MacOS is overridden to `ucs4` for 2.x-3.3 | | `MACOSX_DEPLOYMENT_TARGET` defaults to the running MacOS version | #### Integration with 3rd-party package ecosystems ##### Homebrew Homebrew is used to find dependency packages if `brew` is found on `PATH`: * In MacOS, or * If the running Pyenv itself is installed with Homebrew Set `PYTHON_BUILD_USE_HOMEBREW` or `PYTHON_BUILD_SKIP_HOMEBREW` to override this default. When Homebrew is used, its `include` and `lib` paths are added to compiler search path (the latter is also set as `rpath`), and also Python dependencies that are typically keg-only are searched for in the Homebrew installation and added individually. **NOTE:** Homebrew is not used in Linux by default because it's rolling-release which causes a problem. Upgrading a Python dependency in Homebrew to a new major version (that `brew` does without warning) would break all Pyenv-managed installations that depend on it. You can use a [community plugin `fix-version`](https://github.com/pyenv/pyenv/wiki/Plugins#community-plugins) to fix installations in such a case. ##### Portage In FreeBSD, if `pkg` is on PATH, Ports are searched for some dependencies that Configure is known to not search for via `pkg-config`. (Later versions of CPython search for more packages via `pkg-config` so this may eventually become redundant.) ### Special environment variables You can set certain environment variables to control the build process. * `TMPDIR` sets the location where python-build stores temporary files. * `PYTHON_BUILD_BUILD_PATH` sets the location in which sources are downloaded and built. By default, this is a subdirectory of `TMPDIR`. * `PYTHON_BUILD_CACHE_PATH`, if set, specifies a directory to use for caching downloaded package files. * `PYTHON_BUILD_MIRROR_URL` overrides the default mirror URL root to one of your choosing. * `PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM`, if set, does not append the SHA2 checksum of the file to the mirror URL. * `PYTHON_BUILD_SKIP_MIRROR`, if set, forces python-build to download packages from their original source URLs instead of using a mirror. * `PYTHON_BUILD_HTTP_CLIENT`, explicitly specify the HTTP client type to use. `aria2`, `curl` and `wget` are the supported values and by default, are searched in that order. * `PYTHON_BUILD_CURL_OPTS`, `PYTHON_BUILD_WGET_OPTS`, `PYTHON_BUILD_ARIA2_OPTS` pass additional parameters to the corresponding HTTP client. * `PYTHON_BUILD_SKIP_HOMEBREW`, if set, will not search for libraries installed by Homebrew when it would normally will. * `PYTHON_BUILD_USE_HOMEBREW`, if set, will search for libraries installed by Homebrew when it would normally not. * `PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA`, override the Homebrew OpenSSL formula to use. * `PYTHON_BUILD_ROOT` overrides the default location from where build definitions in `share/python-build/` are looked up. * `PYTHON_BUILD_DEFINITIONS` can be a list of colon-separated paths that get additionally searched when looking up build definitions. * `CC` sets the path to the C compiler. * `CONFIGURE_OPTS` lets you pass additional options to `./configure`. * `MAKE` lets you override the command to use for `make`. Useful for specifying GNU make (`gmake`) on some systems. * `MAKE_OPTS` (or `MAKEOPTS`) lets you pass additional options to `make`. * `MAKE_INSTALL_OPTS` lets you pass additional options to `make install`. * `_CFLAGS`, `_CPPFLAGS`, `_LDFLAGS` let you pass additional options to `CFLAGS`/`CPPFLAGS`/`LDFLAGS` specifically for building `` (Python itself or a dependency library) from source as part of the build script. `` should be a capitalized name of the package without version (technically, capitalized first argument to `install_package` without version). E.g. for CPython, it's "`PYTHON`", for Readline, "`READLINE`", for PyPy (only applies when building it from source), "`PYPY`". Check the source of the build script you're using if unsure. * `_CONFIGURE_OPTS`, `_MAKE_OPTS`, `_MAKE_INSTALL_OPTS`, `_MAKE_INSTALL_TARGET` allow you to specify configure and make options for building `` (same as above). "Make install target" would replace "`install`" in the `make install` invocation. ### Applying patches to Python before compiling Both `pyenv install` and `python-build` support the `--patch` (`-p`) flag that signals that a patch from stdin should be applied to Python, Jython or PyPy source code before the `./configure` and compilation steps. Example usage: ```sh # applying a single patch $ pyenv install --patch 2.7.10 < /path/to/python.patch # applying a patch from HTTP $ pyenv install --patch 2.7.10 < <(curl -sSL http://git.io/python.patch) # applying multiple patches $ cat fix1.patch fix2.patch | pyenv install --patch 2.7.10 ``` ### Building for maximum performance Building CPython with `--enable-optimizations` will result in a faster interpreter at the cost of significantly longer build times. Most notably, this enables PGO (profile guided optimization). While your mileage may vary, it is common for performance improvement from this to be in the ballpark of 30%. ```sh env PYTHON_CONFIGURE_OPTS='--enable-optimizations --with-lto' PYTHON_CFLAGS='-march=native -mtune=native' pyenv install --verbose 3.6.0 ``` You can also customize the task used for profile guided optimization by setting the `PROFILE_TASK` environment variable, for instance, `PROFILE_TASK='-m test.regrtest --pgo -j0'` will run much faster than the default task. ### Checksum verification If you have the `shasum`, `openssl`, or `sha256sum` tool installed, python-build will automatically verify the SHA2 checksum of each downloaded package before installing it. Checksums are optional and specified as anchors on the package URL in each definition. (All bundled definitions include checksums.) ### Package download mirrors python-build will first attempt to download package files from a mirror hosted on GitHub Pages. If this fails, it will fall back to the official URL specified in the definition file. You can point python-build to another mirror by specifying the `PYTHON_BUILD_MIRROR_URL` environment variable. Package mirror URLs are constructed by joining `$PYTHON_BUILD_MIRROR_URL` with the SHA2 checksum of the package file as specified in the URL in the installation script (the part after the hash sign). E.g.: ``` https://mycache.example.com/0419e9085bf51b7a672009b3f50dbf1859acdf18ba725d0ec19aa5c8503f0ea3 ``` If you have replicated the directory structure of an official site, the easiest way to adapt would be to make symlinks at the mirror's root: ``` 0419e9085bf51b7a672009b3f50dbf1859acdf18ba725d0ec19aa5c8503f0ea3 -> 3.10.10/Python-3.10.10.tar.xz ``` The rationale is to abstract away difference between directory structures of sites of various Python flavors and their occasional changes as well as to accomodate people who only wish to cache some select downloads. This also allows to mirror multiple sites at once. If the mirror being used does not have the same checksum (*e.g.* with a pull-through cache like Artifactory), you can set the `PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM` environment variable. If you don't have an SHA2 program installed, python-build will skip the download mirror and use official URLs instead. You can force python-build to bypass the mirror by setting the `PYTHON_BUILD_SKIP_MIRROR` environment variable. The official python-build download mirror is provided by [GitHub Pages](http://yyuu.github.io/pythons/). ### Package download cache Python-build will keep a cache of downloaded package files at the location specified by the `PYTHON_BUILD_CACHE_PATH` environment variable if it exists. The default is `~/.pyenv/cache`, so you can enable caching by just creating that directory. The name of the would-be cached file is reported by Pyenv in the "Downloading <filename>..." message. It's possible to warm up the cache by manually putting the file there under an appropriate name. ### Keeping the build directory after installation Both `python-build` and `pyenv install` accept the `-k` or `--keep` flag, which tells python-build to keep the downloaded source after installation. This can be useful if you need to use `gdb` and `memprof` with Python. Source code will be kept in a parallel directory tree `~/.pyenv/sources` when using `--keep` with the `pyenv install` command. You should specify the location of the source code with the `PYTHON_BUILD_BUILD_PATH` environment variable when using `--keep` with `python-build`. ## Getting Help Please see the [pyenv wiki](https://github.com/pyenv/pyenv/wiki) for solutions to common problems. [wiki]: https://github.com/pyenv/pyenv/wiki If you can't find an answer on the wiki, open an issue on the [issue tracker](https://github.com/pyenv/pyenv/issues). Be sure to include the full build log for build failures. ## Contributing ### Testing new python versions If you are contributing a new python version for python-build, you can test the build in a [docker](https://www.docker.com/) container based on Ubuntu 18.04. With docker installed: ```sh docker build -t my_container . docker run my_container pyenv install ``` To enter a shell which will allow you to build and then test a python version, replace the second line with ```sh docker run -it my_container ``` The container will need to be rebuilt whenever you change the repo, but after the first build, this will be very fast, as the layer including the build dependencies will be cached. Changes made inside the container will not be persisted. To test *all* new versions since a particular revision (e.g. `master`), `cd` to the root of your `pyenv` repo, and run this script: ```sh set -e set -x docker build -t pyenv-test-container . git diff --name-only master \ | grep '^plugins/python-build/share/python-build/' \ | awk -F '/' '{print $NF}' \ | xargs -I _ docker run pyenv-test-container pyenv install _ ``` - Build the docker image with the **t**ag pyenv-test-container - Look for the names files changed since revision `master` - Filter out any which don't live where python-build keeps its build scripts - Look only at the file name (i.e. the python version name) - Run a new docker container for each, building that version pyenv-2.5.4/plugins/python-build/bin/000077500000000000000000000000001476513315000175375ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/bin/pyenv-install000077500000000000000000000210661476513315000222770ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Install a Python version using python-build # # Usage: pyenv install [-f] [-kvp] ... # pyenv install [-f] [-kvp] # pyenv install -l|--list # pyenv install --version # # -l/--list List all available versions # -f/--force Install even if the version appears to be installed already # -s/--skip-existing Skip if the version appears to be installed already # # python-build options: # # -k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation # (defaults to $PYENV_ROOT/sources) # -p/--patch Apply a patch from stdin before building # -v/--verbose Verbose mode: print compilation status to stdout # --version Show version of python-build # -g/--debug Build a debug version # # For detailed information on installing Python versions with # python-build, including a list of environment variables for adjusting # compilation, see: https://github.com/pyenv/pyenv#readme # set -e [ -n "$PYENV_DEBUG" ] && set -x # Add `share/python-build/` directory from each pyenv plugin to the list of # paths where build definitions are looked up. shopt -s nullglob for plugin_path in "$PYENV_ROOT"/plugins/*/share/python-build; do PYTHON_BUILD_DEFINITIONS="${PYTHON_BUILD_DEFINITIONS}:${plugin_path}" done export PYTHON_BUILD_DEFINITIONS shopt -u nullglob # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --list echo --force echo --skip-existing echo --keep echo --patch echo --verbose echo --version echo --debug exec python-build --definitions fi # Load shared library functions eval "$(python-build --lib)" usage() { pyenv-help install 2>/dev/null [ -z "$1" ] || exit "$1" } definitions() { local query="$1" python-build --definitions | $(type -P ggrep grep | head -n1) -F "$query" || true } indent() { sed 's/^/ /' } unset FORCE unset SKIP_EXISTING unset KEEP unset VERBOSE unset HAS_PATCH unset DEBUG [ -n "$PYENV_DEBUG" ] && VERBOSE="-v" parse_options "$@" for option in "${OPTIONS[@]}"; do case "$option" in "h" | "help" ) usage 0 ;; "l" | "list" ) echo "Available versions:" definitions | indent exit ;; "f" | "force" ) FORCE=true ;; "s" | "skip-existing" ) SKIP_EXISTING=true ;; "k" | "keep" ) [ -n "${PYENV_BUILD_ROOT}" ] || PYENV_BUILD_ROOT="${PYENV_ROOT}/sources" ;; "v" | "verbose" ) VERBOSE="-v" ;; "p" | "patch" ) HAS_PATCH="-p" ;; "g" | "debug" ) DEBUG="-g" ;; "version" ) exec python-build --version ;; * ) usage 1 >&2 ;; esac done unset VERSION_NAME # The first argument contains the definition to install. If the # argument is missing, try to install whatever local app-specific # version is specified by pyenv. Show usage instructions if a local # version is not specified. DEFINITIONS=("${ARGUMENTS[@]}") [[ "${#DEFINITIONS[*]}" -eq 0 ]] && DEFINITIONS=($(pyenv-local 2>/dev/null || true)) [[ "${#DEFINITIONS[*]}" -eq 0 ]] && usage 1 >&2 # Define `before_install` and `after_install` functions that allow # plugin hooks to register a string of code for execution before or # after the installation process. declare -a before_hooks after_hooks before_install() { local hook="$1" before_hooks["${#before_hooks[@]}"]="$hook" } after_install() { local hook="$1" after_hooks["${#after_hooks[@]}"]="$hook" } # Plan cleanup on unsuccessful installation. cleanup() { [ -z "${PREFIX_EXISTS}" ] && rm -rf "$PREFIX" } trap cleanup SIGINT OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks install`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script"; done COMBINED_STATUS=0 for DEFINITION in "${DEFINITIONS[@]}"; do STATUS=0 # Try to resolve a prefix if user indeed gave a prefix. # We install the version under the resolved name # and hooks also see the resolved name DEFINITION="$(pyenv-latest -f -k "$DEFINITION")" # Set VERSION_NAME from $DEFINITION. Then compute the installation prefix. VERSION_NAME="${DEFINITION##*/}" [ -n "$DEBUG" ] && VERSION_NAME="${VERSION_NAME}-debug" PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}" [ -d "${PREFIX}" ] && PREFIX_EXISTS=1 # If the installation prefix exists, prompt for confirmation unless # the --force option was specified. if [ -d "${PREFIX}/bin" ]; then if [ -z "$FORCE" ] && [ -z "$SKIP_EXISTING" ]; then echo "pyenv: $PREFIX already exists" >&2 read -p "continue with installation? (y/N) " case "$REPLY" in y | Y | yes | YES ) ;; * ) { STATUS=1; [[ $STATUS -gt $COMBINED_STATUS ]] && COMBINED_STATUS=$STATUS; }; continue ;; esac elif [ -n "$SKIP_EXISTING" ]; then # Since we know the python version is already installed, and are opting to # not force installation of existing versions, we just `exit 0` here to # leave things happy continue fi fi # If PYENV_BUILD_ROOT is set, always pass keep options to python-build. if [ -n "${PYENV_BUILD_ROOT}" ]; then export PYTHON_BUILD_BUILD_PATH="${PYENV_BUILD_ROOT}/${VERSION_NAME}" KEEP="-k" fi # Set PYTHON_BUILD_CACHE_PATH to $PYENV_ROOT/cache, if the directory # exists and the variable is not already set. if [ -z "${PYTHON_BUILD_CACHE_PATH}" ] && [ -d "${PYENV_ROOT}/cache" ]; then export PYTHON_BUILD_CACHE_PATH="${PYENV_ROOT}/cache" fi if [ -z "${PYENV_BOOTSTRAP_VERSION}" ]; then case "${VERSION_NAME}" in [23]"."* ) # Default PYENV_VERSION to the friendly Python version. (The # CPython installer requires an existing Python installation to run. An # unsatisfied local .python-version file can cause the installer to # fail.) for version_info in "${VERSION_NAME%-dev}" "${VERSION_NAME%.*}" "${VERSION_NAME%%.*}"; do # Anaconda's `curl` doesn't work on platform where `/etc/pki/tls/certs/ca-bundle.crt` isn't available (e.g. Debian) for version in $(pyenv-whence "python${version_info}" 2>/dev/null || true); do if [[ "${version}" != "anaconda"* ]] && [[ "${version}" != "miniconda"* ]]; then PYENV_BOOTSTRAP_VERSION="${version}" break 2 fi done done ;; "pypy"*"-dev" | "pypy"*"-src" ) # PyPy/PyPy3 requires existing Python 2.7 to build if [ -n "${PYENV_RPYTHON_VERSION}" ]; then PYENV_BOOTSTRAP_VERSION="${PYENV_RPYTHON_VERSION}" else for version in $(pyenv-versions --bare | sort -r); do if [[ "${version}" == "2.7"* ]]; then PYENV_BOOTSTRAP_VERSION="$version" break fi done fi if [ -n "$PYENV_BOOTSTRAP_VERSION" ]; then for dep in pycparser; do if ! PYENV_VERSION="$PYENV_BOOTSTRAP_VERSION" pyenv-exec python -c "import ${dep}" 1>/dev/null 2>&1; then echo "pyenv-install: $VERSION_NAME: PyPy requires \`${dep}' in $PYENV_BOOTSTRAP_VERSION to build from source." >&2 exit 1 fi done else echo "pyenv-install: $VERSION_NAME: PyPy requires Python 2.7 to build from source." >&2 exit 1 fi ;; esac fi if [ -n "${PYENV_BOOTSTRAP_VERSION}" ]; then export PYENV_VERSION="${PYENV_BOOTSTRAP_VERSION}" fi # Execute `before_install` hooks. for hook in "${before_hooks[@]}"; do eval "$hook"; done # Invoke `python-build` and record the exit status in $STATUS. python-build $KEEP $VERBOSE $HAS_PATCH $DEBUG "$DEFINITION" "$PREFIX" || \ { STATUS=$?; [[ $STATUS -gt $COMBINED_STATUS ]] && COMBINED_STATUS=$STATUS; } # Display a more helpful message if the definition wasn't found. if [ "$STATUS" == "2" ]; then { candidates="$(definitions "$DEFINITION")" here="$(dirname "${0%/*}")/../.." if [ -n "$candidates" ]; then echo echo "The following versions contain \`$DEFINITION' in the name:" echo "$candidates" | indent fi echo echo "See all available versions with \`pyenv install --list'." echo echo -n "If the version you need is missing, try upgrading pyenv" if [ "$here" != "${here#$(brew --prefix 2>/dev/null)}" ]; then printf ":\n\n" echo " brew update && brew upgrade pyenv" elif [ -d "${here}/.git" ]; then printf ":\n\n" echo " cd ${here} && git pull && cd -" else printf ".\n" fi } >&2 fi # Execute `after_install` hooks. for hook in "${after_hooks[@]}"; do eval "$hook"; done # Run `pyenv-rehash` after a successful installation. if [[ $STATUS -eq 0 ]]; then pyenv-rehash else cleanup break fi done exit "${COMBINED_STATUS}" pyenv-2.5.4/plugins/python-build/bin/pyenv-uninstall000077500000000000000000000036171476513315000226440ustar00rootroot00000000000000#!/usr/bin/env bash # # Summary: Uninstall Python versions # # Usage: pyenv uninstall [-f|--force] ... # # -f Attempt to remove the specified version without prompting # for confirmation. If the version does not exist, do not # display an error message. # # See `pyenv versions` for a complete list of installed versions. # set -e [ -n "$PYENV_DEBUG" ] && set -x # Provide pyenv completions if [ "$1" = "--complete" ]; then echo --force exec pyenv versions --bare fi usage() { pyenv-help uninstall 2>/dev/null [ -z "$1" ] || exit "$1" } if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then usage 0 fi unset FORCE if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then FORCE=true shift fi [ "$#" -gt 0 ] || usage 1 >&2 versions=("$@") for version in "${versions[@]}"; do case "$version" in "" | -* ) usage 1 >&2 ;; esac done declare -a before_hooks after_hooks before_uninstall() { local hook="$1" before_hooks["${#before_hooks[@]}"]="$hook" } after_uninstall() { local hook="$1" after_hooks["${#after_hooks[@]}"]="$hook" } OLDIFS="$IFS" IFS=$'\n' scripts=(`pyenv-hooks uninstall`) IFS="$OLDIFS" for script in "${scripts[@]}"; do source "$script"; done uninstall-python() { local DEFINITION="$1" local VERSION_NAME="${DEFINITION##*/}" local PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}" if [ -z "$FORCE" ]; then if [ ! -d "$PREFIX" ]; then echo "pyenv: version \`$VERSION_NAME' not installed" >&2 exit 1 fi read -p "pyenv: remove $PREFIX? (y/N) " case "$REPLY" in y | Y | yes | YES ) ;; * ) exit 1 ;; esac fi for hook in "${before_hooks[@]}"; do eval "$hook"; done if [ -d "$PREFIX" ]; then rm -rf "$PREFIX" pyenv-rehash echo "pyenv: $VERSION_NAME uninstalled" fi for hook in "${after_hooks[@]}"; do eval "$hook"; done } for version in "${versions[@]}"; do uninstall-python "$version" done pyenv-2.5.4/plugins/python-build/bin/python-build000077500000000000000000002164471476513315000221210ustar00rootroot00000000000000#!/usr/bin/env bash # # Usage: python-build [-kpv] # python-build --definitions # python-build --version # # -k/--keep Do not remove source tree after installation # -p/--patch Apply a patch from stdin before building # -v/--verbose Verbose mode: print compilation status to stdout # -4/--ipv4 Resolve names to IPv4 addresses only # -6/--ipv6 Resolve names to IPv6 addresses only # --definitions List all built-in definitions # --version Show version of python-build # -g/--debug Build a debug version # PYTHON_BUILD_VERSION="20180424" OLDIFS="$IFS" set -E shopt -s extglob [ -n "$PYENV_DEBUG" ] && { export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' set -x } exec 3<&2 # preserve original stderr at fd 3 lib() { parse_options() { OPTIONS=() ARGUMENTS=() local arg option index for arg in "$@"; do if [ "${arg:0:1}" = "-" ]; then if [ "${arg:1:1}" = "-" ]; then OPTIONS[${#OPTIONS[*]}]="${arg:2}" else index=1 while option="${arg:$index:1}"; do [ -n "$option" ] || break OPTIONS[${#OPTIONS[*]}]="$option" index=$(($index+1)) done fi else ARGUMENTS[${#ARGUMENTS[*]}]="$arg" fi done } if [ "$1" == "--$FUNCNAME" ]; then declare -f "$FUNCNAME" echo "$FUNCNAME \"\$1\";" exit fi } lib "$1" READLINK=$(type -P readlink) if [ -z "$READLINK" ]; then echo "pyenv: cannot find readlink - are you missing GNU coreutils?" >&2 exit 1 fi resolve_link() { $READLINK "$1" } abs_dirname() { local path="$1" # Use a subshell to avoid changing the current path ( while [ -n "$path" ]; do cd_path="${path%/*}" if [[ "$cd_path" != "$path" ]]; then cd "$cd_path" fi name="${path##*/}" path="$(resolve_link "$name" || true)" done echo "$PWD" ) } capitalize() { printf "%s" "$1" | tr a-z A-Z } sanitize() { printf "%s" "$1" | sed "s/[^A-Za-z0-9.-]/_/g; s/__*/_/g" } colorize() { if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2" else echo -n "$2" fi } os_information() { if type -p lsb_release >/dev/null; then lsb_release -sir | xargs echo elif type -p sw_vers >/dev/null; then echo "OS X $(sw_vers -productVersion)" elif [ -r /etc/os-release ]; then source /etc/os-release echo "$NAME" $VERSION_ID else local os="$(cat /etc/{centos,redhat,fedora,system}-release /etc/debian_version 2>/dev/null | head -n1)" echo "${os:-$(uname -sr)}" fi } is_mac() { [ "$(uname -s)" = "Darwin" ] || return 1 [ $# -eq 0 ] || [ "$(osx_version)" "$@" ] } can_use_homebrew() { [[ -n "$PYTHON_BUILD_USE_HOMEBREW" && -n "$PYTHON_BUILD_SKIP_HOMEBREW" ]] && { echo "error: mutually exclusive environment variables PYTHON_BUILD_USE_HOMEBREW and PYTHON_BUILD_SKIP_HOMEBREW are set" >&3 exit 1 } [[ -n "$PYTHON_BUILD_USE_HOMEBREW" ]] && return 0 [[ -n "$PYTHON_BUILD_SKIP_HOMEBREW" ]] && return 1 is_mac && return 0 # In Linux, if Pyenv itself is installed with Homebrew, # we assume the user wants to take dependencies from there as well by default command -v brew &>/dev/null && [[ $(abs_dirname "${BASH_SOURCE}") == "$(abs_dirname "$(brew --prefix 2>/dev/null ||true)")"/* ]] && return 0 return 1 } # 9.1 -> 901 # 10.9 -> 1009 # 10.10 -> 1010 osx_version() { local -a ver IFS=. ver=( `sw_vers -productVersion` ) IFS="$OLDIFS" echo $(( ${ver[0]}*100 + ${ver[1]} )) } build_failed() { { echo colorize 1 "BUILD FAILED" echo " ($(os_information) using $(version))" echo if ! rmdir "${BUILD_PATH}" 2>/dev/null; then echo "Inspect or clean up the working tree at ${BUILD_PATH}" fi if file_is_not_empty "$LOG_PATH"; then colorize 33 "Results logged to ${LOG_PATH}" printf "\n\n" echo "Last 10 log lines:" tail -n 10 "$LOG_PATH" fi } >&3 exit 1 } file_is_not_empty() { local filename="$1" local line_count="$(wc -l "$filename" 2>/dev/null || true)" if [ -n "$line_count" ]; then words=( $line_count ) [ "${words[0]}" -gt 0 ] else return 1 fi } num_cpu_cores() { local num case "$(uname -s)" in Darwin | *BSD ) num="$(sysctl -n hw.ncpu 2>/dev/null || true)" ;; SunOS ) num="$(getconf NPROCESSORS_ONLN 2>/dev/null || true)" ;; * ) num="$({ getconf _NPROCESSORS_ONLN || grep -c ^processor /proc/cpuinfo; } 2>/dev/null)" num="${num#0}" ;; esac echo "${num:-2}" } install_package() { install_package_using "tarball" 1 "$@" } install_nightly_package() { install_package_using "nightly_tarball" 2 "$@" } install_git() { install_package_using "git" 2 "$@" } install_hg() { install_package_using "hg" 2 "$@" } install_svn() { install_package_using "svn" 2 "$@" } install_jar() { install_package_using "jar" 1 "$@" } install_zip() { install_package_using "zip" 1 "$@" } install_script() { install_package_using "script" 1 "$@" } install_package_using() { local package_type="$1" local package_type_nargs="$2" local package_name="$3" shift 3 local fetch_args=( "$package_name" "${@:1:$package_type_nargs}" ) local make_args=( "$package_name" ) local arg last_arg for arg in "${@:$(( $package_type_nargs + 1 ))}"; do if [ "$last_arg" = "--if" ]; then "$arg" || return 0 elif [ "$arg" != "--if" ]; then make_args["${#make_args[@]}"]="$arg" fi last_arg="$arg" done pushd "$BUILD_PATH" >&4 "fetch_${package_type}" "${fetch_args[@]}" make_package "${make_args[@]}" popd >&4 echo "Installed ${package_name} to ${PREFIX_PATH}" >&2 } make_package() { local package_name="$1" shift pushd "$package_name" >&4 setup_builtin_patches "$package_name" before_install_package "$package_name" build_package "$package_name" $* after_install_package "$package_name" cleanup_builtin_patches "$package_name" fix_directory_permissions popd >&4 } compute_sha2() { local output if type shasum &>/dev/null; then output="$(shasum -a 256 -b)" || return 1 echo "${output% *}" elif type openssl &>/dev/null; then local openssl="$(command -v "$(brew --prefix openssl 2>/dev/null || true)"/bin/openssl openssl | head -n1)" output="$("$openssl" dgst -sha256 2>/dev/null)" || return 1 echo "${output##* }" elif type sha256sum &>/dev/null; then output="$(sha256sum -b)" || return 1 echo "${output%% *}" else return 1 fi } compute_md5() { local output if type md5 &>/dev/null; then md5 -q elif type openssl &>/dev/null; then output="$(openssl md5)" || return 1 echo "${output##* }" elif type md5sum &>/dev/null; then output="$(md5sum -b)" || return 1 echo "${output%% *}" else return 1 fi } has_checksum_support() { local checksum_command="$1" local has_checksum_var="HAS_CHECKSUM_SUPPORT_${checksum_command}" if [ -z "${!has_checksum_var+defined}" ]; then printf -v "$has_checksum_var" "$(echo test | "$checksum_command" >/dev/null; echo $?)" fi return "${!has_checksum_var}" } verify_checksum() { local checksum_command local filename="$1" local expected_checksum="$(echo "$2" | tr [A-Z] [a-z])" # If the specified filename doesn't exist, return success [ -e "$filename" ] || return 0 case "${#expected_checksum}" in 0) return 0 ;; # empty checksum; return success 32) checksum_command="compute_md5" ;; 64) checksum_command="compute_sha2" ;; *) { echo echo "unexpected checksum length: ${#expected_checksum} (${expected_checksum})" echo "expected 0 (no checksum), 32 (MD5), or 64 (SHA2-256)" echo } >&4 return 1 ;; esac # If chosen provided checksum algorithm isn't supported, return success has_checksum_support "$checksum_command" || return 0 # If the computed checksum is empty, return failure local computed_checksum=`echo "$($checksum_command < "$filename")" | tr [A-Z] [a-z]` [ -n "$computed_checksum" ] || return 1 if [ "$expected_checksum" != "$computed_checksum" ]; then { echo echo "checksum mismatch: ${filename} (file is corrupt)" echo "expected $expected_checksum, got $computed_checksum" echo } >&4 return 1 fi } http() { local method="$1" [ -n "$2" ] || return 1 shift 1 PYTHON_BUILD_HTTP_CLIENT="${PYTHON_BUILD_HTTP_CLIENT:-$(detect_http_client)}" [ -n "$PYTHON_BUILD_HTTP_CLIENT" ] || return 1 "http_${method}_${PYTHON_BUILD_HTTP_CLIENT}" "$@" } detect_http_client() { local client for client in aria2c curl wget; do if type "$client" &>/dev/null; then echo "$client" return fi done echo "error: please install \`aria2c\`, \`curl\`, or \`wget\` and try again" >&2 return 1 } http_head_aria2c() { aria2c --dry-run --no-conf=true ${ARIA2_OPTS} "$1" >&4 2>&1 } http_get_aria2c() { # aria2c always treats -o argument as a relative path local out dir_out; if [[ -n "$2" ]]; then out="$(basename $2)"; dir_out="$(dirname $2)"; else out="$(mktemp "out.XXXXXX")"; dir_out="$TMPDIR"; fi # In Ubuntu, aria2c is only available as a snap. Snaps cannot read or write /tmp # (files cannot be found, any write result is silently discarded). local aria2c_is_snap; if [[ $(command -v aria2c) == "/snap/"* ]]; then aria2c_is_snap=1; fi if [[ -n $aria2c_is_snap ]]; then local real_dir_out="$dir_out" # presumably, snaps can always write to under $HOME dir_out="$HOME" fi if aria2c --allow-overwrite=true --no-conf=true -d "${dir_out}" -o "${out}" ${ARIA2_OPTS} "$1" >&4; then [ -n "$2" ] || cat "${dir_out:-.}/${out}" else false fi ret=$? if [[ -n "$2" && -n $aria2c_is_snap ]]; then mv "$dir_out/$out" "$real_dir_out/$out" fi return "$ret" } http_head_curl() { curl -qsILf ${CURL_OPTS} "$1" >&4 2>&1 } http_get_curl() { curl -q -o "${2:--}" -sSLf ${CURL_OPTS} "$1" } http_head_wget() { wget -q --spider ${WGET_OPTS} "$1" >&4 2>&1 } http_get_wget() { wget -nv ${WGET_OPTS} -O "${2:--}" "$1" } fetch_tarball() { local package_name="$1" local package_url="$2" local mirror_url local checksum local extracted_dir if [ "$package_url" != "${package_url/\#}" ]; then checksum="${package_url#*#}" package_url="${package_url%%#*}" if [ -n "$PYTHON_BUILD_MIRROR_URL" ]; then if [[ -z "$PYTHON_BUILD_DEFAULT_MIRROR" || $package_url != */www.python.org/* ]]; then mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" fi fi fi local tar_args="xzf" local package_filename="${package_name}.tar.gz" if [ "$package_url" != "${package_url%bz2}" ]; then if ! type -p bzip2 >/dev/null; then echo "warning: bzip2 not found; consider installing \`bzip2\` package" >&4 fi package_filename="${package_filename%.gz}.bz2" tar_args="${tar_args/z/j}" fi if [ "$package_url" != "${package_url%xz}" ]; then if ! type -p xz >/dev/null; then echo "warning: xz not found; consider installing \`xz\` package" >&4 fi package_filename="${package_filename%.gz}.xz" tar_args="${tar_args/z/J}" fi if ! reuse_existing_tarball "$package_filename" "$checksum"; then # Report the cached file name -- sometimes, it's useful to know (#1743) echo "Downloading ${package_filename}..." >&2 http head "$mirror_url" && download_tarball "$mirror_url" "$package_filename" "$checksum" || download_tarball "$package_url" "$package_filename" "$checksum" fi { if tar $tar_args "$package_filename"; then if [ ! -d "$package_name" ]; then extracted_dir="$(find_extracted_directory)" mv "$extracted_dir" "$package_name" fi if [ -z "$KEEP_BUILD_PATH" ]; then rm -f "$package_filename" else true fi fi } >&4 2>&1 } find_extracted_directory() { for f in *; do if [ -d "$f" ]; then echo "$f" return fi done echo "Extracted directory not found" >&2 return 1 } fetch_nightly_tarball() { local package_name="$1" local package_url="$2" local package_pattern="$3" fetch_tarball "$1" "$2" if [ ! -e "${package_name}" ]; then local nightly_package_name="$(echo ${package_pattern})" if [ -e "${nightly_package_name}" ]; then ln -fs "${nightly_package_name}" "${package_name}" fi fi } reuse_existing_tarball() { local package_filename="$1" local checksum="$2" # Reuse existing file in build location if [ -e "$package_filename" ] && verify_checksum "$package_filename" "$checksum"; then return 0 fi # Reuse previously downloaded file in cache location [ -n "$PYTHON_BUILD_CACHE_PATH" ] || return 1 local cached_package_filename="${PYTHON_BUILD_CACHE_PATH}/$package_filename" [ -e "$cached_package_filename" ] || return 1 verify_checksum "$cached_package_filename" "$checksum" >&4 2>&1 || return 1 ln -s "$cached_package_filename" "$package_filename" >&4 2>&1 || return 1 } download_tarball() { local official_source="www.python.org/ftp/python" if [ -n "$PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM" ]; then local package_url="$(echo "$1" | sed -e "s|.*//${URL_BASE:-$official_source}|$PYTHON_BUILD_MIRROR_URL|g")" else local package_url="$1" fi [ -n "$package_url" ] || return 1 local package_filename="$2" local checksum="$3" echo "-> $package_url" >&2 if http get "$package_url" "$package_filename" >&4 2>&1; then verify_checksum "$package_filename" "$checksum" >&4 2>&1 || return 1 else echo "error: failed to download $package_filename" >&2 return 1 fi if [ -n "$PYTHON_BUILD_CACHE_PATH" ]; then local cached_package_filename="${PYTHON_BUILD_CACHE_PATH}/$package_filename" { mv "$package_filename" "$cached_package_filename" ln -s "$cached_package_filename" "$package_filename" } >&4 2>&1 || return 1 fi } has_tar_xz_support() { [[ -z $_PYTHON_BUILD_FORCE_SKIP_XZ ]] && tar Jcf - /dev/null 1>/dev/null 2>&1 } fetch_git() { local package_name="$1" local git_url="$2" local git_ref="$3" echo "Cloning ${git_url}..." >&2 if type git &>/dev/null; then if [ -n "$PYTHON_BUILD_CACHE_PATH" ]; then pushd "$PYTHON_BUILD_CACHE_PATH" >&4 local clone_name="$(sanitize "$git_url")" if [ -e "${clone_name}" ]; then { cd "${clone_name}" git fetch --force "$git_url" "+${git_ref}:${git_ref}" } >&4 2>&1 else git clone --bare --branch "$git_ref" "$git_url" "${clone_name}" >&4 2>&1 fi git_url="$PYTHON_BUILD_CACHE_PATH/${clone_name}" popd >&4 fi if [ -e "${package_name}" ]; then ( cd "${package_name}" git fetch --depth 1 origin "+${git_ref}" git checkout -q -B "$git_ref" "origin/${git_ref}" ) >&4 2>&1 else git clone --depth 1 --branch "$git_ref" "$git_url" "${package_name}" >&4 2>&1 fi else echo "error: please install \`git\` and try again" >&2 exit 1 fi } fetch_hg() { local package_name="$1" local hg_url="$2" local hg_ref="$3" echo "Cloning ${hg_url}..." >&2 if type hg &>/dev/null; then if [ -n "$PYTHON_BUILD_CACHE_PATH" ]; then pushd "$PYTHON_BUILD_CACHE_PATH" >&4 local clone_name="$(sanitize "$hg_url")" if [ -e "${clone_name}" ]; then { cd "${clone_name}" hg pull --force "$hg_url" } >&4 2>&1 else { hg clone --branch "$hg_ref" "$hg_url" "${clone_name}" cd "${clone_name}" hg update null } >&4 2>&1 fi hg_url="$PYTHON_BUILD_CACHE_PATH/${clone_name}" popd >&4 fi hg clone --branch "$hg_ref" "$hg_url" "${package_name}" >&4 2>&1 else echo "error: please install \`mercurial\` and try again" >&2 exit 1 fi } fetch_svn() { local package_name="$1" local svn_url="$2" local svn_rev="$3" echo "Checking out ${svn_url}..." >&2 if type svn &>/dev/null; then svn co -r "$svn_rev" "$svn_url" "${package_name}" >&4 2>&1 elif type svnlite &>/dev/null; then svnlite co -r "$svn_rev" "$svn_url" "${package_name}" >&4 2>&1 else echo "error: please install Subversion and try again" >&2 exit 1 fi } fetch_jar() { local package_name="$1" local package_url="$2" local mirror_url local checksum if [ "$package_url" != "${package_url/\#}" ]; then checksum="${package_url#*#}" package_url="${package_url%%#*}" if [ -n "$PYTHON_BUILD_MIRROR_URL" ]; then mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" fi fi local package_filename="${package_name}.jar" if ! reuse_existing_tarball "$package_filename" "$checksum"; then echo "Downloading ${package_filename}..." >&2 http head "$mirror_url" && download_tarball "$mirror_url" "$package_filename" "$checksum" || download_tarball "$package_url" "$package_filename" "$checksum" fi # Must use full path to jar and destination directory: # http://bugs.jython.org/issue2350 { if $JAVA -jar "$PWD/${package_name}.jar" -s -d "$PWD/${package_name}"; then if [ -z "$KEEP_BUILD_PATH" ]; then rm -f "$package_filename" else true fi fi } >&4 2>&1 } fetch_zip() { local package_name="$1" local package_url="$2" local mirror_url local checksum if [ "$package_url" != "${package_url/\#}" ]; then checksum="${package_url#*#}" package_url="${package_url%%#*}" if [ -n "$PYTHON_BUILD_MIRROR_URL" ]; then mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" fi fi local package_filename="${package_name}.zip" if ! reuse_existing_tarball "$package_filename" "$checksum"; then echo "Downloading ${package_filename}..." >&2 http head "$mirror_url" && download_tarball "$mirror_url" "$package_filename" "$checksum" || download_tarball "$package_url" "$package_filename" "$checksum" fi { if unzip "$package_filename"; then if [ -z "$KEEP_BUILD_PATH" ]; then rm -f "$package_filename" else true fi fi } >&4 2>&1 } fetch_script() { local package_name="$1" local package_url="$2" local mirror_url local checksum if [ "$package_url" != "${package_url/\#}" ]; then checksum="${package_url#*#}" package_url="${package_url%%#*}" if [ -n "$PYTHON_BUILD_MIRROR_URL" ]; then mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" fi fi local package_filename="${package_name}.sh" # TODO: extract suffix from ${package_url} if ! reuse_existing_tarball "$package_filename" "$checksum"; then echo "Downloading ${package_filename}..." >&2 http head "$mirror_url" && download_tarball "$mirror_url" "$package_filename" "$checksum" || download_tarball "$package_url" "$package_filename" "$checksum" fi mkdir -p "$(dirname "${package_name}/${package_filename}")" mv -f "${package_filename}" "${package_name}/${package_filename}" } build_package() { local package_name="$1" shift if [ "$#" -eq 0 ]; then local commands="standard" else local commands="$*" fi echo "Installing ${package_name}..." >&2 [ -n "$HAS_PATCH" ] && apply_patch "$package_name" <(cat "${package_name}.patch") for command in $commands; do "build_package_${command}" "$package_name" done } package_option() { local package_name="$1" local command_name="$2" local variable="$(capitalize "${package_name}_${command_name}")_OPTS_ARRAY" local array="$variable[@]" shift 2 local value=( "${!array}" "$@" ) eval "$variable=( \"\${value[@]}\" )" } build_package_warn_eol() { local package_name="$1" { echo echo "WARNING: $package_name is past its end of life and is now unsupported." echo "It no longer receives bug fixes or critical security updates." echo } >&3 } build_package_warn_unsupported() { local package_name="$1" { echo echo "WARNING: $package_name is nearing its end of life." echo "It only receives critical security updates, no bug fixes." echo } >&3 } build_package_standard_build() { local package_name="$1" if [ "${MAKEOPTS+defined}" ]; then MAKE_OPTS="$MAKEOPTS" elif [ -z "${MAKE_OPTS+defined}" ]; then MAKE_OPTS="-j $(num_cpu_cores)" fi # Support YAML_CONFIGURE_OPTS, PYTHON_CONFIGURE_OPTS, etc. local package_var_name="$(capitalize "${package_name%%-*}")" local PACKAGE_CONFIGURE="${package_var_name}_CONFIGURE" local PACKAGE_PREFIX_PATH="${package_var_name}_PREFIX_PATH" local PACKAGE_CONFIGURE_OPTS="${package_var_name}_CONFIGURE_OPTS" local PACKAGE_CONFIGURE_OPTS_ARRAY="${package_var_name}_CONFIGURE_OPTS_ARRAY[@]" local PACKAGE_MAKE_OPTS="${package_var_name}_MAKE_OPTS" local PACKAGE_MAKE_OPTS_ARRAY="${package_var_name}_MAKE_OPTS_ARRAY[@]" local PACKAGE_CFLAGS="${package_var_name}_CFLAGS" local PACKAGE_CPPFLAGS="${package_var_name}_CPPFLAGS" local PACKAGE_LDFLAGS="${package_var_name}_LDFLAGS" if [ "$package_var_name" = "PYTHON" ]; then use_homebrew || true use_custom_tcltk || use_homebrew_tcltk || true use_homebrew_readline || use_freebsd_pkg || true use_homebrew_ncurses || true if is_mac -ge 1014; then use_xcode_sdk_zlib || use_homebrew_zlib || true else use_homebrew_zlib || true fi use_dsymutil || true use_free_threading || true fi ( if [[ -n "${!PACKAGE_CFLAGS}" ]]; then export CFLAGS="${CFLAGS:+$CFLAGS }${!PACKAGE_CFLAGS}" fi if [[ -n "${!PACKAGE_CPPFLAGS}" ]]; then export CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }${!PACKAGE_CPPFLAGS}" fi if [[ -n "${!PACKAGE_LDFLAGS}" ]]; then export LDFLAGS="${LDFLAGS:+$LDFLAGS }${!PACKAGE_LDFLAGS}" fi if [ -z "$CC" ] && is_mac -ge 1010; then export CC=clang fi ${!PACKAGE_CONFIGURE:-./configure} --prefix="${!PACKAGE_PREFIX_PATH:-$PREFIX_PATH}" \ "${!PACKAGE_CONFIGURE_OPTS_ARRAY}" $CONFIGURE_OPTS ${!PACKAGE_CONFIGURE_OPTS} || return 1 ) >&4 2>&1 { "$MAKE" "${!PACKAGE_MAKE_OPTS_ARRAY}" $MAKE_OPTS ${!PACKAGE_MAKE_OPTS} } >&4 2>&1 } build_package_standard_install() { local package_name="$1" local package_var_name="$(capitalize "${package_name%%-*}")" local PACKAGE_MAKE_INSTALL_OPTS="${package_var_name}_MAKE_INSTALL_OPTS" local PACKAGE_MAKE_INSTALL_OPTS_ARRAY="${package_var_name}_MAKE_INSTALL_OPTS_ARRAY[@]" local PACKAGE_MAKE_INSTALL_TARGET="${package_var_name}_MAKE_INSTALL_TARGET" { "$MAKE" "${!PACKAGE_MAKE_INSTALL_TARGET:-install}" $MAKE_INSTALL_OPTS ${!PACKAGE_MAKE_INSTALL_OPTS} "${!PACKAGE_MAKE_INSTALL_OPTS_ARRAY}" } >&4 2>&1 } # Backward Compatibility for standard function build_package_standard() { build_package_standard_build "$@" build_package_standard_install "$@" } build_package_autoconf() { { autoreconf } >&4 2>&1 } build_package_python() { local package_name="$1" { "$PYTHON_BIN" setup.py install } >&4 2>&1 } remove_windows_files() { cd "$PREFIX_PATH" rm -f bin/*.exe bin/*.dll bin/*.bat } build_package_jython() { build_package_copy { if [ -x "${PREFIX_PATH}/bin/jython" ] && [ ! -x "${PREFIX_PATH}/bin/python" ]; then ( cd "${PREFIX_PATH}/bin" && ln -fs jython python ) fi } >&4 2>&1 fix_jython_shebangs } fix_jython_shebangs() { # Workaround for Jython 2.7+ (#458) for file in "${PREFIX_PATH}/bin"/*; do case "$(head -n1 "${file}")" in "#!"*"/bin/jython" ) sed -i.bak "1 s:.*:#\!${PREFIX_PATH}\/bin\/jython:" "${file}" ;; "#!"*"/bin/python2.7"* ) sed -i.bak "1 s:.*:#\!\/usr\/bin\/env python:" "${file}" ;; esac rm -f "${file}.bak" done } build_package_jython_builder() { ant >&4 2>&1 ( cd "dist" && build_package_jython ) } build_package_pyston2_2() { # currently supported version 2.2 and 2.3 build_package_copy mkdir -p "${PREFIX_PATH}/bin" "${PREFIX_PATH}/lib" local bin shopt -s nullglob for bin in "bin/"*; do if [ -f "${bin}" ] && [ -x "${bin}" ] && [ ! -L "${bin}" ]; then case "${bin##*/}" in "pyston"* ) ( cd "${PREFIX_PATH}/bin" && ln -fs "${bin##*/}" "python" ) ;; esac fi done shopt -u nullglob } build_package_pyston() { # currently supported version 2.3.1v2 and higher build_package_copy } build_package_ironpython() { mkdir -p "${PREFIX_PATH}/bin" cp -fR . "${PREFIX_PATH}/bin" chmod +x "${PREFIX_PATH}/bin/"*.exe ( cd "${PREFIX_PATH}/bin" && ln -fs ipy.exe python ) } build_package_ironpython_builder() { xbuild Build.proj /t:Stage "/p:Mono=true;BaseConfiguration=Release" >&4 2>&1 ( cd "Stage/Release/IronPython-"* && build_package_ironpython ) } build_package_micropython_1_9() { # supported version 1.9.3 and 1.9.4 build_package_micropython "with_axtls" } build_package_micropython() { # supported version 1.10 and higher if [ "${MAKEOPTS+defined}" ]; then MAKE_OPTS="$MAKEOPTS" elif [ -z "${MAKE_OPTS+defined}" ]; then MAKE_OPTS="-j $(num_cpu_cores)" fi { cd mpy-cross "$MAKE" $MAKE_OPTS cd ../ports/unix [ "$1" = "with_axtls" ] && "$MAKE" $MAKE_OPTS axtls "$MAKE" $MAKE_OPTS CFLAGS_EXTRA="-DMICROPY_PY_SYS_PATH_DEFAULT='\".frozen:${PREFIX_PATH}/lib/micropython\"' $CFLAGS_EXTRA" "$MAKE" install $MAKE_INSTALL_OPTS PREFIX="${PREFIX_PATH}" ln -fs micropython "${PREFIX_PATH}/bin/python" mkdir -p "${PREFIX_PATH}/lib/micropython" }>&4 2>&1 } pypy_architecture() { case "$(uname -s)" in "Darwin" ) case "$(uname -m)" in "arm64" ) echo "osarm64" ;; "x86_64" ) echo "osx64" ;; * ) return 1 ;; esac ;; "Linux" ) case "$(uname -m)" in "armel" ) echo "linux-armel" ;; "armhf" | "armv6l" | "armv7l" ) echo "linux-armhf" ;; "i386" | "i486" | "i586" | "i686" | "i786" ) echo "linux" ;; "ppc64" ) echo "linux-ppc64" ;; "ppc64le" ) echo "linux-ppc64le" ;; "x86_64" ) echo "linux64" ;; "aarch64" ) echo "linux-aarch64" ;; * ) return 1 ;; esac ;; "CYGWIN"* | "MINGW"* ) echo "win32" ;; "FreeBSD" ) case "$(uname -m)" in "x86_64" ) echo "freebsd64" ;; * ) return 1 ;; esac ;; * ) return 1 ;; esac } graalpy_architecture() { case "$(uname -s)" in "Darwin" ) case "$(uname -m)" in "x86_64" ) echo "macos-amd64" ;; "arm64" ) echo "macos-aarch64" ;; * ) return 1 ;; esac ;; "Linux" ) case "$(uname -m)" in "x86_64" ) echo "linux-amd64" ;; "aarch64" ) echo "linux-aarch64" ;; * ) return 1 ;; esac ;; esac } pyston_architecture() { pypy_architecture } # Note: not used by graalpy >= 23.3.0 anymore build_package_graalpython() { build_package_copy ln -fs "${PREFIX_PATH}/bin/graalpython" "${PREFIX_PATH}/bin/python" } build_package_pypy() { build_package_copy mkdir -p "${PREFIX_PATH}/bin" "${PREFIX_PATH}/lib" local bin shopt -s nullglob for bin in "bin/"*; do if [ -f "${bin}" ] && [ -x "${bin}" ] && [ ! -L "${bin}" ]; then case "${bin##*/}" in "libpypy"* ) ( cd "${PREFIX_PATH}/lib" && ln -fs "../bin/${bin##*/}" "${bin##*/}" ) ;; "pypy"* ) ( cd "${PREFIX_PATH}/bin" && ln -fs "${bin##*/}" "python" ) ;; esac fi done shopt -u nullglob } build_package_pypy_builder() { if [ -f "rpython/bin/rpython" ]; then # pypy 2.x if [ -z "${PYPY_OPTS}" ]; then local PYPY_OPTS="--opt=jit --batch --make-jobs=$(num_cpu_cores)" fi python "rpython/bin/rpython" ${PYPY_OPTS} "pypy/goal/targetpypystandalone.py" >&4 2>&1 elif [ -f "pypy/translator/goal/translate.py" ]; then # pypy 1.x if [ -z "${PYPY_OPTS}" ]; then local PYPY_OPTS="--opt=jit" fi ( cd "pypy/translator/goal" && python "translate.py" ${PYPY_OPTS} "targetpypystandalone.py" ) 1>&4 2>&1 else echo "not a pypy source tree" 1>&3 return 1 fi { mkdir -p "bin" "lib" local pypy for pypy in "pypy"*; do if [ -f "${pypy}" ] && [ -x "${pypy}" ] && [ ! -L "${pypy}" ]; then mv -f "${pypy}" "bin/${pypy##*/}" fi done local libpypy for libpypy in "libpypy"*; do if [ -f "${libpypy}" ] && [ -x "${libpypy}" ] && [ ! -L "${libpypy}" ]; then mv -f "${libpypy}" "bin/${libpypy##*/}" fi done } >&4 2>&1 build_package_pypy } activepython_architecture() { case "$(uname -s)" in "Darwin" ) echo "macosx10.9-i386-x86_64" ;; "Linux" ) case "$(uname -m)" in "i386" | "i486" | "i586" | "i686" | "i786" ) echo "linux-x86" ;; "x86_64" ) echo "linux-x86_64" ;; * ) return 1 ;; esac ;; * ) return 1 ;; esac } build_package_activepython() { local package_name="$1" { bash "install.sh" --install-dir "${PREFIX_PATH}" } >&4 2>&1 } anaconda_architecture() { case "$(uname -s)" in "Darwin" ) case "$(uname -m)" in "arm64" ) echo "MacOSX-arm64" ;; * ) echo "MacOSX-x86_64" ;; esac ;; "Linux" ) case "$(uname -m)" in "armv7l" ) echo "Linux-armv7l" ;; "aarch64" ) echo "Linux-aarch64" ;; "i386" | "i486" | "i586" | "i686" | "i786" ) echo "Linux-x86" ;; "ppc64le" ) echo "Linux-ppc64le" ;; "x86_64" ) echo "Linux-x86_64" ;; * ) return 1 ;; esac ;; * ) return 1 ;; esac } build_package_anaconda() { local package_name="$1" { bash "${package_name}.sh" -f -b -p "${PREFIX_PATH}" } >&4 2>&1 } build_package_miniconda() { build_package_anaconda "$@" # Workaround to not upgrade conda when installing pip # see https://github.com/pyenv/pyenv/issues/2070 "${PREFIX_PATH}/bin/conda" install --yes "pip" "conda=$(${PREFIX_PATH}/bin/conda --version | cut -d ' ' -f 2)" } build_package_copy() { mkdir -p "$PREFIX_PATH" cp -fR . "$PREFIX_PATH" } before_install_package() { local stub=1 } after_install_package() { local stub=1 } setup_builtin_patches() { local package_name="$1" local package_patch_path="${DEFINITION_PATH%/*}/patches/${DEFINITION_PATH##*/}/${package_name}" # Apply built-in patches if patch was not given from stdin if [[ -n "$HAS_STDIN_PATCH" ]] && package_is_python "${package_name}"; then cat >"${package_name}.patch" HAS_PATCH=true elif [[ -d "${package_patch_path}" ]]; then { find "${package_patch_path}" -maxdepth 1 -type f } 2>/dev/null | sort | xargs cat 1>"${package_name}.patch" HAS_PATCH=true fi } cleanup_builtin_patches() { local package_name="$1" rm -f "${package_name}.patch" unset HAS_PATCH } fix_directory_permissions() { # Ensure installed directories are not world-writable find "$PREFIX_PATH" -type d \( -perm -020 -o -perm -002 \) -exec chmod go-w {} \; } require_java7() { local version="$(java -version 2>&1 | grep '\(java\|openjdk\) version' | head -n1)" if [[ $version != *[789]* ]]; then colorize 1 "ERROR" >&3 echo ": Java 7 required. Please install a 1.7-compatible JRE." >&3 return 1 fi } require_gcc() { local gcc="$(locate_gcc || true)" if [ -z "$gcc" ]; then { echo colorize 1 "ERROR" echo ": This package must be compiled with GCC, but python-build couldn't" echo "find a suitable \`gcc\` executable on your system. Please install GCC" echo "and try again." echo if is_mac; then colorize 1 "DETAILS" echo ": Apple no longer includes the official GCC compiler with Xcode" echo "as of version 4.2. Instead, the \`gcc\` executable is a symlink to" echo "\`llvm-gcc\`, a modified version of GCC which outputs LLVM bytecode." echo echo "For most programs the \`llvm-gcc\` compiler works fine. However," echo "versions of CPython newer than 3.3.0 are incompatible with" echo "\`llvm-gcc\`. To build newer versions of CPython you must have the official" echo "GCC compiler installed on your system." echo colorize 1 "TO FIX THE PROBLEM" if type brew &>/dev/null; then echo ": Install Homebrew's GCC package with this" echo -n "command: " colorize 4 "brew install gcc@4.9" else echo ": Install the official GCC compiler using these" echo -n "packages: " colorize 4 "https://github.com/kennethreitz/osx-gcc-installer/downloads" fi echo echo echo "You will need to install the official GCC compiler to build newer" echo "versions of CPython even if you have installed Apple's Command Line Tools" echo "for Xcode package. The Command Line Tools for Xcode package only" echo "includes \`llvm-gcc\`." fi } >&3 return 1 fi export CC="$gcc" if is_mac -ge 1010; then export MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET:-10.9} fi } locate_gcc() { local gcc gccs IFS=: gccs=($(gccs_in_path)) IFS="$OLDIFS" verify_gcc "$CC" || verify_gcc "$(command -v gcc || true)" || { for gcc in "${gccs[@]}"; do verify_gcc "$gcc" && break || true done } return 1 } gccs_in_path() { local gcc path paths local gccs=() IFS=: paths=($PATH) IFS="$OLDIFS" shopt -s nullglob for path in "${paths[@]}"; do for gcc in "$path"/gcc-*; do gccs["${#gccs[@]}"]="$gcc" done done shopt -u nullglob printf :%s "${gccs[@]}" } verify_gcc() { local gcc="$1" if [ -z "$gcc" ]; then return 1 fi local version="$("$gcc" --version 2>/dev/null || true)" if [ -z "$version" ]; then return 1 fi if echo "$version" | grep LLVM >/dev/null; then return 1 fi echo "$gcc" } require_llvm() { local llvm_version="$1" if is_mac -ge 1010; then if [[ "$PYTHON_CONFIGURE_OPTS" != *--llvm-* ]]; then case "$llvm_version" in 3.2 ) package_option python configure --prebuilt-name="llvm-3.2-x86_64-apple-darwin13.tar.bz2" ;; 3.[56] ) local llvm_config="$(locate_llvm "$llvm_version")" if [ -n "$llvm_config" ]; then package_option python configure --llvm-config="$llvm_config" else local homebrew_package="llvm@$llvm_version" { echo colorize 1 "ERROR" echo ": Rubinius will not be able to compile using Apple's LLVM-based " echo "build tools on OS X. You will need to install LLVM $llvm_version first." echo colorize 1 "TO FIX THE PROBLEM" echo ": Install Homebrew's llvm package with this" echo -n "command: " colorize 4 "brew install $homebrew_package" echo } >&3 return 1 fi ;; esac fi fi } locate_llvm() { local llvm_version="$1" local package llvm_config shopt -s nullglob for package in `brew list 2>/dev/null | grep "^llvm"`; do llvm_config="$(echo "$(brew --prefix "$package")/bin/llvm-config"*)" if [ -n "$llvm_config" ] && [[ "$("$llvm_config" --version)" = "$llvm_version"* ]]; then echo "$llvm_config" break fi done shopt -u nullglob } require_java() { local java="$(command -v java || true)" if [ -z "$java" ]; then { echo colorize 1 "ERROR" echo ": This package must be installed with java, but python-build couldn't" echo "find a suitable \`java\` executable on your system. Please install Java" echo "and try again." echo } >&3 return 1 fi export JAVA="$java" } # Let Jython installer to generate shell script instead of python script even if there's `python2.7` available in `$PATH` (#800) # FIXME: better function naming unrequire_python27() { export PATH="${BUILD_PATH}/bin:${PATH}" mkdir -p "${BUILD_PATH}/bin" if command -v python2.7 1>/dev/null 2>&1; then echo false > "${BUILD_PATH}/bin/python2.7" chmod +x "${BUILD_PATH}/bin/python2.7" fi } require_distro() { for arg; do if [[ "$(cat /etc/issue 2>/dev/null || true)" == "$arg"* ]]; then return 0 fi done { echo colorize 1 "WARNING" echo ": This binary distribution is built for the following distro(s): $@." echo "installed binary may not run expectedly on other platforms." echo } >&2 return 1 } require_osx_version() { function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; } local required_version="$@" local osx_version="$(sw_vers -productVersion)" if [[ $(version $osx_version) -ge $(version $required_version) ]]; then return 0 fi return 1 } configured_with_package_dir() { local package_var_name="$(capitalize "$1")" shift 1 local PACKAGE_CONFIGURE_OPTS="${package_var_name}_CONFIGURE_OPTS" local PACKAGE_CONFIGURE_OPTS_ARRAY="${package_var_name}_MAKE_OPTS_ARRAY[@]" local arg flag for arg in ${CONFIGURE_OPTS} ${!PACKAGE_CONFIGURE_OPTS} "${!PACKAGE_CONFIGURE_OPTS_ARRAY}"; do if [[ "$arg" == "CPPFLAGS="* ]]; then for flag in ${CPPFLAGS} ${arg##CPPFLAGS=}; do if [[ "$flag" == "-I"* ]]; then local header for header in "$@"; do if [ -e "${flag##-I}/${header#/}" ]; then return 0 fi done fi done fi done return 1 } # `python-config` ignores LDFLAGS envvar. Adding to LIBS is the only way to add extra stuff # to `python-config --ldflags` output append_ldflags_libs() { local args="$1" export LDFLAGS="${LDFLAGS:+$LDFLAGS }$args" export LIBS="${LIBS:+${LIBS% } }$args" } prepend_ldflags_libs() { local args="$1" export LDFLAGS="$args${LDFLAGS:+ $LDFLAGS}" export LIBS="$args${LIBS:+ $LIBS}" } use_homebrew() { can_use_homebrew || return 1 # unless Homebrew is at the default /usr/local, need to add its paths to # compiler search to be able to use non-keg-only deps from there if command -v brew &>/dev/null; then local brew_prefix="$(brew --prefix 2>/dev/null || true)" # /usr/local/lib:/usr/lib is the default library search path if [[ -n $brew_prefix && $brew_prefix != "/usr" && $brew_prefix != "/usr/local" ]]; then export CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-I${brew_prefix}/include" append_ldflags_libs "-L${brew_prefix}/lib -Wl,-rpath,${brew_prefix}/lib" fi fi } needs_yaml() { ! configured_with_package_dir "python" "yaml.h" && ! use_homebrew_yaml } use_homebrew_yaml() { can_use_homebrew || return 1 local libdir="$(brew --prefix libyaml 2>/dev/null || true)" if [ -d "$libdir" ]; then echo "python-build: use libyaml from homebrew" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ ${LDFLAGS% }}" else return 1 fi } use_freebsd_pkg() { # check if FreeBSD if [ "FreeBSD" = "$(uname -s)" ]; then # use openssl if installed from Ports Collection if pkg info -e openssl; then package_option python configure --with-openssl="/usr/local" fi # check if 11-R or later release="$(uname -r)" if [ "${release%%.*}" -ge 11 ]; then # Use packages from Ports Collection. # # Unlike Linux, BSD's cc does not look in /usr/local by default # where Ports-installed packages are, but they are available via pkg-config. # Surprisingly, CPython's Configure only uses pkg-config # to locate some of the dependencies and not others. # Here we detect those that are (as of this writing) known # to not be searched via pkg-config. # # XXX: As a side effect, this would pick up any other libs from Ports # that are searched via compiler if pkg info -e readline || pkg info -e sqlite3; then export CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-I/usr/local/include" export LDFLAGS="${LDFLAGS:+$LDFLAGS }-L/usr/local/lib -Wl,-rpath,/usr/local/lib" fi fi fi } has_broken_mac_readline() { # Mac OS X 10.4 has broken readline. # https://github.com/pyenv/pyenv/issues/23 is_mac && ! configured_with_package_dir "python" "readline/rlconf.h" && ! use_homebrew_readline } use_homebrew_readline() { can_use_homebrew || return 1 if ! configured_with_package_dir "python" "readline/rlconf.h"; then local libdir="$(brew --prefix readline 2>/dev/null || true)" if [ -d "$libdir" ]; then echo "python-build: use readline from homebrew" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}" else return 1 fi fi } use_homebrew_ncurses() { can_use_homebrew || return 1 local libdir="$(brew --prefix ncurses 2>/dev/null || true)" if [ -d "$libdir" ]; then echo "python-build: use ncurses from homebrew" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}" else return 1 fi } prefer_openssl11() { # Allow overriding the preference of OpenSSL version per definition basis (#1302, #1325, #1326) PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA="${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:-openssl@1.1 openssl}" export PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA } prefer_openssl3() { # Allow overriding the preference of OpenSSL version per definition basis (#1302, #1325, #1326) PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA="${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:-openssl@3 openssl@1.1 openssl}" export PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA } build_package_mac_readline() { # Install to a subdirectory since we don't want shims for bin/readline. READLINE_PREFIX_PATH="${PREFIX_PATH}/readline" # Tell Python to use this readline for its extension. export CPPFLAGS="-I${READLINE_PREFIX_PATH}/include${CPPFLAGS:+ $CPPFLAGS}" export LDFLAGS="-L${READLINE_PREFIX_PATH}/lib${LDFLAGS:+ $LDFLAGS}" # Make sure pkg-config finds our build first. export PKG_CONFIG_PATH="${READLINE_PREFIX_PATH}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" build_package_standard "$@" } has_broken_mac_openssl() { is_mac || return 1 local openssl_version="$(/usr/bin/openssl version 2>/dev/null || true)" [[ $openssl_version = "OpenSSL 0.9.8"?* || $openssl_version = "LibreSSL"* ]] && ! use_homebrew_openssl } use_homebrew_openssl() { can_use_homebrew || return 1 command -v brew >/dev/null || return 1 for openssl in ${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:-openssl}; do local ssldir="$(brew --prefix "${openssl}" || true)" if [ -d "$ssldir" ]; then echo "python-build: use ${openssl} from homebrew" if [[ -n "${PYTHON_BUILD_CONFIGURE_WITH_OPENSSL:-}" ]]; then # configure script of newer CPython versions support `--with-openssl` # https://bugs.python.org/issue21541 package_option python configure --with-openssl="${ssldir}" else export CPPFLAGS="-I$ssldir/include ${CPPFLAGS:+ $CPPFLAGS}" export LDFLAGS="-L$ssldir/lib${LDFLAGS:+ $LDFLAGS}" fi export PKG_CONFIG_PATH="$ssldir/lib/pkgconfig/:${PKG_CONFIG_PATH}" return fi done return 1 } build_package_mac_openssl() { # Install to a subdirectory since we don't want shims for bin/openssl. OPENSSL_PREFIX_PATH="${PREFIX_PATH}/openssl" # Put openssl.conf, certs, etc in ~/.pyenv/versions/*/openssl/ssl OPENSSLDIR="${OPENSSLDIR:-$OPENSSL_PREFIX_PATH/ssl}" # Tell Python to use this openssl for its extension. if [[ -n "${PYTHON_BUILD_CONFIGURE_WITH_OPENSSL:-}" ]]; then # configure script of newer CPython versions support `--with-openssl` # https://bugs.python.org/issue21541 package_option python configure --with-openssl="${OPENSSL_PREFIX_PATH}" else export CPPFLAGS="-I${OPENSSL_PREFIX_PATH}/include ${CPPFLAGS:+ $CPPFLAGS}" export LDFLAGS="-L${OPENSSL_PREFIX_PATH}/lib${LDFLAGS:+ $LDFLAGS}" fi # Make sure pkg-config finds our build first. export PKG_CONFIG_PATH="${OPENSSL_PREFIX_PATH}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" # Hint OpenSSL that we prefer a 64-bit build. export KERNEL_BITS="64" OPENSSL_CONFIGURE="${OPENSSL_CONFIGURE:-./config}" local nokerberos [[ "$1" != openssl-1.0.* ]] || nokerberos=1 # switches introduced in OpenSSL 3.2 local extra_no_features [[ $(openssl_version $1) -ge 30200 ]] && extra_no_features=1 # Compile a shared lib with zlib dynamically linked. package_option openssl configure --openssldir="$OPENSSLDIR" zlib-dynamic no-ssl3 shared ${nokerberos:+no-ssl2 no-krb5} ${extra_no_features:+no-docs no-apps} no-tests build_package_standard "$@" # Extract root certs from the system keychain in .pem format and rehash. local pem_file="$OPENSSLDIR/cert.pem" security find-certificate -a -p /Library/Keychains/System.keychain > "$pem_file" security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$pem_file" } # openssl-1.0.1k -> 10001 # openssl-3.2.1 -> 30201 openssl_version() { local -a ver IFS=- ver=( ${1:?} ) IFS=. ver=( ${ver[1]} ) [[ ${ver[2]} =~ ^([[:digit:]]+)[[:alpha:]]$ ]] && ver[2]="${BASH_REMATCH[1]}" echo $(( ${ver[0]}*10000 + ${ver[1]}*100 + ${ver[2]} )) } # Post-install check that the openssl extension was built. build_package_verify_openssl() { "$RUBY_BIN" -e ' manager = ARGV[0] packages = { "apt-get" => Hash.new {|h,k| "lib#{k}-dev" }.update( "openssl" => "libssl-dev", "zlib" => "zlib1g-dev" ), "yum" => Hash.new {|h,k| "#{k}-devel" }.update( "yaml" => "libyaml-devel" ) } failed = %w[openssl readline zlib yaml].reject do |lib| begin require lib rescue LoadError $stderr.puts "The Ruby #{lib} extension was not compiled." end end if failed.size > 0 $stderr.puts "ERROR: Ruby install aborted due to missing extensions" $stderr.print "Try running `%s install -y %s` to fetch missing dependencies.\n\n" % [ manager, failed.map { |lib| packages.fetch(manager)[lib] }.join(" ") ] unless manager.empty? $stderr.puts "Configure options used:" require "rbconfig"; require "shellwords" RbConfig::CONFIG.fetch("configure_args").shellsplit.each { |arg| $stderr.puts " #{arg}" } exit 1 end ' "$(basename "$(type -P yum apt-get | head -n1)")" >&4 2>&1 } use_homebrew_zlib() { can_use_homebrew || return 1 local brew_zlib="$(brew --prefix zlib 2>/dev/null || true)" if [ -d "$brew_zlib" ]; then echo "python-build: use zlib from homebrew" export CFLAGS="-I${brew_zlib} ${CFLAGS}" fi } use_xcode_sdk_zlib() { # If a custom compiler is used, including XCode SDK will likely break it [[ "${CC:-clang}" != "clang" || "$(command -v clang 2>/dev/null || true)" != "/usr/bin/clang" ]] && return 1 local xc_sdk_path="$(xcrun --show-sdk-path 2>/dev/null || true)" if [ -d "$xc_sdk_path" ]; then echo "python-build: use zlib from xcode sdk" # Even though SDK's compiler uses the SDK dirs implicitly, # CPython's setup.py has to have nonstandard paths specified explicitly # to search for zlib.h in them export CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-I${xc_sdk_path}/usr/include" if is_mac -ge 1100; then export LDFLAGS="${LDFLAGS:+$LDFLAGS }-L${xc_sdk_path}/usr/lib" fi fi } use_homebrew_tcltk() { can_use_homebrew || return 1 # Since https://github.com/Homebrew/homebrew-core/commit/f10e88617b41555193c22fdcba6109fe82155ee2 (10.11.2024), # tcl-tk is 9.0 which is not compatible with CPython as of this writing # but we'll keep it as backup for cases like non-updated Homebrew local tcltk for tcltk in "tcl-tk@8" "tcl-tk"; do local tcltk_libdir="$(brew --prefix "${tcltk}" 2>/dev/null || true)" if [ -d "$tcltk_libdir" ]; then echo "python-build: use tcl-tk from homebrew" if [[ -z "$PYTHON_BUILD_TCLTK_USE_PKGCONFIG" ]]; then local tcltk_version="$(sh -c '. '"$tcltk_libdir"'/lib/tclConfig.sh; echo $TCL_VERSION')" package_option python configure --with-tcltk-libs="-L$tcltk_libdir/lib -ltcl$tcltk_version -ltk$tcltk_version" # In Homebrew Tcl/Tk 8.6.13, headers have been moved to the 'tcl-tk' subdir. # We're not using tclConfig.sh here 'cuz it produces the version-specific path to /Cellar # and we'd rather have rpath set to /opt/<...> to allow micro release upgrades without rebuilding # XXX: do use tclConfig.sh and translate the paths if more path shenanigans appear in later releases if [ -d "$tcltk_libdir/include/tcl-tk" ]; then package_option python configure --with-tcltk-includes="-I$tcltk_libdir/include/tcl-tk" else package_option python configure --with-tcltk-includes="-I$tcltk_libdir/include" fi fi export PKG_CONFIG_PATH="${tcltk_libdir}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" return 0 fi done return 1 } # FIXME: this function is a workaround for #1125 # once fixed, it should be removed. # if tcltk_ops_flag is in PYTHON_CONFIGURE_OPTS, use user provided tcltk use_custom_tcltk() { local tcltk_ops="$(get_tcltk_flag_from "$PYTHON_CONFIGURE_OPTS")" if [[ -z "$tcltk_ops" ]]; then return 1 fi 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" } # Since 3.12, CPython can add DWARF debug information in MacOS # using Apple's nonstandard way, `dsymutil', that creates a "dSYM bundle" # that's supposed to be installed alongside executables # (https://github.com/python/cpython/issues/95973). use_dsymutil() { if [[ -n "$PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL" ]] && is_mac; then package_option python configure --with-dsymutil fi } use_free_threading() { if [[ -n "$PYTHON_BUILD_FREE_THREADING" ]]; then package_option python configure --disable-gil fi } build_package_enable_shared() { package_option python configure --enable-shared } build_package_auto_tcltk() { if is_mac && [ ! -d /usr/include/X11 ]; then if [ -d /opt/X11/include ]; then if [[ "$CPPFLAGS" != *-I/opt/X11/include* ]]; then export CPPFLAGS="-I/opt/X11/include${CPPFLAGS:+ $CPPFLAGS}" fi else package_option python configure --without-tk fi fi } package_is_python() { case "$1" in Python-* | jython-* | pypy-* | pypy[0-9].+([0-9])-* | stackless-* ) return 0 ;; esac return 1 } apply_patch() { local package_name="$1" local patchfile patchfile="$(mktemp "${TMP}/python-patch.XXXXXX")" cat "${2:--}" >"$patchfile" local striplevel=0 grep -q '^diff --git a/' "$patchfile" && striplevel=1 patch -p$striplevel --force -i "$patchfile" } build_package_symlink_version_suffix() { if [[ "${PYTHON_CONFIGURE_OPTS_ARRAY[*]} $CONFIGURE_OPTS $PYTHON_CONFIGURE_OPTS" == *"--enable-framework"* ]]; then if [ -e "${PREFIX_PATH}/bin" ]; then # Always create `bin` as symlink to framework path if the version was built with `--enable-framework` (#590) rm -rf "${PREFIX_PATH}/bin.orig" mv -f "${PREFIX_PATH}/bin" "${PREFIX_PATH}/bin.orig" fi # Only symlinks are installed in ${PREFIX_PATH}/bin ln -fs "${PREFIX_PATH}/Library/Frameworks/Python.framework/Versions/Current/bin" "${PREFIX_PATH}/bin" fi # Not create symlinks on `altinstall` (#255) if [[ "$PYTHON_MAKE_INSTALL_TARGET" != *"altinstall"* ]]; then shopt -s nullglob local version_bin="$(ls -1 "${PREFIX_PATH}/bin/python"* | grep '[0-9]$' | sort | tail -1)" suffix="$(basename "${version_bin}" | sed -e 's/^python//')" if [ -n "${suffix}" ]; then local file link for file in "${PREFIX_PATH}/bin"/*; do unset link case "${file}" in */"python${suffix}-config" ) # Symlink `pythonX.Y-config` to `python-config` if `python-config` is missing (#296) link="${file%/*}/python-config" ;; */*"-${suffix}" ) link="${file%%-${suffix}}" ;; */*"${suffix}" ) link="${file%%${suffix}}" ;; esac if [ -n "$link" ] && [ ! -e "$link" ]; then ( cd "${file%/*}" && ln -fs "${file##*/}" "${link##*/}" ) fi done fi shopt -u nullglob fi } verify_python() { build_package_symlink_version_suffix if [ ! -x "${PYTHON_BIN}" ]; then { colorize 1 "ERROR" echo ": invalid Python executable: ${PYTHON_BIN}" echo echo "The python-build could not find proper executable of Python after successful build." echo "Please open an issue for future improvements." echo "https://github.com/pyenv/pyenv/issues" return 1 } >&3 fi } try_python_module() { if ! "$PYTHON_BIN" -c "import $1"; then { colorize 1 "WARNING" echo ": The Python $1 extension was not compiled${3:+ $3}. Missing the ${2:-$1}?" return 0 } >&3 fi } verify_python_module() { if ! "$PYTHON_BIN" -c "import $1"; then { colorize 1 "ERROR" echo ": The Python $1 extension was not compiled. Missing the ${2:-$1}?" echo echo "Please consult to the Wiki page to fix the problem." echo "https://github.com/pyenv/pyenv/wiki/Common-build-problems" echo return 1 } >&3 fi } # Post-install check for Python 2.1.x build_package_verify_py21() { verify_python "${2:-python2.1}" try_python_module "readline" "GNU readline lib" verify_python_module "binascii" "binascii" # fixme: zlib doesn't link correctly on 64-bit Linux, due to being in # /usr/x86_64-linux-gnu instead of /usr/lib try_python_module "zlib" "zlib" try_python_module "bz2" "bzip2 lib" } # Post-install check for Python 2.2.x build_package_verify_py22() { verify_python "${2:-python2.2}" try_python_module "readline" "GNU readline lib" verify_python_module "binascii" "binascii" # fixme: zlib doesn't link correctly on 64-bit Linux, due to being in # /usr/x86_64-linux-gnu instead of /usr/lib try_python_module "zlib" "zlib" try_python_module "bz2" "bzip2 lib" } # Post-install check for Python 2.3.x build_package_verify_py23() { verify_python "${2:-python2.3}" try_python_module "readline" "GNU readline lib" verify_python_module "binascii" "binascii" # fixme: zlib doesn't link correctly on 64-bit Linux, due to being in # /usr/x86_64-linux-gnu instead of /usr/lib try_python_module "zlib" "zlib" try_python_module "bz2" "bzip2 lib" } # Post-install check for Python 2.4.x build_package_verify_py24() { verify_python "${2:-2.4}" try_python_module "readline" "GNU readline lib" verify_python_module "zlib" "zlib" try_python_module "bz2" "bzip2 lib" } # Post-install check for Python 2.5.x build_package_verify_py25() { build_package_verify_py24 "$1" "${2:-2.5}" try_python_module "sqlite3" "SQLite3 lib" } # Post-install check for Python 2.6.x build_package_verify_py26() { build_package_verify_py25 "$1" "${2:-2.6}" verify_python_module "ssl" "OpenSSL lib" } # Post-install check for Python 2.7.x build_package_verify_py27() { build_package_verify_py26 "$1" "${2:-2.7}" } # Post-install check for Python 3.0.x build_package_verify_py30() { verify_python "${2:-3.0}" try_python_module "bz2" "bzip2 lib" try_python_module "curses" "ncurses lib" try_python_module "ctypes" "libffi lib" try_python_module "readline" "GNU readline lib" verify_python_module "ssl" "OpenSSL lib" try_python_module "sqlite3" "SQLite3 lib" if [[ -n $DISPLAY ]]; then try_python_module "tkinter" "Tk toolkit" "and GUI subsystem has been detected" fi verify_python_module "zlib" "zlib" } # Post-install check for Python 3.1.x build_package_verify_py31() { build_package_verify_py30 "$1" "${2:-3.1}" } # Post-install check for Python 3.2.x build_package_verify_py32() { build_package_verify_py31 "$1" "${2:-3.2}" } # Post-install check for Python 3.3.x build_package_verify_py33() { build_package_verify_py32 "$1" "${2:-3.3}" try_python_module "lzma" "lzma lib" } # Post-install check for Python 3.4.x build_package_verify_py34() { build_package_verify_py33 "$1" "${2:-3.4}" } # Post-install check for Python 3.5.x build_package_verify_py35() { build_package_verify_py34 "$1" "${2:-3.5}" } # Post-install check for Python 3.6.x build_package_verify_py36() { build_package_verify_py35 "$1" "${2:-3.6}" } # Post-install check for Python 3.7.x build_package_verify_py37() { build_package_verify_py36 "$1" "${2:-3.7}" } # Post-install check for Python 3.8.x build_package_verify_py38() { build_package_verify_py37 "$1" "${2:-3.8}" } # Post-install check for Python 3.9.x build_package_verify_py39() { build_package_verify_py38 "$1" "${2:-3.9}" } # Post-install check for Python 3.10.x build_package_verify_py310() { build_package_verify_py39 "$1" "${2:-3.10}" } # Post-install check for Python 3.11.x build_package_verify_py311() { build_package_verify_py310 "$1" "${2:-3.11}" } # Post-install check for Python 3.12.x build_package_verify_py312() { build_package_verify_py311 "$1" "${2:-3.12}" } # Post-install check for Python 3.13.x build_package_verify_py313() { build_package_verify_py312 "$1" "${2:-3.13}" } # Post-install check for Python 3.14.x build_package_verify_py314() { build_package_verify_py313 "$1" "${2:-3.13}" } # Post-install check for Python 3.x rolling release scripts # XXX: Will need splitting into project-specific ones if there emerge # multiple rolling-release scripts with different checks needed build_package_verify_py3_latest() { build_package_verify_py311 "$1" "3" } # Copy Tools/gdb/libpython.py to pythonX.Y-gdb.py (#1190) build_package_copy_python_gdb() { if [ -e "$BUILD_PATH/$1/Tools/gdb/libpython.py" ]; then local version_re='-([0-9]\.[0-9]+)' [[ "$1" =~ $version_re ]] local python_bin="$PREFIX_PATH/bin/python${BASH_REMATCH[1]}" cp "$BUILD_PATH/$1/Tools/gdb/libpython.py" "$python_bin-gdb.py" fi } build_package_ez_setup() { local ez_setup="ez_setup.py" rm -f "${ez_setup}" { if [ "${EZ_SETUP+defined}" ] && [ -f "${EZ_SETUP}" ]; then echo "Installing setuptools from ${EZ_SETUP}..." 1>&2 cat "${EZ_SETUP}" else [ -n "${EZ_SETUP_URL}" ] echo "Installing setuptools from ${EZ_SETUP_URL}..." 1>&2 http get "${EZ_SETUP_URL}" fi } 1> "${ez_setup}" "${PYTHON_BIN}" "${ez_setup}" ${EZ_SETUP_OPTS} 1>&4 2>&1 || { echo "error: failed to install setuptools via ez_setup.py" >&2 return 1 } build_package_symlink_version_suffix } build_package_get_pip() { local get_pip="get-pip.py" rm -f "${get_pip}" { if [ "${GET_PIP+defined}" ] && [ -f "${GET_PIP}" ]; then echo "Installing pip from ${GET_PIP}..." 1>&2 cat "${GET_PIP}" else [ -n "${GET_PIP_URL}" ] echo "Installing pip from ${GET_PIP_URL}..." 1>&2 http get "${GET_PIP_URL}" fi } 1> "${get_pip}" "${PYTHON_BIN}" -s "${get_pip}" ${GET_PIP_OPTS} 1>&4 2>&1 || { echo "error: failed to install pip via get-pip.py" >&2 return 1 } build_package_symlink_version_suffix } # Pip <21 (in 2.7 and derivatives like PyPy-2.7) doesn't support -I build_package_ensurepip_lt21() { build_package_ensurepip lt21 } build_package_ensurepip() { local mode="$1" local ensurepip_opts # Install as `--altinstall` if the Python is installed as `altinstall` (#255) if [[ "$PYTHON_MAKE_INSTALL_TARGET" == *"altinstall"* ]]; then ensurepip_opts="--altinstall" fi local python_opts="-I" if [[ $mode == "lt21" ]]; then python_opts="-s"; fi # FIXME: `--altinstall` with `get-pip.py` "$PYTHON_BIN" $python_opts -m ensurepip ${ensurepip_opts} 1>/dev/null 2>&1 || build_package_get_pip "$@" || return 1 build_package_symlink_version_suffix } version() { local git_revision # Read the revision from git if the remote points to "python-build" repository if GIT_DIR="$PYTHON_BUILD_INSTALL_PREFIX/../../.git" git remote -v 2>/dev/null | grep -q /pyenv; then git_revision="$(GIT_DIR="$PYTHON_BUILD_INSTALL_PREFIX/../../.git" git describe --tags HEAD 2>/dev/null || true)" git_revision="${git_revision#v}" fi echo "python-build ${git_revision:-$PYTHON_BUILD_VERSION}" } usage() { sed -ne '/^#/!q;s/.\{1,2\}//;1,2d;p' < "$0" [ -z "$1" ] || exit "$1" } list_definitions() { { for DEFINITION_DIR in "${PYTHON_BUILD_DEFINITIONS[@]}"; do [ -d "$DEFINITION_DIR" ] && ls "$DEFINITION_DIR" | grep -xv patches done } | sort_versions | uniq } sort_versions() { sed 'h; s/[+-]/./g; s/.p\([[:digit:]]\)/.z.\1/; s/$/.z/; G; s/\n/ /' | \ LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | awk '{print $2}' } unset VERBOSE unset KEEP_BUILD_PATH unset HAS_PATCH unset DEBUG unset IPV4 unset IPV6 PYTHON_BUILD_INSTALL_PREFIX="$(abs_dirname "$0")/.." IFS=: PYTHON_BUILD_DEFINITIONS=($PYTHON_BUILD_DEFINITIONS ${PYTHON_BUILD_ROOT:-$PYTHON_BUILD_INSTALL_PREFIX}/share/python-build) IFS="$OLDIFS" parse_options "$@" for option in "${OPTIONS[@]}"; do case "$option" in "h" | "help" ) version echo usage 0 ;; "definitions" ) list_definitions exit 0 ;; "k" | "keep" ) KEEP_BUILD_PATH=true ;; "v" | "verbose" ) VERBOSE=true ;; "p" | "patch" ) HAS_STDIN_PATCH=true ;; "g" | "debug" ) DEBUG=true # Disable optimization (#808) PYTHON_CFLAGS="-O0 ${PYTHON_CFLAGS}" ;; "4" | "ipv4") IPV4=true ;; "6" | "ipv6") IPV6=true ;; "version" ) version exit 0 ;; esac done [ "${#ARGUMENTS[@]}" -eq 2 ] || usage 1 >&2 DEFINITION_PATH="${ARGUMENTS[0]}" if [ -z "$DEFINITION_PATH" ]; then usage 1 >&2 elif [ ! -f "$DEFINITION_PATH" ]; then for DEFINITION_DIR in "${PYTHON_BUILD_DEFINITIONS[@]}"; do if [ -f "${DEFINITION_DIR}/${DEFINITION_PATH}" ]; then DEFINITION_PATH="${DEFINITION_DIR}/${DEFINITION_PATH}" break fi done if [ ! -f "$DEFINITION_PATH" ]; then echo "python-build: definition not found: ${DEFINITION_PATH}" >&2 exit 2 fi fi PREFIX_PATH="${ARGUMENTS[1]}" if [ -z "$PREFIX_PATH" ]; then usage 1 >&2 elif [ "${PREFIX_PATH#/}" = "$PREFIX_PATH" ]; then PREFIX_PATH="${PWD}/${PREFIX_PATH}" fi if [ -z "$TMPDIR" ]; then TMP="/tmp" else TMP="${TMPDIR%/}" fi # Check if TMPDIR is accessible and can hold executables. tmp_executable="${TMP}/python-build-test.$$" noexec="" if mkdir -p "$TMP" && touch "$tmp_executable" 2>/dev/null; then cat > "$tmp_executable" <<-EOF #!${BASH} exit 0 EOF chmod +x "$tmp_executable" else echo "python-build: TMPDIR=$TMP is set to a non-accessible location" >&2 exit 1 fi "$tmp_executable" 2>/dev/null || noexec=1 rm -f "$tmp_executable" if [ -n "$noexec" ]; then echo "python-build: TMPDIR=$TMP cannot hold executables (partition possibly mounted with \`noexec\`)" >&2 exit 1 fi if [ -z "$MAKE" ]; then if [ "FreeBSD" = "$(uname -s)" ]; then if [ "$(echo $1 | sed 's/-.*$//')" = "jruby" ]; then export MAKE="gmake" else if [ "$(uname -r | sed 's/[^[:digit:]].*//')" -lt 10 ]; then export MAKE="gmake" else export MAKE="make" fi fi else export MAKE="make" fi fi if [ -n "$PYTHON_BUILD_CACHE_PATH" ] && [ -d "$PYTHON_BUILD_CACHE_PATH" ]; then PYTHON_BUILD_CACHE_PATH="${PYTHON_BUILD_CACHE_PATH%/}" else unset PYTHON_BUILD_CACHE_PATH fi if [ -z "$PYTHON_BUILD_MIRROR_URL" ]; then PYTHON_BUILD_MIRROR_URL="https://pyenv.github.io/pythons" PYTHON_BUILD_DEFAULT_MIRROR=1 else PYTHON_BUILD_MIRROR_URL="${PYTHON_BUILD_MIRROR_URL%/}" PYTHON_BUILD_DEFAULT_MIRROR= fi if [ -n "$PYTHON_BUILD_SKIP_MIRROR" ]; then unset PYTHON_BUILD_MIRROR_URL fi if ! has_checksum_support compute_sha2 && ! [ -n "$PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM" ] ; then unset PYTHON_BUILD_MIRROR_URL fi ARIA2_OPTS="${PYTHON_BUILD_ARIA2_OPTS} ${IPV4+--disable-ipv6=true} ${IPV6+--disable-ipv6=false}" CURL_OPTS="${PYTHON_BUILD_CURL_OPTS} ${IPV4+--ipv4} ${IPV6+--ipv6}" WGET_OPTS="${PYTHON_BUILD_WGET_OPTS} ${IPV4+--inet4-only} ${IPV6+--inet6-only}" # Add an option to build a debug version of Python (#11) if [ -n "$DEBUG" ]; then package_option python configure --with-pydebug fi if [[ "$CONFIGURE_OPTS $PYTHON_CONFIGURE_OPTS" != *"--enable-framework"* && "$CONFIGURE_OPTS $PYTHON_CONFIGURE_OPTS" != *"--disable-shared"* ]]; then package_option python configure --enable-shared fi # python-build: Specify `--libdir` on configure to fix build on openSUSE (#36) package_option python configure --libdir="${PREFIX_PATH}/lib" # python-build: Set `RPATH` if `--enable-shared` was given (#65, #66, #82) if [[ "$CONFIGURE_OPTS $PYTHON_CONFIGURE_OPTS ${PYTHON_CONFIGURE_OPTS_ARRAY[@]}" == *"--enable-shared"* ]]; then # The ld on Darwin embeds the full paths to each dylib by default if [[ "$LDFLAGS" != *"-rpath="* ]] ; then prepend_ldflags_libs "-Wl,-rpath,${PREFIX_PATH}/lib" fi fi # python-build: Set `RPATH` if --shared` was given for PyPy (#244) if [[ "$PYPY_OPTS" == *"--shared"* ]]; then prepend_ldflags_libs "-Wl,-rpath=${PREFIX_PATH}/lib" fi # Add support for framework installation (`--enable-framework`) of CPython (#55, #99) if [[ "$CONFIGURE_OPTS $PYTHON_CONFIGURE_OPTS" == *"--enable-framework"* ]]; then if ! is_mac; then echo "python-build: framework installation is not supported outside of MacOS." >&2 exit 1 fi create_framework_dirs() { local version="$(echo "$1" | sed -E 's/^[^0-9]*([0-9]+\.[0-9]+).*$/\1/')" mkdir -p "${PREFIX_PATH}/Library/Frameworks/Python.framework/Versions/${version}" ( cd "${PREFIX_PATH}/Library/Frameworks/Python.framework/Versions" && ln -fs "${version}" "Current") local path for path in include lib share; do mkdir -p "${PREFIX_PATH}/Library/Frameworks/Python.framework/Versions/Current/${path}" ln -fs "${PREFIX_PATH}/Library/Frameworks/Python.framework/Versions/Current/${path}" "${PREFIX_PATH}/${path}" done } create_framework_dirs "${DEFINITION_PATH##*/}" # the `/Library/Frameworks` suffix makes CPython build install apps under prefix rather than into /Applications (#1003) package_option python configure --enable-framework="${PREFIX_PATH}/Library/Frameworks" #FIXME: doesn't properly handle paths with spaces. Fix by parsing *OPTS into arrays. CONFIGURE_OPTS="${CONFIGURE_OPTS//--enable-framework?(=*([^ ]))?( )/}"; CONFIGURE_OPTS="${CONFIGURE_OPTS% }" PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS//--enable-framework?(=*([^ ]))?( )/}"; PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS% }" fi # Build against universal SDK if [[ "$CONFIGURE_OPTS $PYTHON_CONFIGURE_OPTS" == *"--enable-universalsdk"* ]]; then if ! is_mac; then echo "python-build: universal installation is not supported outside of MacOS." >&2 exit 1 fi package_option python configure --enable-universalsdk=/ #FIXME: doesn't properly handle paths with spaces. Fix by parsing *OPTS into arrays. CONFIGURE_OPTS="${CONFIGURE_OPTS//--enable-universalsdk?(=*([^ ]))?( )/}" CONFIGURE_OPTS="${CONFIGURE_OPTS% }" PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS//--enable-universalsdk?(=*([^ ]))?( )/}" PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS% }" if [[ "$CONFIGURE_OPTS $PYTHON_CONFIGURE_OPTS" != *"--with-universal-archs"* ]]; then # in CPython's configure.ac, --with-universal-archs defaults to 'intel' which means i386 + x86_64 # since 2.7.5 and 3.3.0 -- i.e. in all non-EOL versions # Apple Silicon cannot build these, in it, it rather makes sense to default to Universal2 binaries if [[ $(arch) == "arm64" ]]; then package_option python configure --with-universal-archs=universal2 fi fi fi # Compile with `--enable-unicode=ucs4` by default (#257) if [[ "$PYTHON_CONFIGURE_OPTS" != *"--enable-unicode="* ]]; then if ! is_mac; then # Skip specifying `--enable-unicode` for CPython 3.3+ (#912) case "${DEFINITION_PATH##*/}" in "2."* | \ "3.0" | "3.0."* | "3.0-"* | \ "3.1" | "3.1."* | "3.1-"* | \ "3.2" | "3.2."* | "3.2-"* ) package_option python configure --enable-unicode=ucs4 ;; esac fi fi # Unset `PIP_REQUIRE_VENV` during build (#216) unset PIP_REQUIRE_VENV unset PIP_REQUIRE_VIRTUALENV # pydistutils.cfg may corrupt install location of Python libraries (#35, #111) if [ -e "$HOME/.pydistutils.cfg" ]; then { colorize 1 "WARNING" echo ": Please make sure you remove any previous custom paths from your $HOME/.pydistutils.cfg file." } >&2 fi # Download specified version of ez_setup.py/get-pip.py (#202) if [ -z "${EZ_SETUP_URL}" ]; then if [ -n "${SETUPTOOLS_VERSION}" ]; then EZ_SETUP_URL="https://bitbucket.org/pypa/setuptools/raw/${SETUPTOOLS_VERSION}/ez_setup.py" unset SETUPTOOLS_VERSION else EZ_SETUP_URL="https://bootstrap.pypa.io/ez_setup.py" fi fi if [ -z "${GET_PIP_URL}" ]; then if [ -n "${PIP_VERSION}" ]; then { colorize 1 "WARNING" echo ": Setting PIP_VERSION=${PIP_VERSION} is no longer supported and may cause failures during the install process." } 1>&2 GET_PIP_URL="https://raw.githubusercontent.com/pypa/pip/${PIP_VERSION}/contrib/get-pip.py" # Unset `PIP_VERSION` from environment before invoking `get-pip.py` to deal with "ValueError: invalid truth value" (pypa/pip#4528) unset PIP_VERSION else # Use custom get-pip URL based on the target version (#1127) case "${DEFINITION_PATH##*/}" in 2.6 | 2.6.* ) GET_PIP_URL="https://bootstrap.pypa.io/pip/2.6/get-pip.py" ;; 2.7 | 2.7.* | pypy2.7 | pypy2.7-* ) GET_PIP_URL="https://bootstrap.pypa.io/pip/2.7/get-pip.py" ;; 3.2 | 3.2.* ) GET_PIP_URL="https://bootstrap.pypa.io/pip/3.2/get-pip.py" ;; 3.3 | 3.3.* ) GET_PIP_URL="https://bootstrap.pypa.io/pip/3.3/get-pip.py" ;; 3.4 | 3.4.* ) GET_PIP_URL="https://bootstrap.pypa.io/pip/3.4/get-pip.py" ;; 3.5 | 3.5.* | pypy3.5 | pypy3.5-* ) GET_PIP_URL="https://bootstrap.pypa.io/pip/3.5/get-pip.py" ;; 3.6 | 3.6.* | pypy3.6 | pypy3.6-* ) GET_PIP_URL="https://bootstrap.pypa.io/pip/3.6/get-pip.py" ;; * ) GET_PIP_URL="https://bootstrap.pypa.io/get-pip.py" ;; esac fi fi # Set MACOSX_DEPLOYMENT_TARGET from the product version of OS X (#219, #220) if is_mac; then if [ -z "${MACOSX_DEPLOYMENT_TARGET}" ]; then MACOS_VERSION="$(sw_vers -productVersion 2>/dev/null || true)" MACOS_VERSION_ARRAY=(${MACOS_VERSION//\./ }) if [ "${#MACOS_VERSION_ARRAY[@]}" -ge 2 ]; then export MACOSX_DEPLOYMENT_TARGET="${MACOS_VERSION_ARRAY[0]}.${MACOS_VERSION_ARRAY[1]}" fi fi fi python_bin_suffix() { local version_name version_info case "$1" in 2.* | 3.* ) version_name="$1" version_name="${version_name%-dev}" version_name="${version_name%-rc*}" version_name="${version_name%rc*}" version_name="${version_name%%*([^0-9])}" version_info=(${version_name//./ }) echo "${version_info[0]}.${version_info[1]}" ;; stackless-2.* | stackless-3.* ) version_name="${1#stackless-}" version_name="${version_name%-dev}" version_name="${version_name%-rc*}" version_name="${version_name%rc*}" version_info=(${version_name//./ }) echo "${version_info[0]}.${version_info[1]}" ;; esac } SEED="$(date "+%Y%m%d%H%M%S").$$" LOG_PATH="${TMP}/python-build.${SEED}.log" PYTHON_BIN="${PREFIX_PATH}/bin/python$(python_bin_suffix "${DEFINITION_PATH##*/}")" CWD="$(pwd)" if [ -z "$PYTHON_BUILD_BUILD_PATH" ]; then BUILD_PATH="${TMP}/python-build.${SEED}" else BUILD_PATH="$PYTHON_BUILD_BUILD_PATH" fi exec 4<> "$LOG_PATH" # open the log file at fd 4 if [ -n "$VERBOSE" ]; then tail -f "$LOG_PATH" & TAIL_PID=$! trap "kill $TAIL_PID" SIGINT SIGTERM EXIT fi prepend_ldflags_libs "-L${PREFIX_PATH}/lib" export CPPFLAGS="-I${PREFIX_PATH}/include${CPPFLAGS:+ $CPPFLAGS}" unset PYTHONHOME unset PYTHONPATH trap build_failed ERR mkdir -p "$BUILD_PATH" source "$DEFINITION_PATH" [ -z "${KEEP_BUILD_PATH}" ] && rm -fr "$BUILD_PATH" trap - ERR pyenv-2.5.4/plugins/python-build/install.sh000077500000000000000000000007301476513315000207740ustar00rootroot00000000000000#!/bin/sh # Usage: PREFIX=/usr/local ./install.sh # # Installs python-build under $PREFIX. set -e cd "$(dirname "$0")" if [ -z "${PREFIX}" ]; then PREFIX="/usr/local" fi BIN_PATH="${PREFIX}/bin" SHARE_PATH="${PREFIX}/share/python-build" mkdir -p "$BIN_PATH" "$SHARE_PATH" install -p bin/* "$BIN_PATH" for share in share/python-build/*; do if [ -d "$share" ]; then cp -RPp "$share" "$SHARE_PATH" else install -p -m 0644 "$share" "$SHARE_PATH" fi done pyenv-2.5.4/plugins/python-build/scripts/000077500000000000000000000000001476513315000204565ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/scripts/README.md000066400000000000000000000015461476513315000217430ustar00rootroot00000000000000# Scripts for updating python-build Install dependencies with `pip install -r requirements.txt`. ## add_miniconda.py ```_add_miniconda usage: add_miniconda.py [-h] [-d] [-v] Script to add non-"latest" miniconda releases. Written for python 3.7. Checks the miniconda download archives for new versions, then writes a build script for any which do not exist locally, saving it to plugins/python- build/share/python-build. Ignores releases below 4.3.30. Also ignores sub- patch releases if that major.minor.patch already exists, but otherwise, takes the latest sub-patch release for given OS/arch. Assumes all miniconda3 releases < 4.7 default to python 3.6, and anything else 3.7. optional arguments: -h, --help show this help message and exit -d, --dry-run Do not write scripts, just report them to stdout -v, --verbose Increase verbosity of logging ``` pyenv-2.5.4/plugins/python-build/scripts/add_miniconda.py000077500000000000000000000311301476513315000236020ustar00rootroot00000000000000#!/usr/bin/env python3 """Script to add non-"latest" miniconda releases. Written for python 3.7. Checks the miniconda download archives for new versions, then writes a build script for any which do not exist locally, saving it to plugins/python-build/share/python-build. Ignores releases below 4.3.30. Also ignores sub-patch releases if that major.minor.patch already exists, but otherwise, takes the latest sub-patch release for given OS/arch. Assumes all miniconda3 releases < 4.7 default to python 3.6, and anything else 3.7. """ import logging import re import string import sys import textwrap from argparse import ArgumentParser from collections import defaultdict from dataclasses import dataclass from enum import Enum from functools import total_ordering from pathlib import Path from typing import NamedTuple, List, Optional, DefaultDict, Dict import requests_html logger = logging.getLogger(__name__) CONDA_REPO = "https://repo.anaconda.com" MINICONDA_REPO = CONDA_REPO + "/miniconda" ANACONDA_REPO = CONDA_REPO + "/archive" install_script_fmt = """ case "$(anaconda_architecture 2>/dev/null || true)" in {install_lines} * ) {{ echo colorize 1 "ERROR" echo ": The binary distribution of {tflavor} is not available for $(anaconda_architecture 2>/dev/null || true)." echo }} >&2 exit 1 ;; esac """.lstrip() install_line_fmt = """ "{os}-{arch}" ) install_script "{tflavor}{suffix}-{version_py_version}{version_str}-{os}-{arch}" "{repo}/{tflavor}{suffix}-{version_py_version}{version_str}-{os}-{arch}.sh#{md5}" "{flavor}" verify_{py_version} ;; """.strip() here = Path(__file__).resolve() out_dir: Path = here.parent.parent / "share" / "python-build" class StrEnum(str, Enum): """Enum subclass whose members are also instances of str and directly comparable to strings. str type is forced at declaration. Adapted from https://github.com/kissgyorgy/enum34-custom/blob/dbc89596761c970398701d26c6a5bbcfcf70f548/enum_custom.py#L100 (MIT license) """ def __new__(cls, *args): for arg in args: if not isinstance(arg, str): raise TypeError("Not text %s:" % arg) return super(StrEnum, cls).__new__(cls, *args) def __str__(self): return str(self.value) class SupportedOS(StrEnum): LINUX = "Linux" MACOSX = "MacOSX" class SupportedArch(StrEnum): AARCH64 = "aarch64" ARM64 = "arm64" PPC64LE = "ppc64le" S390X = "s390x" X86_64 = "x86_64" X86 = "x86" class Flavor(StrEnum): ANACONDA = "anaconda" MINICONDA = "miniconda" class TFlavor(StrEnum): ANACONDA = "Anaconda" MINICONDA = "Miniconda" class Suffix(StrEnum): TWO = "2" THREE = "3" NONE = "" PyVersion = None class PyVersionMeta(type): def __getattr__(self, name): """Generate PyVersion.PYXXX on demand to future-proof it""" if PyVersion is not None: return PyVersion(name.lower()) return super(PyVersionMeta,self).__getattr__(self, name) @dataclass(frozen=True) class PyVersion(metaclass=PyVersionMeta): major: str minor: str def __init__(self, value): (major, minor) = re.match(r"py(\d)(\d+)", value).groups() object.__setattr__(self, "major", major) object.__setattr__(self, "minor", minor) @property def value(self): return f"py{self.major}{self.minor}" def version(self): return f"{self.major}.{self.minor}" def version_info(self): return (self.major, self.minor) def __str__(self): return self.value @total_ordering class VersionStr(str): def info(self): return tuple(int(n) for n in self.replace("-", ".").split(".")) def __eq__(self, other): return str(self) == str(other) def __lt__(self, other): if isinstance(other, VersionStr): return self.info() < other.info() raise ValueError("VersionStr can only be compared to other VersionStr") @classmethod def from_info(cls, version_info): return VersionStr(".".join(str(n) for n in version_info)) def __hash__(self): return hash(str(self)) class CondaVersion(NamedTuple): flavor: Flavor suffix: Suffix version_str: VersionStr py_version: Optional[PyVersion] @classmethod def from_str(cls, s): """ Convert a string of the form "miniconda_n-ver" or "miniconda_n-py_ver-ver" to a :class:`CondaVersion` object. """ miniconda_n, _, remainder = s.partition("-") suffix = miniconda_n[-1] if suffix in string.digits: flavor = miniconda_n[:-1] else: flavor = miniconda_n suffix = "" components = remainder.split("-") if flavor == Flavor.MINICONDA and len(components) >= 2: py_ver, *ver_parts = components py_ver = PyVersion(f"py{py_ver.replace('.', '')}") ver = "-".join(ver_parts) else: ver = "-".join(components) py_ver = None return CondaVersion(Flavor(flavor), Suffix(suffix), VersionStr(ver), py_ver) def to_filename(self): if self.py_version: return f"{self.flavor}{self.suffix}-{self.py_version.version()}-{self.version_str}" else: return f"{self.flavor}{self.suffix}-{self.version_str}" def default_py_version(self): """ :class:`PyVersion` of Python used with this Miniconda version """ if self.py_version: return self.py_version elif self.suffix == Suffix.TWO: return PyVersion.PY27 v = self.version_str.info() if self.flavor == "miniconda": # https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html if v < (4, 7): return PyVersion.PY36 if v < (4, 8): return PyVersion.PY37 else: # since 4.8, Miniconda specifies versions explicitly in the file name raise ValueError("Miniconda 4.8+ is supposed to specify a Python version explicitly") if self.flavor == "anaconda": # https://docs.anaconda.com/free/anaconda/reference/release-notes/ if v >= (2024,6): return PyVersion.PY312 if v >= (2023,7): return PyVersion.PY311 if v >= (2023,3): return PyVersion.PY310 if v >= (2021,11): return PyVersion.PY39 if v >= (2020,7): return PyVersion.PY38 if v >= (2020,2): return PyVersion.PY37 if v >= (5,3,0): return PyVersion.PY37 return PyVersion.PY36 raise ValueError(self.flavor) class CondaSpec(NamedTuple): tflavor: TFlavor version: CondaVersion os: SupportedOS arch: SupportedArch md5: str repo: str py_version: Optional[PyVersion] = None @classmethod def from_filestem(cls, stem, md5, repo, py_version=None): # The `*vers` captures the new trailing `-1` in some file names (a build number?) # so they can be processed properly. miniconda_n, *vers, os, arch = stem.split("-") ver = "-".join(vers) suffix = miniconda_n[-1] if suffix in string.digits: tflavor = miniconda_n[:-1] else: tflavor = miniconda_n suffix = "" flavor = tflavor.lower() if ver.startswith("py"): py_ver, ver = ver.split("_", maxsplit=1) py_ver = PyVersion(py_ver) else: py_ver = None spec = CondaSpec( TFlavor(tflavor), CondaVersion(Flavor(flavor), Suffix(suffix), VersionStr(ver), py_ver), SupportedOS(os), SupportedArch(arch), md5, repo, py_ver ) if py_version is None and py_ver is None and ver != "latest": spec = spec.with_py_version(spec.version.default_py_version()) return spec def to_install_lines(self): """ Installation command for this version of Miniconda for use in a Pyenv installation script """ return install_line_fmt.format( tflavor=self.tflavor, flavor=self.version.flavor, repo=self.repo, suffix=self.version.suffix, version_str=self.version.version_str, version_py_version=f"{self.version.py_version}_" if self.version.py_version else "", os=self.os, arch=self.arch, md5=self.md5, py_version=self.py_version, ) def with_py_version(self, py_version: PyVersion): return CondaSpec(*self[:-1], py_version=py_version) def make_script(specs: List[CondaSpec]): install_lines = [s.to_install_lines() for s in specs] return install_script_fmt.format( install_lines="\n".join(install_lines), tflavor=specs[0].tflavor, ) def get_existing_condas(name): """ Enumerate existing Miniconda installation scripts in share/python-build/ except rolling releases. :returns: A generator of :class:`CondaVersion` objects. """ logger.info("Getting known %(name)s versions",locals()) for p in out_dir.iterdir(): entry_name = p.name if not p.is_file() or not entry_name.startswith(name): continue try: v = CondaVersion.from_str(entry_name) if v.version_str != "latest": logger.debug("Found existing %(name)s version %(v)s", locals()) yield v except ValueError as e: logger.error("Unable to parse existing version %s: %s", entry_name, e) def get_available_condas(name, repo): """ Fetch remote miniconda versions. :returns: A generator of :class:`CondaSpec` objects for each release available for download except rolling releases. """ logger.info("Fetching remote %(name)s versions",locals()) session = requests_html.HTMLSession() response = session.get(repo) page: requests_html.HTML = response.html table = page.find("table", first=True) rows = table.find("tr")[1:] for row in rows: f, size, date, md5 = row.find("td") fname = f.text md5 = md5.text if not fname.endswith(".sh"): continue stem = fname[:-3] try: s = CondaSpec.from_filestem(stem, md5, repo) if s.version.version_str != "latest": logger.debug("Found remote %(name)s version %(s)s", locals()) yield s except ValueError: pass def key_fn(spec: CondaSpec): return ( spec.tflavor, spec.version.version_str.info(), spec.version.suffix.value, spec.os.value, spec.arch.value, ) if __name__ == "__main__": parser = ArgumentParser(description=__doc__) parser.add_argument( "-d", "--dry-run", action="store_true", help="Do not write scripts, just report them to stdout", ) parser.add_argument( "-v", "--verbose", action="store_true", default=0, help="Increase verbosity of logging", ) parsed = parser.parse_args() logging.basicConfig(level=logging.DEBUG if parsed.verbose else logging.INFO) existing_versions = set() available_specs = set() for name,repo in ("miniconda",MINICONDA_REPO),("anaconda",ANACONDA_REPO): existing_versions |= set(get_existing_condas(name)) available_specs |= set(get_available_condas(name, repo)) # version triple to triple-ified spec to raw spec to_add: DefaultDict[ CondaVersion, Dict[CondaSpec, CondaSpec] ] = defaultdict(dict) logger.info("Checking for new versions") for s in sorted(available_specs, key=key_fn): key = s.version vv = key.version_str.info() reason = None if key in existing_versions: reason = "already exists" elif key.version_str.info() <= (4, 3, 30): reason = "too old" elif len(key.version_str.info()) >= 4 and "-" not in key.version_str: reason = "ignoring hotfix releases" if reason: logger.debug("Ignoring version %(s)s (%(reason)s)", locals()) continue to_add[key][s] = s logger.info("Writing %s scripts", len(to_add)) for ver, d in to_add.items(): specs = list(d.values()) fpath = out_dir / ver.to_filename() script_str = make_script(specs) logger.info("Writing script for %s", ver) if parsed.dry_run: print(f"Would write spec to {fpath}:\n" + textwrap.indent(script_str, " ")) else: with open(fpath, "w") as f: f.write(script_str) pyenv-2.5.4/plugins/python-build/scripts/add_miniforge.py000077500000000000000000000121351476513315000236240ustar00rootroot00000000000000#!/usr/bin/env python3 'Adds the latest miniforge and mambaforge releases.' from pathlib import Path import logging import os import string import requests logger = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get('LOGLEVEL', 'INFO')) MINIFORGE_REPO = 'conda-forge/miniforge' DISTRIBUTIONS = ['miniforge', 'mambaforge'] SKIPPED_RELEASES = [ '4.13.0-0', #has no Mambaforge. We already generated scripts for Miniforge '22.11.1-0', #MacOS packages are broken (have broken dep tarballs, downloading them fails with 403) '22.11.1-1', #MacOS packages are broken (have broken dep tarballs, downloading them fails with 403) '22.11.1-2', #MacOS packages are broken (have broken dep tarballs, downloading them fails with 403) ] install_script_fmt = """ case "$(anaconda_architecture 2>/dev/null || true)" in {install_lines} * ) {{ echo colorize 1 "ERROR" echo ": The binary distribution of {flavor} is not available for $(anaconda_architecture 2>/dev/null || true)." echo }} >&2 exit 1 ;; esac """.lstrip() install_line_fmt = """ "{os}-{arch}" ) install_script "{filename}" "{url}#{sha}" "miniconda" verify_py{py_version} ;; """.strip() here = Path(__file__).resolve() out_dir: Path = here.parent.parent / "share" / "python-build" def download_sha(url): logger.info('Downloading SHA file %(url)s', locals()) tup = tuple(reversed(requests.get(url).text.replace('./', '').rstrip().split())) logger.debug('Got %(tup)s', locals()) return tup def create_spec(filename, sha, url): flavor_with_suffix, version, subversion, os, arch = filename.replace('.sh', '').split('-') suffix = flavor_with_suffix[-1] if suffix in string.digits: flavor = flavor_with_suffix[:-1] else: flavor = flavor_with_suffix spec = { 'filename': filename, 'sha': sha, 'url': url, 'py_version': py_version(version), 'flavor': flavor, 'os': os, 'arch': arch, 'installer_filename': f'{flavor_with_suffix.lower()}-{version}-{subversion}', } logger.debug('Created spec %(spec)s', locals()) return spec def py_version(release): """Suffix for `verify_pyXXX` to call in the generated build script""" release_line = tuple(int(part) for part in release.split(".")[:2]) # current version: mentioned under https://github.com/conda-forge/miniforge?tab=readme-ov-file#miniforge3 # transition points: # https://github.com/conda-forge/miniforge/blame/main/Miniforge3/construct.yaml # look for "- python " in non-pypy branch and which tag the commit is first in if release_line >= (24,5): # yes, they jumped from 3.10 directly to 3.12 # https://github.com/conda-forge/miniforge/commit/bddad0baf22b37cfe079e47fd1680fdfb2183590 return "312" if release_line >= (4,14): return "310" raise ValueError("Bundled Python version unknown for release `%s'"%release) def supported(filename): return ('pypy' not in filename) and ('Windows' not in filename) def add_version(release): tag_name = release['tag_name'] download_urls = { f['name']: f['browser_download_url'] for f in release['assets'] } # can assume that sha files are named similar to release files so can also check supported(on their names) shas = dict([download_sha(url) for (name, url) in download_urls.items() if name.endswith('.sha256') and supported(os.path.basename(name)) and tag_name in name]) specs = [create_spec(filename, sha, download_urls[filename]) for (filename, sha) in shas.items() if supported(filename)] for distribution in DISTRIBUTIONS: distribution_specs = [spec for spec in specs if distribution in spec['flavor'].lower()] count = len(distribution_specs) if count > 0: output_file = out_dir / distribution_specs[0]['installer_filename'] logger.info('Writing %(count)d specs for %(distribution)s to %(output_file)s', locals()) script_str = install_script_fmt.format( install_lines="\n".join([install_line_fmt.format_map(s) for s in distribution_specs]), flavor=distribution_specs[0]['flavor'], ) with open(output_file, 'w') as f: f.write(script_str) else: logger.info('Did not find specs for %(distribution)s', locals()) for release in requests.get(f'https://api.github.com/repos/{MINIFORGE_REPO}/releases').json(): version = release['tag_name'] logger.info('Looking for %(version)s in %(out_dir)s', locals()) # This release has no mambaforge artifacts which causes the next check to always trigger. # Build scripts for miniforge3-4.13.0-0 have already been generated. # Assuming this was a fluke, we don't yet need to implement proactively checking all releases for contents # or ignoring a release if _any_ of the flavors is already present in Pyenv. if version in SKIPPED_RELEASES: continue if any(not list(out_dir.glob(f'{distribution}*-{version}')) for distribution in DISTRIBUTIONS): logger.info('Downloading %(version)s', locals()) add_version(release) pyenv-2.5.4/plugins/python-build/scripts/requirements.txt000066400000000000000000000000161476513315000237370ustar00rootroot00000000000000requests-html pyenv-2.5.4/plugins/python-build/share/000077500000000000000000000000001476513315000200715ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/000077500000000000000000000000001476513315000225075ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/2.1.3000066400000000000000000000013341476513315000230740ustar00rootroot00000000000000require_gcc install_package "readline-6.2" "https://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381" mac_readline --if has_broken_mac_readline install_package "Python-2.1.3" "https://www.python.org/ftp/python/2.1.3/Python-2.1.3.tgz#1bcb5bb587948bc38f36db60e15c376009c56c66570e563a08a82bf7f227afb9" standard verify_py21 #install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python #install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.2.3000066400000000000000000000013341476513315000230750ustar00rootroot00000000000000require_gcc install_package "readline-6.2" "https://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381" mac_readline --if has_broken_mac_readline install_package "Python-2.2.3" "https://www.python.org/ftp/python/2.2.3/Python-2.2.3.tgz#a8f92e6b89d47359fff0d1fbfe47f104afc77fd1cd5143e7332758b7bc100188" standard verify_py22 #install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python #install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.3.7000066400000000000000000000013341476513315000231020ustar00rootroot00000000000000require_gcc install_package "readline-6.2" "https://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381" mac_readline --if has_broken_mac_readline install_package "Python-2.3.7" "https://www.python.org/ftp/python/2.3.7/Python-2.3.7.tgz#969a9891dce9f50b13e54f9890acaf2be66715a5895bf9b11111f320c205b90e" standard verify_py23 #install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python #install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.4.0000066400000000000000000000013241476513315000230730ustar00rootroot00000000000000require_gcc 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.4" "https://www.python.org/ftp/python/2.4/Python-2.4.tgz#ff746de0fae8691c082414b42a2bb172da8797e6e8ff66c9a39d2e452f7034e9" standard verify_py24 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.4.1000066400000000000000000000013321476513315000230730ustar00rootroot00000000000000require_gcc 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.4.1" "https://www.python.org/ftp/python/2.4.1/Python-2.4.1.tgz#f449c3b167389324c525ad99d02376c518ac11e163dbbbc13bc88a5c7101fd00" standard verify_py24 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.4.2000066400000000000000000000013321476513315000230740ustar00rootroot00000000000000require_gcc 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.4.2" "https://www.python.org/ftp/python/2.4.2/Python-2.4.2.tgz#2653e1846e87fd9b3ee287fefc965c80c54646548b4913a22265b0dd54493adf" standard verify_py24 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.4.3000066400000000000000000000013321476513315000230750ustar00rootroot00000000000000require_gcc 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.4.3" "https://www.python.org/ftp/python/2.4.3/Python-2.4.3.tgz#985a413932f5e31e6280b37da6b285a3a0b2748c6786643989ed9b23de97e2d5" standard verify_py24 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.4.4000066400000000000000000000013321476513315000230760ustar00rootroot00000000000000require_gcc 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.4.4" "https://www.python.org/ftp/python/2.4.4/Python-2.4.4.tgz#92be6e20cbc3111d9dd0c016d72ef7914c23b879dc52df7ba28df97afbf12e2e" standard verify_py24 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.4.5000066400000000000000000000013321476513315000230770ustar00rootroot00000000000000require_gcc 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.4.5" "https://www.python.org/ftp/python/2.4.5/Python-2.4.5.tgz#6ae6f67a388a7f70ed3a20eebab5aae995ee433089d1f1724095c62f4b7389a1" standard verify_py24 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.4.6000066400000000000000000000013321476513315000231000ustar00rootroot00000000000000require_gcc 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.4.6" "https://www.python.org/ftp/python/2.4.6/Python-2.4.6.tgz#b03f269e826927f05c966cf4f4414f3c93ee2314960859e7f8375e24e82f8b02" standard verify_py24 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python pyenv-2.5.4/plugins/python-build/share/python-build/2.5.0000066400000000000000000000013141476513315000230730ustar00rootroot00000000000000install_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.5" "https://www.python.org/ftp/python/2.5/Python-2.5.tgz#d7bbf42e36003c6065cd19f3e67d283521858515ee923220f654131cebe1d8f2" standard verify_py25 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python pyenv-2.5.4/plugins/python-build/share/python-build/2.5.1000066400000000000000000000013221476513315000230730ustar00rootroot00000000000000install_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.5.1" "https://www.python.org/ftp/python/2.5.1/Python-2.5.1.tgz#1f5caee846049ca30d996f9403eefdb996295c4af664867e35dcc5eb36e4e7e8" standard verify_py25 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python pyenv-2.5.4/plugins/python-build/share/python-build/2.5.2000066400000000000000000000013221476513315000230740ustar00rootroot00000000000000install_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.5.2" "https://www.python.org/ftp/python/2.5.2/Python-2.5.2.tgz#834afe8a88adaf623b05ac5dd6700dd5bb5d0d5553fc74ad529359a3496e4ae3" standard verify_py25 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python pyenv-2.5.4/plugins/python-build/share/python-build/2.5.3000066400000000000000000000013221476513315000230750ustar00rootroot00000000000000install_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.5.3" "https://www.python.org/ftp/python/2.5.3/Python-2.5.3.tgz#c3fee607d20a77dfb72ea2e627eb4d95d25c735603435abde62c57015a0445bd" standard verify_py25 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python pyenv-2.5.4/plugins/python-build/share/python-build/2.5.4000066400000000000000000000013221476513315000230760ustar00rootroot00000000000000install_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.5.4" "https://www.python.org/ftp/python/2.5.4/Python-2.5.4.tgz#3d3b205611ee503a38a9433d5645a571668420bb219242c7f51af85f05664da6" standard verify_py25 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python pyenv-2.5.4/plugins/python-build/share/python-build/2.5.5000066400000000000000000000013221476513315000230770ustar00rootroot00000000000000install_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.5.5" "https://www.python.org/ftp/python/2.5.5/Python-2.5.5.tgz#03be1019c4fe93daeb53ba9e4294bf22a8ed4cb854cbd57e24e16f6bf63e2392" standard verify_py25 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python pyenv-2.5.4/plugins/python-build/share/python-build/2.5.6000066400000000000000000000013221476513315000231000ustar00rootroot00000000000000install_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.5.6" "https://www.python.org/ftp/python/2.5.6/Python-2.5.6.tgz#c2e4377597241b1065677d23327c04d0f41945d370c61a491cc88be367234c5d" standard verify_py25 install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python pyenv-2.5.4/plugins/python-build/share/python-build/2.6.0000066400000000000000000000011021476513315000230670ustar00rootroot00000000000000install_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 pyenv-2.5.4/plugins/python-build/share/python-build/2.6.1000066400000000000000000000011101476513315000230670ustar00rootroot00000000000000install_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 pyenv-2.5.4/plugins/python-build/share/python-build/2.6.2000066400000000000000000000011101476513315000230700ustar00rootroot00000000000000install_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 pyenv-2.5.4/plugins/python-build/share/python-build/2.6.3000066400000000000000000000011101476513315000230710ustar00rootroot00000000000000install_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 pyenv-2.5.4/plugins/python-build/share/python-build/2.6.4000066400000000000000000000011101476513315000230720ustar00rootroot00000000000000install_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 pyenv-2.5.4/plugins/python-build/share/python-build/2.6.5000066400000000000000000000011101476513315000230730ustar00rootroot00000000000000install_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 pyenv-2.5.4/plugins/python-build/share/python-build/2.6.6000066400000000000000000000011101476513315000230740ustar00rootroot00000000000000install_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.6" "https://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz#372f66db46d773214e4619df1794a26449158f626138d4d2141a64c2f017fae1" standard verify_py26 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.6.7000066400000000000000000000011101476513315000230750ustar00rootroot00000000000000install_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.7" "https://www.python.org/ftp/python/2.6.7/Python-2.6.7.tgz#a8093eace4cfd3e06b05f0deb5d765e3c6cec65908048640a8cadd7a948b3826" standard verify_py26 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.6.8000066400000000000000000000011101476513315000230760ustar00rootroot00000000000000install_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.8" "https://www.python.org/ftp/python/2.6.8/Python-2.6.8.tgz#5bf02a75ffa2fcaa5a3cabb8201998519b045541975622316888ea468d9512f7" standard verify_py26 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.6.9000066400000000000000000000011101476513315000230770ustar00rootroot00000000000000install_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.9" "https://www.python.org/ftp/python/2.6.9/Python-2.6.9.tgz#7277b1285d8a82f374ef6ebaac85b003266f7939b3f2a24a3af52f9523ac94db" standard verify_py26 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7-dev000066400000000000000000000010251476513315000235120ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-2.7-dev" "https://github.com/python/cpython" "2.7" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.0000066400000000000000000000011221476513315000230720ustar00rootroot00000000000000install_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.7" "https://www.python.org/ftp/python/2.7/Python-2.7.tgz#5670dd6c0c93b0b529781d070852f7b51ce6855615b16afcd318341af2910fb5" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.1000066400000000000000000000011301476513315000230720ustar00rootroot00000000000000install_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.7.1" "https://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz#ca13e7b1860821494f70de017202283ad73b1fb7bd88586401c54ef958226ec8" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.10000066400000000000000000000015231476513315000231600ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-2.7.10" "https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz#1cd3730781b91caf0fa1c4d472dc29274186480161a150294c42ce9b5c5effc0" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.10" "https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz#eda8ce6eec03e74991abb5384170e7c65fcd7522e409b8e83d7e6372add0f12a" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.11000066400000000000000000000015231476513315000231610ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-2.7.11" "https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xz#962b4c45af50124ea61f11a30deb4342fc0bc21126790fa1d7f6c79809413f46" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.11" "https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz#82929b96fd6afc8da838b149107078c02fa1744b7e60999a8babbc0d3fa86fc6" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.12000066400000000000000000000015231476513315000231620ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-2.7.12" "https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz#d7837121dd5652a05fef807c361909d255d173280c4e1a4ded94d73d80a1f978" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.12" "https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz#3cb522d17463dfa69a155ab18cffa399b358c966c0363d6c8b5b3bf1384da4b6" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.13000066400000000000000000000015231476513315000231630ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-2.7.13" "https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz#35d543986882f78261f97787fd3e06274bfa6df29fac9b4a94f73930ff98f731" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.13" "https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz#a4f05a0720ce0fd92626f0278b6b433eee9a6173ddf2bced7957dfb599a5ece1" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.14000066400000000000000000000015441476513315000231670ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-2.7.14" "https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz#71ffb26e09e78650e424929b2b457b9c912ac216576e6bd9e7d204ed03296a66" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.14" "https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz#304c9b202ea6fbd0a4a8e0ad3733715fbd4749f2204a9173a58ec53c32ea73e8" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.15000066400000000000000000000015441476513315000231700ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-2.7.15" "https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tar.xz#22d9b1ac5b26135ad2b8c2901a9413537e08749a753356ee913c84dbd2df5574" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.15" "https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz#18617d1f15a380a919d517630a9cd85ce17ea602f9bbdc58ddc672df4b0239db" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.16000066400000000000000000000015231476513315000231660ustar00rootroot00000000000000install_package "openssl-1.0.2q" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2q.tar.gz#5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-2.7.16" "https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz#f222ef602647eecb6853681156d32de4450a2c39f4de93bd5b20235f2e660ed7" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.16" "https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tgz#01da813a3600876f03f46db11cc5c408175e99f03af2ba942ef324389a83bad5" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.17000066400000000000000000000015231476513315000231670ustar00rootroot00000000000000install_package "openssl-1.0.2q" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2q.tar.gz#5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-2.7.17" "https://www.python.org/ftp/python/2.7.17/Python-2.7.17.tar.xz#4d43f033cdbd0aa7b7023c81b0e986fd11e653b5248dac9144d508f11812ba41" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.17" "https://www.python.org/ftp/python/2.7.17/Python-2.7.17.tgz#f22059d09cdf9625e0a7284d24a13062044f5bf59d93a7f3382190dfa94cecde" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.18000066400000000000000000000015411476513315000231700ustar00rootroot00000000000000export PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA="openssl@1.1 openssl@1.0 openssl" install_package "openssl-1.1.1v" "https://www.openssl.org/source/openssl-1.1.1v.tar.gz" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-2.7.18" "https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz#b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43" standard verify_py27 copy_python_gdb ensurepip_lt21 else install_package "Python-2.7.18" "https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz#da3080e3b488f648a3d7a4560ddee895284c3380b11d6de75edb986526b9a814" standard verify_py27 copy_python_gdb ensurepip_lt21 fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.2000066400000000000000000000011301476513315000230730ustar00rootroot00000000000000install_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.7.2" "https://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz#1d54b7096c17902c3f40ffce7e5b84e0072d0144024184fff184a84d563abbb3" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.3000066400000000000000000000011301476513315000230740ustar00rootroot00000000000000install_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.7.3" "https://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz#d4c20f2b5faf95999fd5fecb3f7d32071b0820516224a6d2b72932ab47a1cb8e" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.4000066400000000000000000000011301476513315000230750ustar00rootroot00000000000000install_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.7.4" "https://www.python.org/ftp/python/2.7.4/Python-2.7.4.tgz#98c5eb9c8e65effcc0122112ba17a0bce880aa23ecb560af56b55eb55632b81a" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.5000066400000000000000000000011301476513315000230760ustar00rootroot00000000000000install_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.7.5" "https://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz#8e1b5fa87b91835afb376a9c0d319d41feca07ffebc0288d97ab08d64f48afbf" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.6000066400000000000000000000011301476513315000230770ustar00rootroot00000000000000install_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.7.6" "https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz#99c6860b70977befa1590029fae092ddb18db1d69ae67e8b9385b66ed104ba58" standard verify_py27 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/2.7.7000066400000000000000000000015151476513315000231070ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-2.7.7" "https://www.python.org/ftp/python/2.7.7/Python-2.7.7.tar.xz#2983e3cd089b30c50e2b2234f07c2ac4fb8a5df230ab8f2e1133a1d8b208da78" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.7" "https://www.python.org/ftp/python/2.7.7/Python-2.7.7.tgz#7f49c0a6705ad89d925181e27d0aaa025ee4731ce0de64776c722216c3e66c42" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.8000066400000000000000000000015151476513315000231100ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-2.7.8" "https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz#edde10a0cb7d14e2735e682882d5b287028d1485c456758154c19573db68075a" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.8" "https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz#74d70b914da4487aa1d97222b29e9554d042f825f26cb2b93abd20fdda56b557" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/2.7.9000066400000000000000000000015151476513315000231110ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-2.7.9" "https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz#90d27e14ea7e03570026850e2e50ba71ad20b7eb31035aada1cf3def8f8d4916" standard verify_py27 copy_python_gdb ensurepip else install_package "Python-2.7.9" "https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz#c8bba33e66ac3201dabdc556f0ea7cfe6ac11946ec32d357c4c6f9b018c12c5b" standard verify_py27 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.0.1000066400000000000000000000023141476513315000230710ustar00rootroot00000000000000install_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-3.0.1" "https://www.python.org/ftp/python/3.0.1/Python-3.0.1.tgz#7d5f2feae9035f1d3d9e6bb7f092dbf374d6bb4b25abd0d2d11f13bba1cb04de" standard verify_py30 if [[ "Darwin" == "$(uname -s)" ]]; then # https://github.com/pyenv/pyenv/issues/456 { echo colorize 1 "WARNING" echo ": pyenv cannot install setuptools-1.4.2 to CPython 3.0.1 on OS X." echo "setuptools and pip will not be available until you install them manually." } >&2 else install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python fi pyenv-2.5.4/plugins/python-build/share/python-build/3.1.0000066400000000000000000000016311476513315000230720ustar00rootroot00000000000000install_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-3.1" "https://www.python.org/ftp/python/3.1/Python-3.1.tgz#99a034cf574ea3c26412b0a0728126d7fd6ea9593d099d807a25d216ed031e6a" standard verify_py31 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python pyenv-2.5.4/plugins/python-build/share/python-build/3.1.1000066400000000000000000000016371476513315000231010ustar00rootroot00000000000000install_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-3.1.1" "https://www.python.org/ftp/python/3.1.1/Python-3.1.1.tgz#5d85d7bff11c4db44920af99f64f4227c816f897f6bfa9dd8a2611165ca5f0a1" standard verify_py31 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python pyenv-2.5.4/plugins/python-build/share/python-build/3.1.2000066400000000000000000000016371476513315000231020ustar00rootroot00000000000000install_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-3.1.2" "https://www.python.org/ftp/python/3.1.2/Python-3.1.2.tgz#dffbc0561a161a4a576c6059e6990a9859a0be16ba9b5736eabe4abbb2700d1c" standard verify_py31 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python pyenv-2.5.4/plugins/python-build/share/python-build/3.1.3000066400000000000000000000016371476513315000231030ustar00rootroot00000000000000install_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-3.1.3" "https://www.python.org/ftp/python/3.1.3/Python-3.1.3.tgz#6311823aeda8be6a7a2b67caaeff48abce6626c9940ba7ed81f9c978666a36bd" standard verify_py31 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python pyenv-2.5.4/plugins/python-build/share/python-build/3.1.4000066400000000000000000000016371476513315000231040ustar00rootroot00000000000000install_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-3.1.4" "https://www.python.org/ftp/python/3.1.4/Python-3.1.4.tgz#fadc05ea6d05360cff189944a85ecd2180bbc308784d168b350450e70bbdd846" standard verify_py31 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python pyenv-2.5.4/plugins/python-build/share/python-build/3.1.5000066400000000000000000000016371476513315000231050ustar00rootroot00000000000000install_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-3.1.5" "https://www.python.org/ftp/python/3.1.5/Python-3.1.5.tgz#d12dae6d06f52ef6bf1271db4d5b4d14b5dd39813e324314e72b648ef1bc0103" standard verify_py31 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python pyenv-2.5.4/plugins/python-build/share/python-build/3.10-dev000066400000000000000000000010711476513315000235660ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.10-dev" "https://github.com/python/cpython" 3.10 standard verify_py310 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.10.0000066400000000000000000000016151476513315000231540ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.10.0" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tar.xz#5a99f8e7a6a11a7b98b4e75e0d1303d3832cada5534068f69c7b6222a7b1b002" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.0" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz#c4e0cbad57c90690cb813fb4663ef670b4d0f587d8171e2c42bd4c9245bd2758" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.1000066400000000000000000000016151476513315000231550ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.10.1" "https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tar.xz#a7f1265b6e1a5de1ec5c3ec7019ab53413469934758311e9d240c46e5ae6e177" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.1" "https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tgz#b76117670e7c5064344b9c138e141a377e686b9063f3a8a620ff674fa8ec90d3" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.10000066400000000000000000000016231476513315000232340ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.10" "https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tar.xz#0419e9085bf51b7a672009b3f50dbf1859acdf18ba725d0ec19aa5c8503f0ea3" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.10" "https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tgz#fba64559dde21ebdc953e4565e731573bb61159de8e4d4cedee70fb1196f610d" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.11000066400000000000000000000016231476513315000232350ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.11" "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz#3c3bc3048303721c904a03eb8326b631e921f11cc3be2988456a42f115daf04c" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.11" "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz#f3db31b668efa983508bd67b5712898aa4247899a346f2eb745734699ccd3859" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.12000066400000000000000000000016231476513315000232360ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.12" "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz#afb74bf19130e7a47d10312c8f5e784f24e0527981eab68e20546cfb865830b8" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.12" "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz#a43cd383f3999a6f4a7db2062b2fc9594fefa73e175b3aedafa295a51a7bb65c" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.13000066400000000000000000000016231476513315000232370ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.13" "https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tar.xz#5c88848668640d3e152b35b4536ef1c23b2ca4bd2c957ef1ecbb053f571dd3f6" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.13" "https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz#698ec55234c1363bd813b460ed53b0f108877c7a133d48bde9a50a1eb57b7e65" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.14000066400000000000000000000016231476513315000232400ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.14" "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tar.xz#9c50481faa8c2832329ba0fc8868d0a606a680fc4f60ec48d26ce8e076751fda" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.14" "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz#cefea32d3be89c02436711c95a45c7f8e880105514b78680c14fe76f5709a0f6" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.15000066400000000000000000000016231476513315000232410ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.15" "https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tar.xz#aab0950817735172601879872d937c1e4928a57c409ae02369ec3d91dccebe79" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.15" "https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz#a27864e5ba2a4474f8f6c58ab92ff52767ac8b66f1646923355a53fe3ef15074" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.16000066400000000000000000000016231476513315000232420ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.16" "https://www.python.org/ftp/python/3.10.16/Python-3.10.16.tar.xz#bfb249609990220491a1b92850a07135ed0831e41738cf681d63cf01b2a8fbd1" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.16" "https://www.python.org/ftp/python/3.10.16/Python-3.10.16.tgz#f2e22ed965a93cfeb642378ed6e6cdbc127682664b24123679f3d013fafe9cd0" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.2000066400000000000000000000016151476513315000231560ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.10.2" "https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz#17de3ac7da9f2519aa9d64378c603a73a0e9ad58dffa8812e45160c086de64c7" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.2" "https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgz#3c0ede893011319f9b0a56b44953a3d52c7abf9657c23fb4bc9ced93b86e9c97" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.3000066400000000000000000000016151476513315000231570ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.10.3" "https://www.python.org/ftp/python/3.10.3/Python-3.10.3.tar.xz#596c72de998dc39205bc4f70ef0dbf7edec740a306d09b49a9bd0a77806730dc" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.3" "https://www.python.org/ftp/python/3.10.3/Python-3.10.3.tgz#5a3b029bad70ba2a019ebff08a65060a8b9b542ffc1a83c697f1449ecca9813b" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.4000066400000000000000000000016151476513315000231600ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.10.4" "https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tar.xz#80bf925f571da436b35210886cf79f6eb5fa5d6c571316b73568343451f77a19" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.4" "https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz#f3bcc65b1d5f1dc78675c746c98fcee823c038168fc629c5935b044d0911ad28" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.5000066400000000000000000000016151476513315000231610ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.5" "https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tar.xz#8437efd5b106ef0a75aabfbf23d880625120a73a86a22ade4d2e2e68d7b74486" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.5" "https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz#18f57182a2de3b0be76dfc39fdcfd28156bb6dd23e5f08696f7492e9e3d0bf2d" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.6000066400000000000000000000016151476513315000231620ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.6" "https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz#f795ff87d11d4b0c7c33bc8851b0c28648d8a4583aa2100a98c22b4326b6d3f3" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.6" "https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz#848cb06a5caa85da5c45bd7a9221bb821e33fc2bdcba088c127c58fad44e6343" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.7000066400000000000000000000016151476513315000231630ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.7" "https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tar.xz#6eed8415b7516fb2f260906db5d48dd4c06acc0cb24a7d6cc15296a604dcdc48" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.7" "https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tgz#1b2e4e2df697c52d36731666979e648beeda5941d0f95740aafbf4163e5cc126" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.8000066400000000000000000000016151476513315000231640ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.8" "https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tar.xz#6a30ecde59c47048013eb5a658c9b5dec277203d2793667f578df7671f7f03f3" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.8" "https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tgz#f400c3fb394b8bef1292f6dc1292c5fadc3533039a5bc0c3e885f3e16738029a" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.10.9000066400000000000000000000016151476513315000231650ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" 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.10.9" "https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tar.xz#5ae03e308260164baba39921fdb4dbf8e6d03d8235a939d4582b33f0b5e46a83" standard verify_py310 copy_python_gdb ensurepip else install_package "Python-3.10.9" "https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tgz#4ccd7e46c8898f4c7862910a1703aa0e63525913a519abb2f55e26220a914d88" standard verify_py310 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11-dev000066400000000000000000000011431476513315000235670ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.11-dev" "https://github.com/python/cpython" 3.11 standard verify_py311 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.11.0000066400000000000000000000016671476513315000231640ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.0" "https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz#a57dc82d77358617ba65b9841cee1e3b441f386c3789ddc0676eca077f2951c3" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.0" "https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz#64424e96e2457abbac899b90f9530985b51eef2905951febd935f0e73414caeb" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.1000066400000000000000000000016671476513315000231650ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.1" "https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz#85879192f2cffd56cb16c092905949ebf3e5e394b7f764723529637901dfb58f" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.1" "https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tgz#baed518e26b337d4d8105679caf68c5c32630d702614fc174e98cb95c46bdfa4" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.10000066400000000000000000000016761476513315000232450ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-3.2.2" "https://openssl.org/source/old/3.2/openssl-3.2.2.tar.gz#197149c18d9e9f292c43f0400acaba12e5f52cacfe050f3d199277ea738ec2e7" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.10" "https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tar.xz#07a4356e912900e61a15cb0949a06c4a05012e213ecd6b4e84d0f67aabbee372" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.10" "https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz#92f2faf242681bfa406d53a51e17d42c5373affe23a130cd9697e132ef574706" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.11000066400000000000000000000016761476513315000232460ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-3.2.2" "https://openssl.org/source/old/3.2/openssl-3.2.2.tar.gz#197149c18d9e9f292c43f0400acaba12e5f52cacfe050f3d199277ea738ec2e7" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.11" "https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tar.xz#2a9920c7a0cd236de33644ed980a13cbbc21058bfdc528febb6081575ed73be3" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.11" "https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tgz#883bddee3c92fcb91cf9c09c5343196953cbb9ced826213545849693970868ed" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.2000066400000000000000000000016671476513315000231660ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.2" "https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tar.xz#29e4b8f5f1658542a8c13e2dd277358c9c48f2b2f7318652ef1675e402b9d2af" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.2" "https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tgz#2411c74bda5bbcfcddaf4531f66d1adc73f247f529aee981b029513aefdbf849" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.3000066400000000000000000000016671476513315000231670ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.3" "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz#8a5db99c961a7ecf27c75956189c9602c968751f11dbeae2b900dbff1c085b5e" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.3" "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz#1a79f3df32265d9e6625f1a0b31c28eb1594df911403d11f3320ee1da1b3e048" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.4000066400000000000000000000016671476513315000231700ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz#2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz#85c37a265e5c9dd9f75b35f954e31fbfc10383162417285e30ad25cc073a0d63" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.5000066400000000000000000000016641476513315000231660ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-3.2.0" "https://www.openssl.org/source/openssl-3.2.0.tar.gz#14c826f07c7e433706fb5c69fa9e25dab95684844b4c962a2cf1bf183eb4690e" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.5" "https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tar.xz#85cd12e9cf1d6d5a45f17f7afe1cebe7ee628d3282281c492e86adf636defa3f" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.5" "https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz#a12a0a013a30b846c786c010f2c19dd36b7298d888f7c4bd1581d90ce18b5e58" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.6000066400000000000000000000016641476513315000231670ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-3.2.0" "https://www.openssl.org/source/openssl-3.2.0.tar.gz#14c826f07c7e433706fb5c69fa9e25dab95684844b4c962a2cf1bf183eb4690e" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.6" "https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tar.xz#0fab78fa7f133f4f38210c6260d90d7c0d5c7198446419ce057ec7ac2e6f5f38" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.6" "https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tgz#c049bf317e877cbf9fce8c3af902436774ecef5249a29d10984ca3a37f7f4736" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.7000066400000000000000000000016641476513315000231700ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-3.2.0" "https://www.openssl.org/source/openssl-3.2.0.tar.gz#14c826f07c7e433706fb5c69fa9e25dab95684844b4c962a2cf1bf183eb4690e" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.7" "https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tar.xz#18e1aa7e66ff3a58423d59ed22815a6954e53342122c45df20c96877c062b9b7" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.7" "https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tgz#068c05f82262e57641bd93458dfa883128858f5f4997aad7a36fd25b13b29209" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.8000066400000000000000000000016641476513315000231710ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-3.2.1" "https://www.openssl.org/source/openssl-3.2.1.tar.gz#83c7329fe52c850677d75e5d0b0ca245309b97e8ecbcfdc1dfdc4ab9fac35b39" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.8" "https://www.python.org/ftp/python/3.11.8/Python-3.11.8.tar.xz#9e06008c8901924395bc1da303eac567a729ae012baa182ab39269f650383bb3" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.8" "https://www.python.org/ftp/python/3.11.8/Python-3.11.8.tgz#d3019a613b9e8761d260d9ebe3bd4df63976de30464e5c0189566e1ae3f61889" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.11.9000066400000000000000000000016641476513315000231720ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 install_package "openssl-3.2.1" "https://www.openssl.org/source/openssl-3.2.1.tar.gz#83c7329fe52c850677d75e5d0b0ca245309b97e8ecbcfdc1dfdc4ab9fac35b39" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.11.9" "https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz#9b1e896523fc510691126c864406d9360a3d1e986acbda59cda57b5abda45b87" standard verify_py311 copy_python_gdb ensurepip else install_package "Python-3.11.9" "https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz#e7de3240a8bc2b1e1ba5c81bf943f06861ff494b69fda990ce2722a504c6153d" standard verify_py311 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12-dev000066400000000000000000000012161476513315000235710ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 export PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL=1 install_package "openssl-3.1.2" "https://www.openssl.org/source/openssl-3.1.2.tar.gz#a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.12-dev" "https://github.com/python/cpython" 3.12 standard verify_py312 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.12.0000066400000000000000000000016121476513315000231530ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.1.2" "https://www.openssl.org/source/openssl-3.1.2.tar.gz#a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.0" "https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz#795c34f44df45a0e9b9710c8c71c15c671871524cd412ca14def212e8ccb155d" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.0" "https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz#51412956d24a1ef7c97f1cb5f70e185c13e3de1f50d131c0aac6338080687afb" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.1000066400000000000000000000016121476513315000231540ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.1.2" "https://www.openssl.org/source/openssl-3.1.2.tar.gz#a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.1" "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.xz#8dfb8f426fcd226657f9e2bd5f1e96e53264965176fa17d32658e873591aeb21" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.1" "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz#d01ec6a33bc10009b09c17da95cc2759af5a580a7316b3a446eb4190e13f97b2" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.2000066400000000000000000000016121476513315000231550ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.2.1" "https://www.openssl.org/source/openssl-3.2.1.tar.gz#83c7329fe52c850677d75e5d0b0ca245309b97e8ecbcfdc1dfdc4ab9fac35b39" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.2" "https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz#be28112dac813d2053545c14bf13a16401a21877f1a69eb6ea5d84c4a0f3d870" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.2" "https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tgz#a7c4f6a9dc423d8c328003254ab0c9338b83037bd787d680826a5bf84308116e" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.3000066400000000000000000000016121476513315000231560ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.2.1" "https://www.openssl.org/source/openssl-3.2.1.tar.gz#83c7329fe52c850677d75e5d0b0ca245309b97e8ecbcfdc1dfdc4ab9fac35b39" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.3" "https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tar.xz#56bfef1fdfc1221ce6720e43a661e3eb41785dd914ce99698d8c7896af4bdaa1" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.3" "https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz#a6b9459f45a6ebbbc1af44f5762623fa355a0c87208ed417628b379d762dddb0" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.4000066400000000000000000000016121476513315000231570ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.2.2" "https://www.openssl.org/source/openssl-3.2.2.tar.gz#197149c18d9e9f292c43f0400acaba12e5f52cacfe050f3d199277ea738ec2e7" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.4" "https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tar.xz#f6d419a6d8743ab26700801b4908d26d97e8b986e14f95de31b32de2b0e79554" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.4" "https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tgz#01b3c1c082196f3b33168d344a9c85fb07bfe0e7ecfe77fee4443420d1ce2ad9" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.5000066400000000000000000000016121476513315000231600ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.3.1" "https://www.openssl.org/source/openssl-3.3.1.tar.gz#777cd596284c883375a2a7a11bf5d2786fc5413255efab20c50d6ffe6d020b7e" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.5" "https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz#fa8a2e12c5e620b09f53e65bcd87550d2e5a1e2e04bf8ba991dcc55113876397" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.5" "https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tgz#38dc4e2c261d49c661196066edbfb70fdb16be4a79cc8220c224dfeb5636d405" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.6000066400000000000000000000016561476513315000231710ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.3.2" "https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz#2e8a40b01979afe8be0bbfb3de5dc1c6709fedb46d6c89c10da114ab5fc3d281" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.6" "https://www.python.org/ftp/python/3.12.6/Python-3.12.6.tar.xz#1999658298cf2fb837dffed8ff3c033ef0c98ef20cf73c5d5f66bed5ab89697c" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.6" "https://www.python.org/ftp/python/3.12.6/Python-3.12.6.tgz#85a4c1be906d20e5c5a69f2466b00da769c221d6a684acfd3a514dbf5bf10a66" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.7000066400000000000000000000016561476513315000231720ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.3.2" "https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz#2e8a40b01979afe8be0bbfb3de5dc1c6709fedb46d6c89c10da114ab5fc3d281" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.7" "https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tar.xz#24887b92e2afd4a2ac602419ad4b596372f67ac9b077190f459aba390faf5550" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.7" "https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tgz#73ac8fe780227bf371add8373c3079f42a0dc62deff8d612cd15a618082ab623" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.8000066400000000000000000000016561476513315000231730ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.3.2" "https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz#2e8a40b01979afe8be0bbfb3de5dc1c6709fedb46d6c89c10da114ab5fc3d281" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.8" "https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tar.xz#c909157bb25ec114e5869124cc2a9c4a4d4c1e957ca4ff553f1edc692101154e" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.8" "https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tgz#5978435c479a376648cb02854df3b892ace9ed7d32b1fead652712bee9d03a45" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.12.9000066400000000000000000000016561476513315000231740ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.3.2" "https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz#2e8a40b01979afe8be0bbfb3de5dc1c6709fedb46d6c89c10da114ab5fc3d281" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.12.9" "https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tar.xz#7220835d9f90b37c006e9842a8dff4580aaca4318674f947302b8d28f3f81112" standard verify_py312 copy_python_gdb ensurepip else install_package "Python-3.12.9" "https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tgz#45313e4c5f0e8acdec9580161d565cf5fea578e3eabf25df7cc6355bf4afa1ee" standard verify_py312 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.13-dev000066400000000000000000000012161476513315000235720ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 export PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL=1 install_package "openssl-3.3.0" "https://www.openssl.org/source/openssl-3.3.0.tar.gz#53e66b043322a606abf0087e7699a0e033a37fa13feb9742df35c3a33b18fb02" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.13-dev" "https://github.com/python/cpython" 3.13 standard verify_py313 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.13.0000066400000000000000000000016561476513315000231640ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.3.2" "https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz#2e8a40b01979afe8be0bbfb3de5dc1c6709fedb46d6c89c10da114ab5fc3d281" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.13.0" "https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tar.xz#086de5882e3cb310d4dca48457522e2e48018ecd43da9cdf827f6a0759efb07d" standard verify_py313 copy_python_gdb ensurepip else install_package "Python-3.13.0" "https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tgz#12445c7b3db3126c41190bfdc1c8239c39c719404e844babbd015a1bc3fafcd4" standard verify_py313 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.13.0t000066400000000000000000000001241476513315000233350ustar00rootroot00000000000000export PYTHON_BUILD_FREE_THREADING=1 source "$(dirname "${BASH_SOURCE[0]}")"/3.13.0 pyenv-2.5.4/plugins/python-build/share/python-build/3.13.1000066400000000000000000000016561476513315000231650ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.4.0" "https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz#e15dda82fe2fe8139dc2ac21a36d4ca01d5313c75f99f46c4e8a27709b7294bf" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.13.1" "https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tar.xz#9cf9427bee9e2242e3877dd0f6b641c1853ca461f39d6503ce260a59c80bf0d9" standard verify_py313 copy_python_gdb ensurepip else install_package "Python-3.13.1" "https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz#1513925a9f255ef0793dbf2f78bb4533c9f184bdd0ad19763fd7f47a400a7c55" standard verify_py313 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.13.1t000066400000000000000000000001241476513315000233360ustar00rootroot00000000000000export PYTHON_BUILD_FREE_THREADING=1 source "$(dirname "${BASH_SOURCE[0]}")"/3.13.1 pyenv-2.5.4/plugins/python-build/share/python-build/3.13.2000066400000000000000000000016561476513315000231660ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.4.0" "https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz#e15dda82fe2fe8139dc2ac21a36d4ca01d5313c75f99f46c4e8a27709b7294bf" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.13.2" "https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tar.xz#d984bcc57cd67caab26f7def42e523b1c015bbc5dc07836cf4f0b63fa159eb56" standard verify_py313 copy_python_gdb ensurepip else install_package "Python-3.13.2" "https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tgz#b8d79530e3b7c96a5cb2d40d431ddb512af4a563e863728d8713039aa50203f9" standard verify_py313 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.13.2t000066400000000000000000000001241476513315000233370ustar00rootroot00000000000000export PYTHON_BUILD_FREE_THREADING=1 source "$(dirname "${BASH_SOURCE[0]}")"/3.13.2 pyenv-2.5.4/plugins/python-build/share/python-build/3.13t-dev000066400000000000000000000001261476513315000237550ustar00rootroot00000000000000export PYTHON_BUILD_FREE_THREADING=1 source "$(dirname "${BASH_SOURCE[0]}")"/3.13-dev pyenv-2.5.4/plugins/python-build/share/python-build/3.14-dev000066400000000000000000000012161476513315000235730ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1 export PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL=1 install_package "openssl-3.3.0" "https://www.openssl.org/source/openssl-3.3.0.tar.gz#53e66b043322a606abf0087e7699a0e033a37fa13feb9742df35c3a33b18fb02" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.14-dev" "https://github.com/python/cpython" main standard verify_py314 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.14.0a6000066400000000000000000000016661476513315000234150ustar00rootroot00000000000000prefer_openssl3 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-3.4.1" "https://github.com/openssl/openssl/releases/download/openssl-3.4.1/openssl-3.4.1.tar.gz#002a2d6b30b58bf4bea46c43bdd96365aaf8daa6c428782aa4feee06da197df3" mac_openssl --if has_broken_mac_openssl install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.14.0a6" "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a6.tar.xz#8d6181e5331d9a2cd6ca405ae1230e88589a043f4768ebb443d3889d45c1c35c" standard verify_py313 copy_python_gdb ensurepip else install_package "Python-3.14.0a6" "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a6.tgz#8129cdb891958eb644856317f91fd1d2f1019745a983b2b01d2506584eb5be3e" standard verify_py313 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.14.0a6t000066400000000000000000000001261476513315000235670ustar00rootroot00000000000000export PYTHON_BUILD_FREE_THREADING=1 source "$(dirname "${BASH_SOURCE[0]}")"/3.14.0a6 pyenv-2.5.4/plugins/python-build/share/python-build/3.14t-dev000066400000000000000000000001261476513315000237560ustar00rootroot00000000000000export PYTHON_BUILD_FREE_THREADING=1 source "$(dirname "${BASH_SOURCE[0]}")"/3.14-dev pyenv-2.5.4/plugins/python-build/share/python-build/3.2.0000066400000000000000000000016311476513315000230730ustar00rootroot00000000000000install_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-3.2" "https://www.python.org/ftp/python/3.2/Python-3.2.tgz#27b35bfcbbf01de9564c0265d72b58ba3ff3d56df0615765372f2aa09dc20da9" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/3.2.1000066400000000000000000000016371476513315000231020ustar00rootroot00000000000000install_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-3.2.1" "https://www.python.org/ftp/python/3.2.1/Python-3.2.1.tgz#7cff29d984696d9fe8c7bea54da5b9ad36acef33ff5cf0d3e37e4d12fb21c572" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/3.2.2000066400000000000000000000016371476513315000231030ustar00rootroot00000000000000install_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-3.2.2" "https://www.python.org/ftp/python/3.2.2/Python-3.2.2.tgz#acc6a13cb4fed0b7e86716324a8437e326645b8076177eede5a0cad99ec0313c" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/3.2.3000066400000000000000000000016371476513315000231040ustar00rootroot00000000000000install_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-3.2.3" "https://www.python.org/ftp/python/3.2.3/Python-3.2.3.tgz#74c33e165edef7532cef95fd9a325a06878b5bfc8a5d038161573f283eaf9809" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/3.2.4000066400000000000000000000016371476513315000231050ustar00rootroot00000000000000install_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-3.2.4" "https://www.python.org/ftp/python/3.2.4/Python-3.2.4.tgz#71c3139908ccc1c544ba1e331a3c22b3f1c09f562438a054fd6f4e2628de8b9a" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/3.2.5000066400000000000000000000016371476513315000231060ustar00rootroot00000000000000install_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-3.2.5" "https://www.python.org/ftp/python/3.2.5/Python-3.2.5.tgz#5eae0ab92a0bb9e3a1bf9c7cd046bc3de58996b049bd894d095978b6b085099f" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/3.2.6000066400000000000000000000021721476513315000231020ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.2.6" "https://www.python.org/ftp/python/3.2.6/Python-3.2.6.tar.xz#1d12b501819fd26afafbf8459be1aa279b56f032b4c15412de0a713ce0de7bdc" standard verify_py32 else install_package "Python-3.2.6" "https://www.python.org/ftp/python/3.2.6/Python-3.2.6.tgz#fc1e41296e29d476f696303acae293ae7a2310f0f9d0d637905e722a3f16163e" standard verify_py32 fi install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/3.3.0000066400000000000000000000011101476513315000230640ustar00rootroot00000000000000install_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-3.3.0" "https://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz#cfe531eaace2503e13a74addc7f4a89482e99f8b8fca51b469ae5c83f450604e" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.3.1000066400000000000000000000011101476513315000230650ustar00rootroot00000000000000install_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-3.3.1" "https://www.python.org/ftp/python/3.3.1/Python-3.3.1.tgz#671dc3632f311e63c6733703aa0a1ad90c99277ddc8299d39e487718a50319bd" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.3.2000066400000000000000000000011101476513315000230660ustar00rootroot00000000000000install_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-3.3.2" "https://www.python.org/ftp/python/3.3.2/Python-3.3.2.tgz#de664fca3b8e0ab20fb42bfed1a36e26f116f1853e88ada12dbc938761036172" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.3.3000066400000000000000000000011101476513315000230670ustar00rootroot00000000000000install_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-3.3.3" "https://www.python.org/ftp/python/3.3.3/Python-3.3.3.tgz#30b60839bfe0ae8a2dba11e909328459bb8ee4a258afe7494b06b2ceda080efc" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.3.4000066400000000000000000000011101476513315000230700ustar00rootroot00000000000000install_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-3.3.4" "https://www.python.org/ftp/python/3.3.4/Python-3.3.4.tgz#ea055db9dd004a6ecd7690abc9734573763686dd768122316bae2dfd026412af" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.3.5000066400000000000000000000011101476513315000230710ustar00rootroot00000000000000install_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-3.3.5" "https://www.python.org/ftp/python/3.3.5/Python-3.3.5.tgz#916bc57dd8524dc27429bebae7b39d6942742cf9699b875b2b496a3d960c7168" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.3.6000066400000000000000000000014551476513315000231060ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.3.6" "https://www.python.org/ftp/python/3.3.6/Python-3.3.6.tar.xz#5226e4bf7a530c3ff2bcde0c94e0e09e59a8bcde0114fe0268bc925bdabb5d3f" standard verify_py33 ensurepip else install_package "Python-3.3.6" "https://www.python.org/ftp/python/3.3.6/Python-3.3.6.tgz#0a58ad1f1def4ecc90b18b0c410a3a0e1a48cf7692c75d1f83d0af080e5d2034" standard verify_py33 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.3.7000066400000000000000000000014551476513315000231070ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.3.7" "https://www.python.org/ftp/python/3.3.7/Python-3.3.7.tar.xz#85f60c327501c36bc18c33370c14d472801e6af2f901dafbba056f61685429fe" standard verify_py33 ensurepip else install_package "Python-3.3.7" "https://www.python.org/ftp/python/3.3.7/Python-3.3.7.tgz#992461a9598e85a45323512d4e60fa6c1d5aaef0956bf9db98733cc5aa9b05e1" standard verify_py33 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4-dev000066400000000000000000000010051476513315000235060ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.4-dev" "https://github.com/python/cpython" "3.4" standard verify_py34 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.4.0000066400000000000000000000014551476513315000231010ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.0" "https://www.python.org/ftp/python/3.4.0/Python-3.4.0.tar.xz#f13686c0a2d45e7146759e9d5d1cbd8097a0606483c0cf7730e1e13f58b14cbe" standard verify_py34 ensurepip else install_package "Python-3.4.0" "https://www.python.org/ftp/python/3.4.0/Python-3.4.0.tgz#d2c83ea0217769a73e8b1ee33ffbca814903f8568e30f8d13e68e3d1f743449c" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.1000066400000000000000000000014551476513315000231020ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.1" "https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tar.xz#c595a163104399041fcbe1c5c04db4c1da94f917b82ce89e8944c8edff7aedc4" standard verify_py34 ensurepip else install_package "Python-3.4.1" "https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz#8d007e3ef80b128a292be101201e75dec5480e5632e994771e7c231d17720b66" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.10000066400000000000000000000013741476513315000231620ustar00rootroot00000000000000install_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 has_tar_xz_support \ && src="https://www.python.org/ftp/python/3.4.10/Python-3.4.10.tar.xz#d46a8f6fe91679e199c671b1b0a30aaf172d2acb5bcab25beb35f16c3d195b4e" \ || src="https://www.python.org/ftp/python/3.4.10/Python-3.4.10.tgz#217757699249ab432571b381386d441e12b433100ab5f908051fcb7cced2539d" install_package "Python-3.4.10" "$src" standard verify_py34 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.4.2000066400000000000000000000014551476513315000231030ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.2" "https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tar.xz#1c6d9682d145c056537e477bbfa060ce727f9edd38df1827e0f970dcf04b2def" standard verify_py34 ensurepip else install_package "Python-3.4.2" "https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz#44a3c1ef1c7ca3e4fd25242af80ed72da941203cb4ed1a8c1b724d9078965dd8" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.3000066400000000000000000000014551476513315000231040ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.3" "https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz#b5b3963533768d5fc325a4d7a6bd6f666726002d696f1d399ec06b043ea996b8" standard verify_py34 ensurepip else install_package "Python-3.4.3" "https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz#8b743f56e9e50bf0923b9e9c45dd927c071d7aa56cd46569d8818add8cf01147" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.4000066400000000000000000000014551476513315000231050ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.4" "https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tar.xz#a797d3820155ec6cb654a652b9acfb11792d4e7d568eef1f9199009e042b6ba2" standard verify_py34 ensurepip else install_package "Python-3.4.4" "https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tgz#bc93e944025816ec360712b4c42d8d5f729eaed2b26585e9bc8844f93f0c382e" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.5000066400000000000000000000014551476513315000231060ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.5" "https://www.python.org/ftp/python/3.4.5/Python-3.4.5.tar.xz#ee64b1c8a47461009abf25252332d29a4e587cb4f0c1c96aa793a3732e9d898a" standard verify_py34 ensurepip else install_package "Python-3.4.5" "https://www.python.org/ftp/python/3.4.5/Python-3.4.5.tgz#997aca4dd8692f3c954658a3db11c1d0862bcbf8eadd6a164746eb33d317c034" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.6000066400000000000000000000014551476513315000231070ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.6" "https://www.python.org/ftp/python/3.4.6/Python-3.4.6.tar.xz#f13428bbe6aa9e3b9b6499502dc488c26096349ed7a21f7a0c1db90911115f40" standard verify_py34 ensurepip else install_package "Python-3.4.6" "https://www.python.org/ftp/python/3.4.6/Python-3.4.6.tgz#fe59daced99549d1d452727c050ae486169e9716a890cffb0d468b376d916b48" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.7000066400000000000000000000014551476513315000231100ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.7" "https://www.python.org/ftp/python/3.4.7/Python-3.4.7.tar.xz#8714cf2b56dd36922dec8fa184d4936e1001c22fb439798cb73dda069e129d1b" standard verify_py34 ensurepip else install_package "Python-3.4.7" "https://www.python.org/ftp/python/3.4.7/Python-3.4.7.tgz#1614734847fd07e2a1ab1c65ae841db2433f8b845f49b34b7b5cabcb1c3f491f" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.8000066400000000000000000000014551476513315000231110ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.8" "https://www.python.org/ftp/python/3.4.8/Python-3.4.8.tar.xz#29a472fa902c7b2add152f5e1e82e0885a8d360645689c1db5d1949a7e8ac3ea" standard verify_py34 ensurepip else install_package "Python-3.4.8" "https://www.python.org/ftp/python/3.4.8/Python-3.4.8.tgz#8b1a1ce043e132082d29a5d09f2841f193c77b631282a82f98895a5dbaba1639" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.4.9000066400000000000000000000014551476513315000231120ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.4.9" "https://www.python.org/ftp/python/3.4.9/Python-3.4.9.tar.xz#59629676ba2b01a798f5211d8f63c26ee52f1d5133cf37583e0bf1bad50c2bd9" standard verify_py34 ensurepip else install_package "Python-3.4.9" "https://www.python.org/ftp/python/3.4.9/Python-3.4.9.tgz#e02e565372750a6678efe35ddecbe5ccd5330a8a2e8bbe38d3060713492e3dab" standard verify_py34 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5-dev000066400000000000000000000010251476513315000235110ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.5-dev" "https://github.com/python/cpython" "3.5" standard verify_py35 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.5.0000066400000000000000000000015151476513315000230770ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.5.0" "https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tar.xz#d6d7aa1634a5eeeca6ed4fca266982a04f84bd8f3945a9179e20b24ad2e2be91" standard verify_py35 copy_python_gdb ensurepip else install_package "Python-3.5.0" "https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz#584e3d5a02692ca52fce505e68ecd77248a6f2c99adf9db144a39087336b0fe0" standard verify_py35 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.1000066400000000000000000000015151476513315000231000ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.5.1" "https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xz#c6d57c0c366d9060ab6c0cdf889ebf3d92711d466cc0119c441dbf2746f725c9" standard verify_py35 copy_python_gdb ensurepip else install_package "Python-3.5.1" "https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz#687e067d9f391da645423c7eda8205bae9d35edc0c76ef5218dcbe4cc770d0d7" standard verify_py35 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.10000066400000000000000000000015041476513315000231560ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.10" "https://www.python.org/ftp/python/3.5.10/Python-3.5.10.tar.xz#0f0fa8685c1dc1f1dacb0b4e7779796b90aef99dc1fa4967a71b9da7b57d4a28" standard verify_py35 ensurepip else install_package "Python-3.5.10" "https://www.python.org/ftp/python/3.5.10/Python-3.5.10.tgz#3496a0daf51913718a6f10e3eda51fa43634cb6151cb096f312d48bdbeff7d3a" standard verify_py35 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.2000066400000000000000000000015151476513315000231010ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.5.2" "https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz#0010f56100b9b74259ebcd5d4b295a32324b58b517403a10d1a2aa7cb22bca40" standard verify_py35 copy_python_gdb ensurepip else install_package "Python-3.5.2" "https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz#1524b840e42cf3b909e8f8df67c1724012c7dc7f9d076d4feef2d3eff031e8a0" standard verify_py35 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.3000066400000000000000000000015361476513315000231050ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.3" "https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tar.xz#eefe2ad6575855423ab630f5b51a8ef6e5556f774584c06beab4926f930ddbb0" standard verify_py35 copy_python_gdb ensurepip else install_package "Python-3.5.3" "https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz#d8890b84d773cd7059e597dbefa510340de8336ec9b9e9032bf030f19291565a" standard verify_py35 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.4000066400000000000000000000015361476513315000231060ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.4" "https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tar.xz#94d93bfabb3b109f8a10365a325f920f9ec98c6e2380bf228f9700a14054c84c" standard verify_py35 copy_python_gdb ensurepip else install_package "Python-3.5.4" "https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tgz#6ed87a8b6c758cc3299a8b433e8a9a9122054ad5bc8aad43299cff3a53d8ca44" standard verify_py35 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.5000066400000000000000000000015361476513315000231070ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.5" "https://www.python.org/ftp/python/3.5.5/Python-3.5.5.tar.xz#063d2c3b0402d6191b90731e0f735c64830e7522348aeb7ed382a83165d45009" standard verify_py35 copy_python_gdb ensurepip else install_package "Python-3.5.5" "https://www.python.org/ftp/python/3.5.5/Python-3.5.5.tgz#2f988db33913dcef17552fd1447b41afb89dbc26e3cdfc068ea6c62013a3a2a5" standard verify_py35 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.6000066400000000000000000000015361476513315000231100ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.6" "https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tar.xz#f55cde04f521f273c7cba08912921cc5642cfc15ca7b22d5829f0aff4371155f" standard verify_py35 copy_python_gdb ensurepip else install_package "Python-3.5.6" "https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz#30d2ff093988e74283e1abfee823292c6b59590796b9827e95ba4940b27d26f8" standard verify_py35 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.7000066400000000000000000000014761476513315000231140ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.7" "https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tar.xz#285892899bf4d5737fd08482aa6171c6b2564a45b9102dfacfb72826aebdc7dc" standard verify_py35 ensurepip else install_package "Python-3.5.7" "https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tgz#542d94920a2a06a471a73b51614805ad65366af98145b0369bc374cf248b521b" standard verify_py35 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.8000066400000000000000000000014761476513315000231150ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.8" "https://www.python.org/ftp/python/3.5.8/Python-3.5.8.tar.xz#55a345c78ee3afbc2e60678442aad7bcc384ddea5bb95f8d66edc4868d4847d4" standard verify_py35 ensurepip else install_package "Python-3.5.8" "https://www.python.org/ftp/python/3.5.8/Python-3.5.8.tgz#18c88dfd260147bc7247e6356010e5d4916dfbfc480f6434917f88e61228177a" standard verify_py35 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.5.9000066400000000000000000000014761476513315000231160ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.5.9" "https://www.python.org/ftp/python/3.5.9/Python-3.5.9.tar.xz#c24a37c63a67f53bdd09c5f287b5cff8e8b98f857bf348c577d454d3f74db049" standard verify_py35 ensurepip else install_package "Python-3.5.9" "https://www.python.org/ftp/python/3.5.9/Python-3.5.9.tgz#67a1d4fc6e4540d6a092cadc488e533afa961b3c9becc74dc3d6b55cb56e0cc1" standard verify_py35 ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6-dev000066400000000000000000000010251476513315000235120ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.6-dev" "https://github.com/python/cpython" "3.6" standard verify_py36 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.6.0000066400000000000000000000015151476513315000231000ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.6.0" "https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz#b0c5f904f685e32d9232f7bdcbece9819a892929063b6e385414ad2dd6a23622" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.0" "https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz#aa472515800d25a3739833f76ca3735d9f4b2fe77c3cb21f69275e0cce30cb2b" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.1000066400000000000000000000015151476513315000231010ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.6.1" "https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz#a01810ddfcec216bcdb357a84bfaafdfaa0ca42bbdaa4cb7ff74f5a9961e4041" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.1" "https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz#aa50b0143df7c89ce91be020fe41382613a817354b33acdc6641b44f8ced3828" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.10000066400000000000000000000015441476513315000231630ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.10" "https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz#0a833c398ac8cd7c5538f7232d8531afef943c60495c504484f308dac3af40de" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.6.10" "https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz#7034dd7cba98d4f94c74f9edd7345bac71c8814c41672c64d9044fa2f96f334d" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.11000066400000000000000000000015441476513315000231640ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.11" "https://www.python.org/ftp/python/3.6.11/Python-3.6.11.tar.xz#741ebdcbc4e3937a5ff23517dd455ebf7d543ea9fef6f5cf6f46e575d6c4fda4" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.6.11" "https://www.python.org/ftp/python/3.6.11/Python-3.6.11.tgz#96621902f89746fffc22f39749c07da7c2917b232e72352e6837d41850f7b90c" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.12000066400000000000000000000015441476513315000231650ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.12" "https://www.python.org/ftp/python/3.6.12/Python-3.6.12.tar.xz#70953a9b5d6891d92e65d184c3512126a15814bee15e1eff2ddcce04334e9a99" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.6.12" "https://www.python.org/ftp/python/3.6.12/Python-3.6.12.tgz#12dddbe52385a0f702fb8071e12dcc6b3cb2dde07cd8db3ed60e90d90ab78693" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.13000066400000000000000000000015441476513315000231660ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.13" "https://www.python.org/ftp/python/3.6.13/Python-3.6.13.tar.xz#a47a43a53abb42286a2c11965343ff56711b9e64e8d11bf2c6701a4fb8ce1a0f" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.6.13" "https://www.python.org/ftp/python/3.6.13/Python-3.6.13.tgz#614950d3d54f6e78dac651b49c64cfe2ceefea5af3aff3371a9e4b27a53b2669" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.14000066400000000000000000000015321476513315000231640ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.14" "https://www.python.org/ftp/python/3.6.14/Python-3.6.14.tar.xz#2663a7a0cfbd00fc76269dce4317db0b54be53c0f4d705aabb32b87efa02d5ae" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.14" "https://www.python.org/ftp/python/3.6.14/Python-3.6.14.tgz#70064897bc434d6eae8bcc3e5678f282b5ea776d60e695da548a1219ccfd27a5" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.15000066400000000000000000000015321476513315000231650ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.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 pyenv-2.5.4/plugins/python-build/share/python-build/3.6.2000066400000000000000000000015151476513315000231020ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.6.2" "https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz#9229773be41ed144370f47f0f626a1579931f5a390f1e8e3853174d52edd64a9" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.2" "https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz#7919489310a5f17f7acbab64d731e46dca0702874840dadce8bd4b2b3b8e7a82" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.3000066400000000000000000000015151476513315000231030ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.6.3" "https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz#cda7d967c9a4bfa52337cdf551bcc5cff026b6ac50a8834e568ce4a794ca81da" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.3" "https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz#ab6193af1921b30f587b302fe385268510e80187ca83ca82d2bfe7ab544c6f91" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.4000066400000000000000000000015151476513315000231040ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.6.4" "https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz#159b932bf56aeaa76fd66e7420522d8c8853d486b8567c459b84fe2ed13bcaba" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.4" "https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz#7dc453e1a93c083388eb1a23a256862407f8234a96dc4fae0fc7682020227486" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.5000066400000000000000000000015151476513315000231050ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.6.5" "https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz#f434053ba1b5c8a5cc597e966ead3c5143012af827fd3f0697d21450bb8d87a6" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.5" "https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz#53a3e17d77cd15c5230192b6a8c1e031c07cd9f34a2f089a731c6f6bd343d5c6" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.6000066400000000000000000000015151476513315000231060ustar00rootroot00000000000000install_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 if has_tar_xz_support; then install_package "Python-3.6.6" "https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz#d79bc15d456e73a3173a2938f18a17e5149c850ebdedf84a78067f501ee6e16f" standard verify_py36 copy_python_gdb ensurepip else install_package "Python-3.6.6" "https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz#7d56dadf6c7d92a238702389e80cfe66fbfae73e584189ed6f89c75bbf3eda58" standard verify_py36 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.7000066400000000000000000000015361476513315000231120ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.7" "https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz#81fd1401a9d66533b0a3e9e3f4ea1c7c6702d57d5b90d659f971e6f1b745f77d" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.6.7" "https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz#b7c36f7ed8f7143b2c46153b7332db2227669f583ea0cce753facf549d1a4239" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.8000066400000000000000000000015361476513315000231130ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.8" "https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz#35446241e995773b1bed7d196f4b624dadcadc8429f26282e756b2fb8a351193" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.6.8" "https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz#7f5b1f08b3b0a595387ef6c64c85b1b13b38abef0dd871835ee923262e4f32f0" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.6.9000066400000000000000000000015361476513315000231140ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.6.9" "https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tar.xz#5e2f5f554e3f8f7f0296f7e73d8600c4e9acbaee6b2555b83206edf5153870da" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.6.9" "https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz#47fc92a1dcb946b9ed0abc311d3767b7215c54e655b17fd1d3f9b538195525aa" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7-dev000066400000000000000000000010701476513315000235130ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.7-dev" "https://github.com/python/cpython" "3.7" standard verify_py37 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.7.0000066400000000000000000000016131476513315000231000ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.0" "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz#0382996d1ee6aafe59763426cf0139ffebe36984474d0ec4126dd1c40a8b3549" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.0" "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz#85bb9feb6863e04fb1700b018d9d42d1caac178559ffa453d7e6a436e259fd0d" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.1000066400000000000000000000016131476513315000231010ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.1" "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz#fa7e2b8e8c9402f192ad56dc4f814089d1c4466c97d780f5e5acc02c04243d6d" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.1" "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz#36c1b81ac29d0f8341f727ef40864d99d8206897be96be73dc34d4739c9c9f06" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.10000066400000000000000000000016071476513315000231640ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.10" "https://www.python.org/ftp/python/3.7.10/Python-3.7.10.tar.xz#f8d82e7572c86ec9d55c8627aae5040124fd2203af400c383c821b980306ee6b" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.10" "https://www.python.org/ftp/python/3.7.10/Python-3.7.10.tgz#c9649ad84dc3a434c8637df6963100b2e5608697f9ba56d82e3809e4148e0975" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.11000066400000000000000000000016071476513315000231650ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.11" "https://www.python.org/ftp/python/3.7.11/Python-3.7.11.tar.xz#ddb4196ab5c4f69e895920a422cb60d42b46e2de2b173ce7fd57f1435459a734" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.11" "https://www.python.org/ftp/python/3.7.11/Python-3.7.11.tgz#b4fba32182e16485d0a6022ba83c9251e6a1c14676ec243a9a07d3722cd4661a" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.12000066400000000000000000000016071476513315000231660ustar00rootroot00000000000000prefer_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 pyenv-2.5.4/plugins/python-build/share/python-build/3.7.13000066400000000000000000000016071476513315000231670ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" 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.13" "https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tar.xz#99f106275df8899c3e8cb9d7c01ce686c202ef275953301427194693de5bef84" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.13" "https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz#e405417f50984bc5870c7e7a9f9aeb93e9d270f5ac67f667a0cd3a09439682b5" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.14000066400000000000000000000016071476513315000231700ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" 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.14" "https://www.python.org/ftp/python/3.7.14/Python-3.7.14.tar.xz#4157ae31eb81af19e81c36882610491b0fb8f50e00fa8a17b095c88908b9c45c" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.14" "https://www.python.org/ftp/python/3.7.14/Python-3.7.14.tgz#82b2abf8978caa61a9011d166eede831b32de9cbebc0db8162900fa23437b709" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.15000066400000000000000000000016071476513315000231710ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" 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.15" "https://www.python.org/ftp/python/3.7.15/Python-3.7.15.tar.xz#5911475a07ac2b53d746e88a0716af6d2b4734941919136ea0d33fb9c75b9714" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.15" "https://www.python.org/ftp/python/3.7.15/Python-3.7.15.tgz#cf2993798ae8430f3af3a00d96d9fdf320719f4042f039380dca79967c25e436" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.16000066400000000000000000000016071476513315000231720ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" 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.16" "https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tar.xz#8338f0c2222d847e904c955369155dc1beeeed806e8d5ef04b00ef4787238bfd" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.16" "https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tgz#0cf2da07fa464636755215415909e22eb1d058817af4824bc15af8390d05fb38" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.17000066400000000000000000000016071476513315000231730ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" 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.17" "https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tar.xz#7911051ed0422fd54b8f59ffc030f7cf2ae30e0f61bda191800bb040dce4f9d2" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.17" "https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tgz#fd50161bc2a04f4c22a0971ff0f3856d98b4bf294f89740a9f06b520aae63b49" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.2000066400000000000000000000016131476513315000231020ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.2" "https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz#d83fe8ce51b1bb48bbcf0550fd265b9a75cdfdfa93f916f9e700aef8444bf1bb" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.2" "https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz#f09d83c773b9cc72421abba2c317e4e6e05d919f9bcf34468e192b6a6c8e328d" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.3000066400000000000000000000016131476513315000231030ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.3" "https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz#da60b54064d4cfcd9c26576f6df2690e62085123826cff2e667e72a91952d318" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.3" "https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz#d62e3015f2f89c970ac52343976b406694931742fbde2fed8d1ce8ebb4e1f8ff" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.4000066400000000000000000000016131476513315000231040ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.4" "https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz#fb799134b868199930b75f26678f18932214042639cd52b16da7fd134cd9b13f" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.4" "https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz#d63e63e14e6d29e17490abbe6f7d17afb3db182dbd801229f14e55f4157c4ba3" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.5000066400000000000000000000016131476513315000231050ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.5" "https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tar.xz#e85a76ea9f3d6c485ec1780fca4e500725a4a7bbc63c78ebc44170de9b619d94" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.5" "https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz#8ecc681ea0600bbfb366f2b173f727b205bb825d93d2f0b286bc4e58d37693da" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.6000066400000000000000000000016131476513315000231060ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.6" "https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz#55a2cce72049f0794e9a11a84862e9039af9183603b78bc60d89539f82cf533f" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.6" "https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz#aeee681c235ad336af116f08ab6563361a0c81c537072c1b309d6e4050aa2114" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.7000066400000000000000000000016131476513315000231070ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.7" "https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz#06a0a9f1bf0d8cd1e4121194d666c4e28ddae4dd54346de6c343206599f02136" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.7" "https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz#8c8be91cd2648a1a0c251f04ea0bb4c2a5570feb9c45eaaa2241c785585b475a" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.8000066400000000000000000000016131476513315000231100ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1j" "https://www.openssl.org/source/old/1.1.1/openssl-1.1.1j.tar.gz#aaf2fcb575cdf6491b98ab4829abf78a3dec8402b8b81efc8f23c00d443981bf" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.8" "https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tar.xz#43a543404b363f0037f89df8478f19db2dbc0d6f3ffee310bc2997fa71854a63" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.8" "https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tgz#0e25835614dc221e3ecea5831b38fa90788b5389b99b675a751414c858789ab0" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.7.9000066400000000000000000000016011476513315000231060ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.7.9" "https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz#91923007b05005b5f9bd46f3b9172248aea5abc1543e8a636d59e629c3331b01" standard verify_py37 copy_python_gdb ensurepip else install_package "Python-3.7.9" "https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz#39b018bc7d8a165e59aa827d9ae45c45901739b0bbb13721e4f973f3521c166a" standard verify_py37 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8-dev000066400000000000000000000010701476513315000235140ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.8-dev" "https://github.com/python/cpython" "3.8" standard verify_py38 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.8.0000066400000000000000000000016131476513315000231010ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.0" "https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz#b356244e13fb5491da890b35b13b2118c3122977c2cd825e3eb6e7d462030d84" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.0" "https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz#f1069ad3cae8e7ec467aa98a6565a62a48ef196cb8f1455a245a08db5e1792df" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.1000066400000000000000000000016131476513315000231020ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.1" "https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz#75894117f6db7051c1b34f37410168844bbb357c139a8a10a352e9bf8be594e8" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.1" "https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz#c7cfa39a43b994621b245e029769e9126caa2a93571cee2e743b213cceac35fb" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.10000066400000000000000000000020761476513315000231660ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.10" "https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tar.xz#6af24a66093dd840bcccf371d4044a3027e655cf24591ce26e48022bc79219d9" standard verify_py38 copy_python_gdb ensurepip 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 fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.11000066400000000000000000000020761476513315000231670ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.11" "https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tar.xz#fb1a1114ebfe9e97199603c6083e20b236a0e007a2c51f29283ffb50c1420fb2" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.11" "https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tgz#b77464ea80cec14581b86aeb7fb2ff02830e0abc7bcdc752b7b4bdfcd8f3e393" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.12000066400000000000000000000020761476513315000231700ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.12" "https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz#b1d3a76420375343b5e8a22fceb1ac65b77193e9ed27146524f0a9db058728ea" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.12" "https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz#316aa33f3b7707d041e73f246efedb297a70898c4b91f127f66dc8d80c596f1a" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.13000066400000000000000000000020761476513315000231710ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.13" "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz#6f309077012040aa39fe8f0c61db8c0fa1c45136763299d375c9e5756f09cf57" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.13" "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz#903b92d76354366b1d9c4434d0c81643345cef87c1600adfa36095d7b00eede4" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.14000066400000000000000000000020761476513315000231720ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.14" "https://www.python.org/ftp/python/3.8.14/Python-3.8.14.tar.xz#5d77e278271ba803e9909a41a4f3baca006181c93ada682a5e5fe8dc4a24c5f3" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.14" "https://www.python.org/ftp/python/3.8.14/Python-3.8.14.tgz#41f959c480c59211feb55d5a28851a56c7e22d02ef91035606ebb21011723c31" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.15000066400000000000000000000020761476513315000231730ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.15" "https://www.python.org/ftp/python/3.8.15/Python-3.8.15.tar.xz#5114fc7918a2a5e20eb5aac696b30c36f412c6ef24b13f5c9eb9e056982d9550" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.15" "https://www.python.org/ftp/python/3.8.15/Python-3.8.15.tgz#924d46999df82aa2eaa1de5ca51d6800ffb56b4bf52486a28f40634e3362abc4" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.16000066400000000000000000000020761476513315000231740ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.16" "https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tar.xz#d85dbb3774132473d8081dcb158f34a10ccad7a90b96c7e50ea4bb61f5ce4562" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.16" "https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tgz#71ca9d935637ed2feb59e90a368361dc91eca472a90acb1d344a2e8178ccaf10" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.17000066400000000000000000000020761476513315000231750ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.17" "https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tar.xz#2e54b0c68191f16552f6de2e97a2396540572a219f6bbb28591a137cecc490a9" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.17" "https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tgz#def428fa6cf61b66bcde72e3d9f7d07d33b2e4226f04f9d6fce8384c055113ae" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.18000066400000000000000000000020761476513315000231760ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.18" "https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tar.xz#3ffb71cd349a326ba7b2fadc7e7df86ba577dd9c4917e52a8401adbda7405e3f" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.18" "https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz#7c5df68bab1be81a52dea0cc2e2705ea00553b67107a301188383d7b57320b16" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.19000066400000000000000000000020761476513315000231770ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.19" "https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tar.xz#d2807ac69f69b84fd46a0b93bbd02a4fa48d3e70f4b2835ff0f72a2885040076" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.19" "https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tgz#c7fa55a36e5c7a19ec37d8f90f60a2197548908c9ac8b31e7c0dbffdd470eeac" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.2000066400000000000000000000016131476513315000231030ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.2" "https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz#2646e7dc233362f59714c6193017bb2d6f7b38d6ab4a0cb5fbac5c36c4d845df" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.2" "https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz#e634a7a74776c2b89516b2e013dda1728c89c8149b9863b8cea21946daf9d561" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.20000066400000000000000000000020761476513315000231670ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.20" "https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tar.xz#6fb89a7124201c61125c0ab4cf7f6894df339a40c02833bfd28ab4d7691fafb4" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.20" "https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tgz#9f2d5962c2583e67ef75924cd56d0c1af78bf45ec57035cf8a2cc09f74f4bf78" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.3000066400000000000000000000016131476513315000231040ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.3" "https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz#dfab5ec723c218082fe3d5d7ae17ecbdebffa9a1aea4d64aa3a2ecdd2e795864" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.3" "https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz#6af6d4d2e010f9655518d0fc6738c7ff7069f10a4d2fbd55509e467f092a8b90" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.4000066400000000000000000000016011476513315000231020ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.4" "https://www.python.org/ftp/python/3.8.4/Python-3.8.4.tar.xz#5f41968a95afe9bc12192d7e6861aab31e80a46c46fa59d3d837def6a4cd4d37" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.4" "https://www.python.org/ftp/python/3.8.4/Python-3.8.4.tgz#32c4d9817ef11793da4d0d95b3191c4db81d2e45544614e8449255ca9ae3cc18" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.5000066400000000000000000000016011476513315000231030ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.5" "https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz#e3003ed57db17e617acb382b0cade29a248c6026b1bd8aad1f976e9af66a83b0" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.5" "https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz#015115023c382eb6ab83d512762fe3c5502fa0c6c52ffebc4831c4e1a06ffc49" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.6000066400000000000000000000016011476513315000231040ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.6" "https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tar.xz#a9e0b79d27aa056eb9cce8d63a427b5f9bab1465dee3f942dcfdb25a82f4ab8a" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.6" "https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz#313562ee9986dc369cd678011bdfd9800ef62fbf7b1496228a18f86b36428c21" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.7000066400000000000000000000016011476513315000231050ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.7" "https://www.python.org/ftp/python/3.8.7/Python-3.8.7.tar.xz#ddcc1df16bb5b87aa42ec5d20a5b902f2d088caa269b28e01590f97a798ec50a" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.7" "https://www.python.org/ftp/python/3.8.7/Python-3.8.7.tgz#20e5a04262f0af2eb9c19240d7ec368f385788bba2d8dfba7e74b20bab4d2bac" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.8000066400000000000000000000016131476513315000231110ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1i" "https://www.openssl.org/source/old/1.1.1/openssl-1.1.1i.tar.gz#e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.8" "https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tar.xz#7c664249ff77e443d6ea0e4cf0e587eae918ca3c48d081d1915fe2a1f1bcc5cc" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.8" "https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tgz#76c0763f048e4f9b861d24da76b7dd5c7a3ba7ec086f40caedeea359263276f7" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.8.9000066400000000000000000000016011476513315000231070ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.8.9" "https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tar.xz#5e391f3ec45da2954419cab0beaefd8be38895ea5ce33577c3ec14940c4b9572" standard verify_py38 copy_python_gdb ensurepip else install_package "Python-3.8.9" "https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz#9779ec1df000bf86914cdd40860b88da56c1e61db59d37784beca14a259ac9e9" standard verify_py38 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9-dev000066400000000000000000000010661476513315000235220ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.9-dev" "https://github.com/python/cpython" 3.9 standard verify_py39 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/3.9.0000066400000000000000000000016061476513315000231040ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.0" "https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tar.xz#9c73e63c99855709b9be0b3cc9e5b072cb60f37311e8c4e50f15576a0bf82854" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.0" "https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz#df796b2dc8ef085edae2597a41c1c0a63625ebd92487adaef2fed22b567873e8" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.1000066400000000000000000000016061476513315000231050ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.1" "https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz#991c3f8ac97992f3d308fefeb03a64db462574eadbff34ce8bc5bb583d9903ff" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.1" "https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz#29cb91ba038346da0bd9ab84a0a55a845d872c341a4da6879f462e94c741f117" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.10000066400000000000000000000020761476513315000231670ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1l" "https://www.openssl.org/source/openssl-1.1.1l.tar.gz#0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.10" "https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz#0a8fbfb5287ebc3a13e9baf3d54e08fa06778ffeccf6311aef821bb3a6586cc8" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.10" "https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz#1aa9c0702edbae8f6a2c95f70a49da8420aaa76b7889d3419c186bfc8c0e571e" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.11000066400000000000000000000020761476513315000231700ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.11" "https://www.python.org/ftp/python/3.9.11/Python-3.9.11.tar.xz#66767a35309d724f370df9e503c172b4ee444f49d62b98bc4eca725123e26c49" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.11" "https://www.python.org/ftp/python/3.9.11/Python-3.9.11.tgz#3442400072f582ac2f0df30895558f08883b416c8c7877ea55d40d00d8a93112" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.12000066400000000000000000000020761476513315000231710ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.12" "https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tar.xz#2cd94b20670e4159c6d9ab57f91dbf255b97d8c1a1451d1c35f4ec1968adf971" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.12" "https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz#70e08462ebf265012bd2be88a63d2149d880c73e53f1712b7bbbe93750560ae8" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.13000066400000000000000000000020761476513315000231720ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.13" "https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tar.xz#125b0c598f1e15d2aa65406e83f792df7d171cdf38c16803b149994316a3080f" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.13" "https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz#829b0d26072a44689a6b0810f5b4a3933ee2a0b8a4bfc99d7c5893ffd4f97c44" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.14000066400000000000000000000020761476513315000231730ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.14" "https://www.python.org/ftp/python/3.9.14/Python-3.9.14.tar.xz#651304d216c8203fe0adf1a80af472d8e92c3b0e0a7892222ae4d9f3ae4debcf" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.14" "https://www.python.org/ftp/python/3.9.14/Python-3.9.14.tgz#9201836e2c16361b2b7408680502393737d44f227333fe2e5729c7d5f6041675" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.15000066400000000000000000000020761476513315000231740ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.15" "https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tar.xz#12daff6809528d9f6154216950423c9e30f0e47336cb57c6aa0b4387dd5eb4b2" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.15" "https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz#48d1ccb29d5fbaf1fb8f912271d09f7450e426d4dfe95978ef6aaada70ece4d8" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.16000066400000000000000000000020761476513315000231750ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.16" "https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tar.xz#22dddc099246dd2760665561e8adb7394ea0cc43a72684c6480f9380f7786439" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.16" "https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz#1ad539e9dbd2b42df714b69726e0693bc6b9d2d2c8e91c2e43204026605140c5" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.17000066400000000000000000000020761476513315000231760ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.17" "https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tar.xz#30ce057c44f283f8ed93606ccbdb8d51dd526bdc4c62cce5e0dc217bfa3e8cee" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.17" "https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tgz#8ead58f669f7e19d777c3556b62fae29a81d7f06a7122ff9bc57f7dd82d7e014" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.18000066400000000000000000000020761476513315000231770ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.18" "https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tar.xz#01597db0132c1cf7b331eff68ae09b5a235a3c3caa9c944c29cac7d1c4c4c00a" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.18" "https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz#504ce8cfd59addc04c22f590377c6be454ae7406cb1ebf6f5a350149225a9354" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.19000066400000000000000000000020761476513315000232000ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.19" "https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tar.xz#d4892cd1618f6458cb851208c030df1482779609d0f3939991bd38184f8c679e" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.19" "https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tgz#f5f9ec8088abca9e399c3b62fd8ef31dbd2e1472c0ccb35070d4d136821aaf71" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.2000066400000000000000000000016201476513315000231020ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1i" "https://www.openssl.org/source/old/1.1.1/openssl-1.1.1i.tar.gz#e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.2" "https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tar.xz#3c2034c54f811448f516668dce09d24008a0716c3a794dd8639b5388cbde247d" standard verify_py39 copy_python_gdb ensurepip 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 fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.20000066400000000000000000000020761476513315000231700ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.20" "https://www.python.org/ftp/python/3.9.20/Python-3.9.20.tar.xz#6b281279efd85294d2d6993e173983a57464c0133956fbbb5536ec9646beaf0c" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.20" "https://www.python.org/ftp/python/3.9.20/Python-3.9.20.tgz#1e71f006222666e0a39f5a47be8221415c22c4dd8f25334cc41aee260b3d379e" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.21000066400000000000000000000020761476513315000231710ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1u" "https://www.openssl.org/source/openssl-1.1.1u.tar.gz#e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.21" "https://www.python.org/ftp/python/3.9.21/Python-3.9.21.tar.xz#3126f59592c9b0d798584755f2bf7b081fa1ca35ce7a6fea980108d752a05bb1" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.21" "https://www.python.org/ftp/python/3.9.21/Python-3.9.21.tgz#667c3ba2ca98d39ead1162f6548c3475768582e2ff89e0821d25eb956ac09944" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.4000066400000000000000000000016051476513315000231070ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.4" "https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tar.xz#4b0e6644a76f8df864ae24ac500a51bbf68bd098f6a173e27d3b61cdca9aa134" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.4" "https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz#66c4de16daa74a825cf9da9ddae1fe020b72c3854b73b1762011cc33f9e4592f" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.5000066400000000000000000000020741476513315000231110ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.5" "https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz#0c5a140665436ec3dbfbb79e2dfb6d192655f26ef4a29aeffcb6d1820d716d83" standard verify_py39 copy_python_gdb ensurepip 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 fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.6000066400000000000000000000020701476513315000231060ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.6" "https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz#397920af33efc5b97f2e0b57e91923512ef89fc5b3c1d21dbfc8c4828ce0108a" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.6" "https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz#d0a35182e19e416fc8eae25a3dcd4d02d4997333e4ad1f2eee6010aadc3fe866" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.7000066400000000000000000000020701476513315000231070ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.7" "https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz#f8145616e68c00041d1a6399b76387390388f8359581abc24432bb969b5e3c57" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.7" "https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz#a838d3f9360d157040142b715db34f0218e535333696a5569dc6f854604eb9d1" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.8000066400000000000000000000020701476513315000231100ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1l" "https://www.openssl.org/source/openssl-1.1.1l.tar.gz#0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.8" "https://www.python.org/ftp/python/3.9.8/Python-3.9.8.tar.xz#675ce09bf23c09836bf1969b744b1ea4c1a18c32788626632525f08444ebad5c" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.8" "https://www.python.org/ftp/python/3.9.8/Python-3.9.8.tgz#7447fb8bb270942d620dd24faa7814b1383b61fa99029a240025fd81c1db8283" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/3.9.9000066400000000000000000000020701476513315000231110ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 # Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181) export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}" install_package "openssl-1.1.1l" "https://www.openssl.org/source/openssl-1.1.1l.tar.gz#0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1" mac_openssl --if has_broken_mac_openssl install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline if has_tar_xz_support; then install_package "Python-3.9.9" "https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz#06828c04a573c073a4e51c4292a27c1be4ae26621c3edc7cf9318418ce3b6d27" standard verify_py39 copy_python_gdb ensurepip else install_package "Python-3.9.9" "https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz#2cc7b67c1f3f66c571acc42479cdf691d8ed6b47bee12c9b68430413a17a44ea" standard verify_py39 copy_python_gdb ensurepip fi pyenv-2.5.4/plugins/python-build/share/python-build/activepython-2.7.14000066400000000000000000000012321476513315000256740ustar00rootroot00000000000000# Download source: http://downloads.activestate.com/ActivePython/releases/2.7.14.2717/ case "$(activepython_architecture 2>/dev/null || true)" in "linux-x86_64" ) install_package "ActivePython-2.7.14.2717-linux-x86_64-glibc-2.12-404899" "http://downloads.activestate.com/ActivePython/releases/2.7.14.2717/ActivePython-2.7.14.2717-linux-x86_64-glibc-2.12-404899.tar.gz#0b514b0edb6b847524d44637f56fdebcedb007864c61f8500e68bc2015dad937" "activepython" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Active Python is not available for $(activepython_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/activepython-3.5.4000066400000000000000000000012261476513315000256150ustar00rootroot00000000000000# Location source: http://downloads.activestate.com/ActivePython/releases/3.5.4.3504/ case "$(activepython_architecture 2>/dev/null || true)" in "linux-x86_64" ) install_package "ActivePython-3.5.4.3504-linux-x86_64-glibc-2.12-404899" "http://downloads.activestate.com/ActivePython/releases/3.5.4.3504/ActivePython-3.5.4.3504-linux-x86_64-glibc-2.12-404899.tar.gz#c65e7384bcff715399ef077aea5a17a9f60c3f5de3532a3767497af1d555f092" "activepython" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Active Python is not available for $(activepython_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/activepython-3.6.0000066400000000000000000000017201476513315000256110ustar00rootroot00000000000000# Download source: http://downloads.activestate.com/ActivePython/releases/3.6.0.3600/ case "$(activepython_architecture 2>/dev/null || true)" in "linux-x86_64" ) install_package "ActivePython-3.6.0.3600-linux-x86_64-glibc-2.3.6-401834" "http://downloads.activestate.com/ActivePython/releases/3.6.0.3600/ActivePython-3.6.0.3600-linux-x86_64-glibc-2.3.6-401834.tar.gz#edd17d3221d9744fe27d37842b325f55d0261e69073de3be54e29c1806fe57ae" "activepython" verify_py36 ;; "linux-x86" ) install_package "ActivePython-3.6.0.3600-linux-x86-glibc-2.3.6-401834" "http://downloads.activestate.com/ActivePython/releases/3.6.0.3600/ActivePython-3.6.0.3600-linux-x86-glibc-2.3.6-401834.tar.gz#fafa22ad3346532384866ad009da0c9f23323167dff9de5995f94e827a5eba32" "activepython" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Active Python is not available for $(activepython_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.4.0000066400000000000000000000016151476513315000246370ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.4.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.4.0-Linux-x86.sh#065284c5de369c9b89dcae79e7169ce9b734dc3bbe6c409a67a5ec6480cc0f40" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.4.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.4.0-Linux-x86_64.sh#85ae8a0a6e3a41cf7845be3def36ed40582d3dc6e6a50e99063eaf6f1abee24e" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.4.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.4.0-MacOSX-x86_64.sh#e5d5dae6e93bb7df528abc19f5ed3a69cc4bc867836bdc56886c5a3768fccde7" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.5.0000066400000000000000000000016151476513315000246400ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.5.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.5.0-Linux-x86.sh#ca7e356dc1b8c8ef27dfb74b32c77563df704c6ddb39e69cac65ec416ebfe8e5" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.5.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.5.0-Linux-x86_64.sh#f4cdc194f076e1b438c8a34e7e5f53e70c2200b411b2d0af719e23fe35c6411e" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.5.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.5.0-MacOSX-x86_64.sh#c69609f0f48f33ca5a12d425a9e4d0fc91b2c09d0345a590e1d77726446727aa" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.5.1000066400000000000000000000007261476513315000246430ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "MacOSX-x86_64" ) install_script "Anaconda-1.5.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.5.1-MacOSX-x86_64.sh#6d3c86a2fdbaeeec2a6c251d5c9034a32b7c68a0437f2fac0b8f25125fe6866f" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.6.0000066400000000000000000000016151476513315000246410ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.6.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.6.0-Linux-x86.sh#d6aeedfcb39d648fdfb5bd72c4d0b3063a9d4f4866baf5052aa0645bf5d2c07a" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.6.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.6.0-Linux-x86_64.sh#20f5b70193af4b0b8f10aa0e66aabca552846ec8f4958757ff3f4b79ef7b3160" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.6.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.6.0-MacOSX-x86_64.sh#e03317888c36c07451a349577b426f435a75075d1ee71e204eb9d5dd23936f5e" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.6.1000066400000000000000000000016151476513315000246420ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.6.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.6.1-Linux-x86.sh#745b9452fd18720deefb465a6687c0d66df8f11edceadcee758082dea1b8e812" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.6.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.6.1-Linux-x86_64.sh#81d1819ba08069343f228b9c819cdba0e4d15f2142c0c033657599808c3960fb" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.6.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.6.1-MacOSX-x86_64.sh#bbc15de34208ce8af5aceedeea1334636fe94c578b9890896729f1a61ace5e4f" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.7.0000066400000000000000000000016151476513315000246420ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.7.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.7.0-Linux-x86.sh#af372a27a1887e11061485e2a854c535775fd519713e028c38901f90c869cd83" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.7.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.7.0-Linux-x86_64.sh#6115cfae55a0746b4ae4128be839c99db39d02124160d9c531ca086c4d606582" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.7.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.7.0-MacOSX-x86_64.sh#046b592245bc2c11e733acb9700dc50947f2eff0f30fec4a4a5bf79368dfa14b" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.8.0000066400000000000000000000016151476513315000246430ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.8.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.8.0-Linux-x86.sh#2c08a5cd6ccaa9dc84063b0ee9b007aa82e35a75c340fb272b394896de853608" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.8.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.8.0-Linux-x86_64.sh#69f42966d918f4197040e4dd126d2e3cc3c267bb49869dbf2d6ef277ed5de8b7" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.8.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.8.0-MacOSX-x86_64.sh#5844ca595b5930399a1213db64ab53e9b7e2fc1c26d8f11769c161fe4f5661e6" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.9.0000066400000000000000000000016151476513315000246440ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.9.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.9.0-Linux-x86.sh#16471e90b3deb7be1b3d449d8883983d81f035dfaa1a3391497de20577de6f66" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.9.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.9.0-Linux-x86_64.sh#855f1265e4c0b40d50f5a3a0fe7bae05b1cccb0a5301b378a19e0a8f7262913a" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.9.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.9.0-MacOSX-x86_64.sh#722fe4d4406e88c5023e7ee21dc1401bb2a540d6c031d303f0330a95e60131fd" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.9.1000066400000000000000000000016151476513315000246450ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.9.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.9.1-Linux-x86.sh#9aa39c05f723fee18c54a9cc1729986193216affedbae125ca5faa067403030a" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.9.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.9.1-Linux-x86_64.sh#f6455e06a72b8cc11c8a96fb88a85518a2f7b2a1d6f1065f777d7ab4386f022d" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.9.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.9.1-MacOSX-x86_64.sh#7e4358adbaae2db9e17d1e0e4263b9a0174394c8f115c89d285c3f0f9206f75b" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-1.9.2000066400000000000000000000016151476513315000246460ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-1.9.2-Linux-x86" "https://repo.continuum.io/archive/Anaconda-1.9.2-Linux-x86.sh#1f7c850d0b98c011a717b3b757d82077accf0704dd7627f6962267bfb4476aad" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-1.9.2-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-1.9.2-Linux-x86_64.sh#7181d399833a2549a9584255bb477487f2fde1fda4c7f7215d6034ea2fcfa21e" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-1.9.2-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-1.9.2-MacOSX-x86_64.sh#be4611ca671f80b984fa330d4ecf82244c388abbdb5c7679a4e6e806b4dca52f" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-2.0.0000066400000000000000000000016151476513315000246340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-2.0.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-2.0.0-Linux-x86.sh#efb9d3987134d484d88a9d915437b1bd568d065b4fefbd538e0281694bd90888" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-2.0.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-2.0.0-Linux-x86_64.sh#3aa27ddf4a0ba5046ba52b97da99e20eb0614273d905bd73e016852451908917" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-2.0.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-2.0.0-MacOSX-x86_64.sh#ad6271ad21403166bf54d0734ba8c7f7eb65bb78a70d67c58c15b6874cddc81e" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-2.0.1000066400000000000000000000016151476513315000246350ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-2.0.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda-2.0.1-Linux-x86.sh#e8ffc63f31673b5ce41a95796a1f729ddcf4c7db19d6dbe29bedaeaaf8478505" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-2.0.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-2.0.1-Linux-x86_64.sh#074204fa26872b4a946123071d15b8390c0e5441352c6b65b2abd32511bff240" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-2.0.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-2.0.1-MacOSX-x86_64.sh#4ecda163c6f46e70cc6a1fe62dece4c6ecd6474845129cc95a1d4e18c42f8015" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-2.1.0000066400000000000000000000016151476513315000246350ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-2.1.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-2.1.0-Linux-x86.sh#fd70c08719e6b5caae45b7c8402c6975a8cbc0e3e2a9c4c977554d1784f28b72" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-2.1.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-2.1.0-Linux-x86_64.sh#191fbf290747614929d0bdd576e330c944b22a67585d1c185e0d2b3a3e65e1c0" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-2.1.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-2.1.0-MacOSX-x86_64.sh#128fd4f53e0895e0d23f33e924ae32e01171c2914b044d2b157a9497108109cf" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-2.2.0000066400000000000000000000016151476513315000246360ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-2.2.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-2.2.0-Linux-x86.sh#6437d5b08a19c3501f2f5dc3ae1ae16f91adf6bed0f067ef0806a9911b1bef15" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-2.2.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-2.2.0-Linux-x86_64.sh#ca2582cb2188073b0f348ad42207211a2b85c10b244265b5b27bab04481b88a2" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-2.2.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-2.2.0-MacOSX-x86_64.sh#20570e2f3911e38a78d8f888f3ff445d6c0cf97a2fca40d6956b48d12aaef339" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-2.3.0000066400000000000000000000016151476513315000246370ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda-2.3.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda-2.3.0-Linux-x86.sh#73fdbbb3e38207ed18e5059f71676d18d48fdccbc455a1272eb45a60376cd818" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda-2.3.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda-2.3.0-Linux-x86_64.sh#7c02499e9511c127d225992cfe1cd815e88fd46cd8a5b3cdf764f3fb4d8d4576" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda-2.3.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda-2.3.0-MacOSX-x86_64.sh#c4bb59a57bf44dde80612041bbbcfd2e5cab8534842209ef456da7a46f919c33" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-2.4.0000066400000000000000000000000531476513315000246330ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/anaconda2-2.4.0" pyenv-2.5.4/plugins/python-build/share/python-build/anaconda-4.0.0000066400000000000000000000000531476513315000246310ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/anaconda2-4.0.0" pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-2.4.0000066400000000000000000000016241476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-2.4.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-2.4.0-Linux-x86.sh#478a8fdde3a6e4040a68c57d7bdd6fab1a4f7f6e813948d46dad54867014c124" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-2.4.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-2.4.0-Linux-x86_64.sh#49d19834da06b1b82b6fa85bc647d2e78fa5957d0cbae3ccd6c695a541befa6b" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-2.4.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-2.4.0-MacOSX-x86_64.sh#53c9123c9d508555100805fdb44d9845511c937e7a34f237beb19168d655e070" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-2.4.1000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-2.4.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-2.4.1-Linux-x86.sh#2388cc714567afe7697bf43b4063ff0ea2150a71b9beb17f75bc7e4879d9bf28" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-2.4.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-2.4.1-Linux-x86_64.sh#2de682c96edf8cca2852071a84ff860025fbe8c502218e1995acd5ab47e8c9ac" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-2.4.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-2.4.1-MacOSX-x86_64.sh#f4bd45a21e0dff106e36d11cfd532f2b5050d3b792cc0627ab231089341d2040" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-2.5.0000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-2.5.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-2.5.0-Linux-x86.sh#4911047df51c46661f551d6022aee21a7e5d31df051d3433b8ff3ea3c2e771bb" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-2.5.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-2.5.0-Linux-x86_64.sh#e10abf459cde4a838bd6fc5ca03023c3401b81ad470627acde5a298d56715321" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-2.5.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-2.5.0-MacOSX-x86_64.sh#e7aa3b41210ee7ccf3c12e5b5ea43190d1811b58eaeca8584ccffa468ac8a346" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-2018.12000066400000000000000000000016511476513315000250740ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-2018.12-Linux-x86.sh" "https://repo.anaconda.com/archive/Anaconda2-2018.12-Linux-x86.sh#e086c041695c0e50642aee8f4e7adad3185c6ce1d11737665653497d2edd78fd" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-2018.12-Linux-x86_64.sh" "https://repo.anaconda.com/archive/Anaconda2-2018.12-Linux-x86_64.sh#1821d4b623ed449e0acb6df3ecbabd3944cffa98f96a5234b7a102a7c0853dc6" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-2018.12-MacOSX-x86_64.sh" "https://repo.anaconda.com/archive/Anaconda2-2018.12-MacOSX-x86_64.sh#5c590b1b3cdc2eedd52edce0caabbce6665d84084d31b913e789e8c46a94859d" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-2019.03000066400000000000000000000016541476513315000251000ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda2-2019.03-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda2-2019.03-Linux-ppc64le.sh#3ab35c11b50ff26965266655d7dc76cf229336ee11b8b0c364ec1ba596ba9e07" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-2019.03-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-2019.03-Linux-x86_64.sh#cedfee5b5a3f62fcdac0a1d2d12396d0f232d2213d24d6dc893df5d8e64b8773" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-2019.03-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-2019.03-MacOSX-x86_64.sh#414917d00deaeefa38719992e6437470f54793718ef4bedcd66b0e5a30dbe4b6" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-2019.07000066400000000000000000000016541476513315000251040ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda2-2019.07-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda2-2019.07-Linux-ppc64le.sh#ee7f61dab233cdd0acb376ad55e977b16fdc03602f87a98dafb10d5fe9f5a190" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-2019.07-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-2019.07-Linux-x86_64.sh#189e16e7adf9ba4b7b7d06ecdc10ce4ad4153e5e3505b9331f3d142243e18e97" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-2019.07-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-2019.07-MacOSX-x86_64.sh#3e63919eed116826e683ed7d480d06517de79564788fbc27cb8d8879697eb654" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-2019.10000066400000000000000000000015131476513315000250700ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda2-2019.10-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda2-2019.10-Linux-ppc64le.sh#6b9809bf5d36782bfa1e35b791d983a0" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-2019.10-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda2-2019.10-Linux-x86_64.sh#69c64167b8cf3a8fc6b50d12d8476337" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-2019.10-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda2-2019.10-MacOSX-x86_64.sh#311aeb49cbe6d296f499efcd01a73f5e" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-4.0.0000066400000000000000000000016241476513315000247200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-4.0.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-4.0.0-Linux-x86.sh#41341c840cea4185ef5bd82520c1de72b42e7dc43c703fb13b032f04dc0e3573" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-4.0.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.0.0-Linux-x86_64.sh#ae312143952ca00e061a656c2080e0e4fd3532721282ba8e2978177cad71a5f0" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-4.0.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.0.0-MacOSX-x86_64.sh#aa7ba6e1a40e08e672660c00c3151f0124faa61b598d75bdd07ebe1d24873ef6" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-4.1.0000066400000000000000000000016241476513315000247210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-4.1.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-4.1.0-Linux-x86.sh#54c06cd1b11cb687db6ba3613df443c057f769cdb87693e11674d956d8e5d081" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-4.1.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.1.0-Linux-x86_64.sh#3b7e504ca0132fb555d1f10e174cae07007f1bc6898cad0f7d416a68aca01f45" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-4.1.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.1.0-MacOSX-x86_64.sh#8b2c2a32f5e0da75cf8c81c568124cc1ea701a58cd46b7816133573a7f5b7b45" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-4.1.1000066400000000000000000000016241476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-4.1.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-4.1.1-Linux-x86.sh#1ab001c7a469345a90d549ebf4afa3376f0f3a57a0df5f042cac7d773b0e0b0d" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-4.1.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.1.1-Linux-x86_64.sh#9413b1d3ca9498ba6f53913df9c43d685dd973440ff10b7fe0c45b1cbdcb582e" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-4.1.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.1.1-MacOSX-x86_64.sh#3b2fb323eb26c1c58788f63c41e164c20c417f7f24e30b8057e92ab4d6102b70" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-4.2.0000066400000000000000000000016241476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-4.2.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-4.2.0-Linux-x86.sh#618b720f309fe8da4f235415f11b6ce3db0a16d702ca67fdceeecf6bec78c32a" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-4.2.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.2.0-Linux-x86_64.sh#beee286d24fb37dd6555281bba39b3deb5804baec509a9dc5c69185098cf661a" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-4.2.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.2.0-MacOSX-x86_64.sh#a8b3ef86233635d9dcc3499dc384980762a0b42d354a318f8307029c399db452" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-4.3.0000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-4.3.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-4.3.0-Linux-x86.sh#b80d471839e8cf7b100e59308720cc13c141deb1ba903a4776c9a05f613e5078" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-4.3.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.3.0-Linux-x86_64.sh#7c52e6e99aabb24a49880130615a48e685da444c3c14eb48d6a65f3313bf745c" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-4.3.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.3.0-MacOSX-x86_64.sh#834ac0287062929ab5930661735ee617fd379bdfe79f3e0a20aebd614835b6c5" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-4.3.1000066400000000000000000000016241476513315000247240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-4.3.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-4.3.1-Linux-x86.sh#4519ac724d5120d21bb80289c5509c0d1fd9f99c6e9b9a4c6fb352d8bda4aede" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-4.3.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.3.1-Linux-x86_64.sh#e9b8f2645df6b1527ba56d61343162e0794acc3ee8dde2a6bba353719e2d878d" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-4.3.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.3.1-MacOSX-x86_64.sh#35261360f2b01793f441b29715a94052dceaef1137866b7323c76be83c5bcc1a" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-4.4.0000066400000000000000000000016241476513315000247240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-4.4.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-4.4.0-Linux-x86.sh#452aa91ac83d3b6a68b79cea3042170ec591d468d6966307ff9af18fdbce9fbf" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-4.4.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.4.0-Linux-x86_64.sh#2d30b91ed4d215b6b4a15162a3389e9057b15445a0c02da71bd7bd272e7b824e" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-4.4.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-4.4.0-MacOSX-x86_64.sh#ab95aef1110c2a385fd39a17e5f11dfbaabce25c1a5944598de164d7a2772969" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-5.0.0000066400000000000000000000016341476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-5.0.0.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-5.0.0.1-Linux-x86.sh#00fbd979c815ede0bbad48fb4ef62cda333c7ad6330184962862a3072479267b" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-5.0.0.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.0.0.1-Linux-x86_64.sh#18730808d863a5c194ab3f59dd395c1a63cbd769c9bfb1df65efe61ee62fc6d6" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-5.0.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.0.0-MacOSX-x86_64.sh#d85198c63657924fae11b6ea5961f50d81d09a1185d6f0a9a9d5bc69eb788ccc" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-5.0.1000066400000000000000000000016241476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-5.0.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-5.0.1-Linux-x86.sh#88c8d698fff16af15862daca10e94a0a46380dcffda45f8d89f5fe03f6bd2528" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-5.0.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.0.1-Linux-x86_64.sh#23c676510bc87c95184ecaeb327c0b2c88007278e0d698622e2dd8fb14d9faa4" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-5.0.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.0.1-MacOSX-x86_64.sh#e3a9a5c84cb89ff079b0781ba773a3433d490fe0cfc24042c613a5674748d87b" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-5.1.0000066400000000000000000000016241476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-5.1.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-5.1.0-Linux-x86.sh#5af0c7a09a5f3aaf3666c0b362246d342d80e782128ef043998c9ead5ad41df7" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-5.1.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.1.0-Linux-x86_64.sh#5f26ee92860d1dffdcd20910ff2cf75572c39d2892d365f4e867a611cca2af5b" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-5.1.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.1.0-MacOSX-x86_64.sh#b686e01aeadb33526d9c154a0ac6f691dfad135080df96fb44d3ae1e4b128521" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-5.2.0000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-5.2.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-5.2.0-Linux-x86.sh#402758c24767e9eb3b77312c388725a058f76e03316464797c3ca404e6eebc2c" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-5.2.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.2.0-Linux-x86_64.sh#cb0d7a08b0e2cec4372033d3269979b4e72e2353ffd1444f57cb38bc9621219f" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-5.2.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.2.0-MacOSX-x86_64.sh#d7d46e566306da5979cd5632079497fe6103b980e3a089ccf27a9f30cbee84dc" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-5.3.0000066400000000000000000000016241476513315000247240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-5.3.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-5.3.0-Linux-x86.sh#58d4229ad7097e1f3387d7f6582dcf2bbc684bffea284cd25096bd87530ba590" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-5.3.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.3.0-Linux-x86_64.sh#50eeaab24bfa2472bc6485fe8f0e612ed67e561eda1ff9fbf07b62c96443c1be" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-5.3.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.3.0-MacOSX-x86_64.sh#bea3eb7667d265c8fe678ddde8432ac1f8286224baae498d092bb068b8185e88" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda2-5.3.1000066400000000000000000000016241476513315000247250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda2-5.3.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda2-5.3.1-Linux-x86.sh#a38017dfa59141c63ec9882a15bd35e7ce63810ae0d1bcf47c79b7fb9f83e969" "anaconda" verify_py27 ;; "Linux-x86_64" ) install_script "Anaconda2-5.3.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.3.1-Linux-x86_64.sh#f0650ad2f9ca4ae3f3162d7204a32950bc794f37f322eb47b5ad9412454f998c" "anaconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Anaconda2-5.3.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda2-5.3.1-MacOSX-x86_64.sh#df81e9d5d7d4c6595609a8d353eab80102a83b49cf8c19e5c1e5ad4ac0f39328" "anaconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.0.0000066400000000000000000000016241476513315000247170ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.0.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.0.0-Linux-x86.sh#439761159d5604e182951650a478dd53caff52e9dccf17c20ae66689b7b289dd" "anaconda" verify_py34 ;; "Linux-x86_64" ) install_script "Anaconda3-2.0.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.0.0-Linux-x86_64.sh#57ce4f97e300cf94c5724f72d992e9eecef708fdaa13bc672ae9779773056540" "anaconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.0.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.0.0-MacOSX-x86_64.sh#776a1cf8a8e898b41bb6558c093632cc922698dc48486fee35d1e8eae3f604fa" "anaconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.0.1000066400000000000000000000016241476513315000247200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.0.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.0.1-Linux-x86.sh#21293fabbd3d5cfbb1afe0c9a8b39e0bc4d283cd7dbe3c84a60b335481a41ef3" "anaconda" verify_py34 ;; "Linux-x86_64" ) install_script "Anaconda3-2.0.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.0.1-Linux-x86_64.sh#3c3b834793e461f3316ad1d9a9178c67859a9d74aaf7bcade076f04134dd1e26" "anaconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.0.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.0.1-MacOSX-x86_64.sh#7a08509d4e45efcc7055a6d06d8406a773716500bd869a4e85312ff131155bd6" "anaconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.1.0000066400000000000000000000016241476513315000247200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.1.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.1.0-Linux-x86.sh#657cb599004c21e37ce693515ea33922e0084fd7c159ef1b96b57c86eed8385f" "anaconda" verify_py34 ;; "Linux-x86_64" ) install_script "Anaconda3-2.1.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.1.0-Linux-x86_64.sh#af3225ccbe8df0ffb918939e009aa57740e35058ebf9dfcf5fec794a77556c3c" "anaconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.1.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.1.0-MacOSX-x86_64.sh#efdb7e9d1e539cbed62dc3874b0de6a141f36684e6fbc05018e072b217e24077" "anaconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.2.0000066400000000000000000000016241476513315000247210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.2.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.2.0-Linux-x86.sh#223655cd256aa912dfc83ab24570e47bb3808bc3b0c6bd21b5db0fcf2750883e" "anaconda" verify_py34 ;; "Linux-x86_64" ) install_script "Anaconda3-2.2.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.2.0-Linux-x86_64.sh#4aac68743e7706adb93f042f970373a6e7e087dbf4b02ac467c94ca4ce33d2d1" "anaconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.2.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.2.0-MacOSX-x86_64.sh#81a2089ea6127717f146454e99ea0be2bd595193e4151bb05b4c15749b1d8124" "anaconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.3.0000066400000000000000000000016241476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.3.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.3.0-Linux-x86.sh#4cc10d65c303191004ada2b6d75562c8ed84e42bf9871af06440dd956077b555" "anaconda" verify_py34 ;; "Linux-x86_64" ) install_script "Anaconda3-2.3.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.3.0-Linux-x86_64.sh#3be5410b2d9db45882c7de07c554cf4f1034becc274ec9074b23fd37a5c87a6f" "anaconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.3.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.3.0-MacOSX-x86_64.sh#6a0c94a49f41f9fda0138c8e966bd7b0a8965d6648fd21ffbd645d1453848ba5" "anaconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.4.0000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.4.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.4.0-Linux-x86.sh#f6080c6493cefc603cfeb67aaf6c3c4c6b80a66788f03db48ffd3cfa52017c0a" "anaconda" verify_py34 ;; "Linux-x86_64" ) install_script "Anaconda3-2.4.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.4.0-Linux-x86_64.sh#fb4e480059e991f2fa632b5a9bcdd284c7f0677814cd719c11d524453f96a40d" "anaconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.4.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.4.0-MacOSX-x86_64.sh#f0cd785dbed0bab28dfc08a391c9de1b01633422fa317cb8365513a1ae5ae074" "anaconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.4.1000066400000000000000000000016241476513315000247240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.4.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.4.1-Linux-x86.sh#00d13413f5b8129e863dabcc2296a181c697056c5ed210739a0aa06454ab7038" "anaconda" verify_py34 ;; "Linux-x86_64" ) install_script "Anaconda3-2.4.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.4.1-Linux-x86_64.sh#0735e69199fc37135930ea2fd4fb6ad0adef215a2a7ba9fd6b0a0a4daaadb1cf" "anaconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.4.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.4.1-MacOSX-x86_64.sh#22a3267638da9b7d64210d7da90d8762da7948234c21c0010a74f2621ee0ef68" "anaconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2.5.0000066400000000000000000000016241476513315000247240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2.5.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-2.5.0-Linux-x86.sh#22ac26c8bde7c4153ea859f6f6d8aca93bbf1e213d800167ad5ea530c62959af" "anaconda" verify_py35 ;; "Linux-x86_64" ) install_script "Anaconda3-2.5.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.5.0-Linux-x86_64.sh#addadcb927f15cb0b5b6e36890563d3352a8ff6a901ea753d389047d274a29a9" "anaconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2.5.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2.5.0-MacOSX-x86_64.sh#9bb0f926927db210f8c2a8de881213d1a44c7b3d6dbcb93dfa6b99ed4bbd3e61" "anaconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2018.12000066400000000000000000000016511476513315000250750ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-2018.12-Linux-x86.sh" "https://repo.anaconda.com/archive/Anaconda3-2018.12-Linux-x86.sh#7895052814921d45ed0585d1fb19f8edd6fbd02b61639310f770e2ebe85cd975" "anaconda" verify_py37 ;; "Linux-x86_64" ) install_script "Anaconda3-2018.12-Linux-x86_64.sh" "https://repo.anaconda.com/archive/Anaconda3-2018.12-Linux-x86_64.sh#1019d0857e5865f8a6861eaf15bfe535b87e92b72ce4f531000dc672be7fce00" "anaconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2018.12-MacOSX-x86_64.sh" "https://repo.anaconda.com/archive/Anaconda3-2018.12-MacOSX-x86_64.sh#4ccd3944d994fd47e5701c341725a63e984f8c042bf4dc19c9dfc7c135e7d8e4" "anaconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2019.03000066400000000000000000000016541476513315000251010ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2019.03-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-ppc64le.sh#b4ecfca3b6d6c284a3f9370f6a5ccfac1b6be7fa75af9f6750a98fb315601ebb" "anaconda" verify_py37 ;; "Linux-x86_64" ) install_script "Anaconda3-2019.03-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh#45c851b7497cc14d5ca060064394569f724b67d9b5f98a926ed49b834a6bb73a" "anaconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2019.03-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2019.03-MacOSX-x86_64.sh#b232f0b16181f48667d2ca89c04a4ee4b3932475282b41c52acb87b4cdafcaaf" "anaconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2019.07000066400000000000000000000016541476513315000251050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2019.07-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2019.07-Linux-ppc64le.sh#e788094f7a18bfe14038accb26c8809a81291ed97f1fce29425f366aa8105548" "anaconda" verify_py37 ;; "Linux-x86_64" ) install_script "Anaconda3-2019.07-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2019.07-Linux-x86_64.sh#69581cf739365ec7fb95608eef694ba959d7d33b36eb961953f2b82cb25bdf5a" "anaconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2019.07-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2019.07-MacOSX-x86_64.sh#dcbddbab37c5b5f3873fe24d2617a4325bc7da28c0cd1d23a2edc7f0ebe08b7d" "anaconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2019.10000066400000000000000000000016541476513315000250770ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2019.10-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2019.10-Linux-ppc64le.sh#118c579f625555e1b116f0c3fd3842772e8fa0254cb2262c1c94e9eb40ba5160" "anaconda" verify_py37 ;; "Linux-x86_64" ) install_script "Anaconda3-2019.10-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2019.10-Linux-x86_64.sh#46d762284d252e51cd58a8ca6c8adc9da2eadc82c342927b2f66ed011d1d8b53" "anaconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2019.10-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2019.10-MacOSX-x86_64.sh#4f77299ff4170cda64fdfcc27ac609a37d654c158f36c9ff25048793fe8a3a49" "anaconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2020.02000066400000000000000000000016541476513315000250700ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2020.02-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2020.02-Linux-ppc64le.sh#d6d1827a38b988cbbe714d6e0357c9e251c84641a0c70cda51861ed9abb38804" "anaconda" verify_py37 ;; "Linux-x86_64" ) install_script "Anaconda3-2020.02-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2020.02-Linux-x86_64.sh#2b9f088b2022edb474915d9f69a803d6449d5fdb4c303041f60ac4aefcc208bb" "anaconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2020.02-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2020.02-MacOSX-x86_64.sh#d237e6c976eb9c58368ca156a51bd913d63a3b5fea32689342733c99d14b6f2e" "anaconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2020.07000066400000000000000000000016541476513315000250750ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2020.07-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2020.07-Linux-ppc64le.sh#0df7c3784973ab46a9ef9848aced01311d08a71d79a18d5ed79dccdae8c8dea7" "anaconda" verify_py38 ;; "Linux-x86_64" ) install_script "Anaconda3-2020.07-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2020.07-Linux-x86_64.sh#38ce717758b95b3bd0b1797cc6ccfb76f29a90c25bdfa50ee45f11e583edfdbf" "anaconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2020.07-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2020.07-MacOSX-x86_64.sh#3980c2a57fde5de2ccfdf0d7973f95ac1a3fa63351642e6735c50fc3791ef0f1" "anaconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2020.11000066400000000000000000000016541476513315000250700ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2020.11-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2020.11-Linux-ppc64le.sh#870535ada0a8ae75eeda8cd2bf7dde853ac9f4949b20e1b5641f1843a655f3b8" "anaconda" verify_py38 ;; "Linux-x86_64" ) install_script "Anaconda3-2020.11-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2020.11-Linux-x86_64.sh#cf2ff493f11eaad5d09ce2b4feaa5ea90db5174303d5b3fe030e16d29aeef7de" "anaconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2020.11-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2020.11-MacOSX-x86_64.sh#ec11e325c792a6f49dbdbe5e641991d0a29788689176d7e54da97def9532c762" "anaconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2021.04000066400000000000000000000023271476513315000250710ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2021.04-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2021.04-Linux-aarch64.sh#14f48f5d1310478b11940a3b96eec7b6" "anaconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Anaconda3-2021.04-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2021.04-Linux-ppc64le.sh#e5c8220526b95293e669734f91194acc" "anaconda" verify_py38 ;; "Linux-s390x" ) install_script "Anaconda3-2021.04-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2021.04-Linux-s390x.sh#e61fac26bf61bc5c3e3c1a93abc4d8e2" "anaconda" verify_py38 ;; "Linux-x86_64" ) install_script "Anaconda3-2021.04-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2021.04-Linux-x86_64.sh#230f2c3c343ee58073bf41bd896dd76c" "anaconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2021.04-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2021.04-MacOSX-x86_64.sh#3caed29ad5564b3567676504669342dc" "anaconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2021.05000066400000000000000000000016541476513315000250740ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2021.05-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2021.05-Linux-ppc64le.sh#097064807a9adae3f91fc4c5852cd90df2b77fc96505929bb25bf558f1eef76f" "anaconda" verify_py38 ;; "Linux-x86_64" ) install_script "Anaconda3-2021.05-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2021.05-Linux-x86_64.sh#2751ab3d678ff0277ae80f9e8a74f218cfc70fe9a9cdc7bb1c137d7e47e33d53" "anaconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2021.05-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2021.05-MacOSX-x86_64.sh#0407bee87eeecad521f1e38eb607b0a85babef4c1b47516dc5c090e152eba5d5" "anaconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2021.11000066400000000000000000000016541476513315000250710ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Anaconda3-2021.11-Linux-ppc64le" "https://repo.continuum.io/archive/Anaconda3-2021.11-Linux-ppc64le.sh#7eb6a95925ee756240818599f8dcbba7a155adfb05ef6cd5336aa3c083de65f3" "anaconda" verify_py39 ;; "Linux-x86_64" ) install_script "Anaconda3-2021.11-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-2021.11-Linux-x86_64.sh#fedf9e340039557f7b5e8a8a86affa9d299f5e9820144bd7b92ae9f7ee08ac60" "anaconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2021.11-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-2021.11-MacOSX-x86_64.sh#6a9217d1a08c599f860045d56ef64fc6c3e3112b55cc97f3d07c573d7bbcdb58" "anaconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2022.05000066400000000000000000000026351476513315000250750ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2022.05-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-aarch64.sh#7e822f5622fa306c0aa42430ba884454" "anaconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Anaconda3-2022.05-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-ppc64le.sh#166b576c7e9d438b0a80840f94b44827" "anaconda" verify_py39 ;; "Linux-s390x" ) install_script "Anaconda3-2022.05-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-s390x.sh#00ba3bf29ac51db5e0954b6f217fa468" "anaconda" verify_py39 ;; "Linux-x86_64" ) install_script "Anaconda3-2022.05-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh#a01150aff48fcb6fcd6472381652de04" "anaconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Anaconda3-2022.05-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2022.05-MacOSX-arm64.sh#24d985d2d380c51364d4793eb1840d29" "anaconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2022.05-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2022.05-MacOSX-x86_64.sh#5319de6536212892dd2da8b70d602ee1" "anaconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2022.10000066400000000000000000000026351476513315000250710ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2022.10-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-aarch64.sh#dac187c9fa6cae4ad663937f0ef79c8f" "anaconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Anaconda3-2022.10-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-ppc64le.sh#8dee159ac42f80eca8ce99ddbfd94099" "anaconda" verify_py39 ;; "Linux-s390x" ) install_script "Anaconda3-2022.10-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-s390x.sh#ef2a6accc4d0d77756130198cb481358" "anaconda" verify_py39 ;; "Linux-x86_64" ) install_script "Anaconda3-2022.10-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh#80256bd7a55509665c4179fd61516745" "anaconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Anaconda3-2022.10-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2022.10-MacOSX-arm64.sh#3a5d726f90e11270990e520905cf8466" "anaconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2022.10-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2022.10-MacOSX-x86_64.sh#83fe2cbd4b32eeb63e99c3e15d72be85" "anaconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2023.03000066400000000000000000000031431476513315000250670ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2023.03-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-aarch64.sh#613797154d9383355677f7dfee10db32b2c327cbedabddcb303598f242c79883" "anaconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Anaconda3-2023.03-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-ppc64le.sh#eafeaccca96f60ebb0aa0052d9baac8eaa2ee422358ee35b12f60f37e8a3ebb2" "anaconda" verify_py310 ;; "Linux-s390x" ) install_script "Anaconda3-2023.03-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-s390x.sh#2648337081c3ce4b760457c5f00fb768ecd7d1d0957051ef5252ab380bb78233" "anaconda" verify_py310 ;; "Linux-x86_64" ) install_script "Anaconda3-2023.03-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh#19737d5c27b23a1d8740c5cb2414bf6253184ce745d0a912bb235a212a15e075" "anaconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Anaconda3-2023.03-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-MacOSX-arm64.sh#d27ee5432438972e90548e3dfa89490c5dc38a723f4dcd53061f0bd9d53b1bd0" "anaconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2023.03-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-MacOSX-x86_64.sh#cc37b1eb85bdc2ade3f95201a746cdc63ee4fbfae48ee9d0c7a3cf319562452d" "anaconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2023.03-0000066400000000000000000000031651476513315000252300ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2023.03-0-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-0-Linux-aarch64.sh#613797154d9383355677f7dfee10db32b2c327cbedabddcb303598f242c79883" "anaconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Anaconda3-2023.03-0-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2023.03-0-Linux-ppc64le.sh#eafeaccca96f60ebb0aa0052d9baac8eaa2ee422358ee35b12f60f37e8a3ebb2" "anaconda" verify_py39 ;; "Linux-s390x" ) install_script "Anaconda3-2023.03-0-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2023.03-0-Linux-s390x.sh#2648337081c3ce4b760457c5f00fb768ecd7d1d0957051ef5252ab380bb78233" "anaconda" verify_py39 ;; "Linux-x86_64" ) install_script "Anaconda3-2023.03-0-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-0-Linux-x86_64.sh#19737d5c27b23a1d8740c5cb2414bf6253184ce745d0a912bb235a212a15e075" "anaconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Anaconda3-2023.03-0-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-0-MacOSX-arm64.sh#d27ee5432438972e90548e3dfa89490c5dc38a723f4dcd53061f0bd9d53b1bd0" "anaconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2023.03-0-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-0-MacOSX-x86_64.sh#cc37b1eb85bdc2ade3f95201a746cdc63ee4fbfae48ee9d0c7a3cf319562452d" "anaconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2023.03-1000066400000000000000000000031651476513315000252310ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2023.03-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-aarch64.sh#54e600faa2af63a25717af30ecaddf1ee428cdfebd3721a70f41462e232e8153" "anaconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Anaconda3-2023.03-1-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-ppc64le.sh#a31f2d6da83534cff7c994403cc11fa634b31fcd10eb4153d00233345ee084b2" "anaconda" verify_py39 ;; "Linux-s390x" ) install_script "Anaconda3-2023.03-1-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-s390x.sh#5af1406c6350b4ba6839c49faa32a3c90f2b9845a03c35843f118dd9dd013421" "anaconda" verify_py39 ;; "Linux-x86_64" ) install_script "Anaconda3-2023.03-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh#95102d7c732411f1458a20bdf47e4c1b0b6c8a21a2edfe4052ca370aaae57bab" "anaconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Anaconda3-2023.03-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-1-MacOSX-arm64.sh#85152324c423fedbeed2e7491cb32e597eaeb1b86ae7a61ff7597b401fd053ce" "anaconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2023.03-1-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.03-1-MacOSX-x86_64.sh#3593921c8a5516db82f0d7dd1c691f7ee7794236852e7da614e9ad6e93eeb342" "anaconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2023.07-0000066400000000000000000000031651476513315000252340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2023.07-0-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-aarch64.sh#5f4865448c1111fb80cb49abff0f9b38b2970857dba7a4627c499ba102b82af5" "anaconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Anaconda3-2023.07-0-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-ppc64le.sh#98efb73758680b84f890d818b5748d7a08e82c4b825d597f7e3c4467125da278" "anaconda" verify_py39 ;; "Linux-s390x" ) install_script "Anaconda3-2023.07-0-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-s390x.sh#f6933a8b70d346d423e089843fc151c46bdaee4e3e4e4fd0fb81ca06b8766892" "anaconda" verify_py39 ;; "Linux-x86_64" ) install_script "Anaconda3-2023.07-0-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-x86_64.sh#ac738639aba0b676a618911600d0a0e7825ee7fd10efb6b3d95cc2e570d9ee7b" "anaconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Anaconda3-2023.07-0-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-0-MacOSX-arm64.sh#23a9deb80acb145c65375bd73cbaa8793be81447278c4db7be50ef7c32a58635" "anaconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2023.07-0-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-0-MacOSX-x86_64.sh#b6ea24fe16544d5b2d5adf6c913c1fc89a6dbdef12a4caff76ff574b33d0f3cb" "anaconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2023.07-1000066400000000000000000000031731476513315000252340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2023.07-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-aarch64.sh#2ebe549375f3f5ffec9558a8a8405ebd697e69c8133b8f9c1c5cd4ff69d1cc74" "anaconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Anaconda3-2023.07-1-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-ppc64le.sh#ee149f55ebdd3f15fc1db4e9cddb5126da62e7a193fa15026c9fa009a2575d0a" "anaconda" verify_py311 ;; "Linux-s390x" ) install_script "Anaconda3-2023.07-1-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-s390x.sh#49aad1bc077334f30177443c234f3c982f1c9751fc78c4c29fb4cf736e4f61ef" "anaconda" verify_py311 ;; "Linux-x86_64" ) install_script "Anaconda3-2023.07-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh#111ce0a7f26e606863008a9519fd608b1493e483b6f487aea71d82b13fe0967e" "anaconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Anaconda3-2023.07-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-1-MacOSX-arm64.sh#322045ad100dcc380decde5812db58c617901c6a8ac46dd7818080fe3ae19f8e" "anaconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2023.07-1-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-1-MacOSX-x86_64.sh#803b2d0c5a142af3de14b410517c2c8889eaceb1b784d4c121512ebda13af6f8" "anaconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2023.07-2000066400000000000000000000031731476513315000252350ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2023.07-2-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-aarch64.sh#75967bc2113d9e336e670e1e557c9198d8b98e59fb9adb82cbe0e71ce5f7c2db" "anaconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Anaconda3-2023.07-2-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-ppc64le.sh#7a72e301fb3b8e175a96b6457fc84654dd2eb98942528d9988760779b92847e4" "anaconda" verify_py311 ;; "Linux-s390x" ) install_script "Anaconda3-2023.07-2-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-s390x.sh#121743a62210249dd9fb9d6527d545d08f6bf6d2624d51ad4b5d168cb3e860d6" "anaconda" verify_py311 ;; "Linux-x86_64" ) install_script "Anaconda3-2023.07-2-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh#589fb34fe73bc303379abbceba50f3131254e85ce4e7cd819ba4276ba29cad16" "anaconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Anaconda3-2023.07-2-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-2-MacOSX-arm64.sh#8b08ca8a94dd5fda20d134fea13fa6c55c70d20d4b5a7a1c80d311aeb0cd7a88" "anaconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2023.07-2-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.07-2-MacOSX-x86_64.sh#a2f7d0c19f60d00742154db21bfb3976d82215ff58396353f4dc729828bd2f49" "anaconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2023.09-0000066400000000000000000000031731476513315000252350ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2023.09-0-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-aarch64.sh#69ee26361c1ec974199bce5c0369e3e9a71541de7979d2b9cfa4af556d1ae0ea" "anaconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Anaconda3-2023.09-0-Linux-ppc64le" "https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-ppc64le.sh#5ea1ed9808af95eb2655fe6a4ffdb66bea66ecd1d053fc2ee69eacc7685ef665" "anaconda" verify_py311 ;; "Linux-s390x" ) install_script "Anaconda3-2023.09-0-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-s390x.sh#ee817071a2ad94e044fb48061a721bc86606b2f4906b705e4f42177eeb3ca7c5" "anaconda" verify_py311 ;; "Linux-x86_64" ) install_script "Anaconda3-2023.09-0-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh#6c8a4abb36fbb711dc055b7049a23bbfd61d356de9468b41c5140f8a11abd851" "anaconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Anaconda3-2023.09-0-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2023.09-0-MacOSX-arm64.sh#34121775d9e30a6ea12af0a462e1881670b0c175b426e06fd7b1581625ebd69b" "anaconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2023.09-0-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2023.09-0-MacOSX-x86_64.sh#0c64a2c634fe31335079d97340c277c81b3f0c9dfe862a06599570640ac897a4" "anaconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2024.02-1000066400000000000000000000026151476513315000252300ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2024.02-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-aarch64.sh#28c5bed6fba84f418516e41640c7937514aabd55e929a8f66937c737303c7bba" "anaconda" verify_py311 ;; "Linux-s390x" ) install_script "Anaconda3-2024.02-1-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-s390x.sh#3e2e8b17ea9a5caafd448f52e01435998b2e1ce102040a924d5bd6e05a1d735b" "anaconda" verify_py311 ;; "Linux-x86_64" ) install_script "Anaconda3-2024.02-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh#c536ddb7b4ba738bddbd4e581b29308cb332fa12ae3fa2cd66814bd735dff231" "anaconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Anaconda3-2024.02-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2024.02-1-MacOSX-arm64.sh#14a1c80af18c2c2e743e63cdb41228cd554a3fdb250563b6978348c80b6860f6" "anaconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2024.02-1-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2024.02-1-MacOSX-x86_64.sh#944aee9b90f7d8a2a997d0337cb37219757f22e76c10de38c7c68191c6b5b226" "anaconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2024.06-1000066400000000000000000000026151476513315000252340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2024.06-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-aarch64.sh#b4be0ad2052236882402902a31d32cd37635d3db194a42f977be0d68a8ff1a31" "anaconda" verify_py312 ;; "Linux-s390x" ) install_script "Anaconda3-2024.06-1-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-s390x.sh#1b3f4ef4147137fb1861f8251679ea96e651a7c405993c61e39441e43ee2dd11" "anaconda" verify_py312 ;; "Linux-x86_64" ) install_script "Anaconda3-2024.06-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh#539bb43d9a52d758d0fdfa1b1b049920ec6f8c6d15ee9fe4a423355fe551a8f7" "anaconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Anaconda3-2024.06-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2024.06-1-MacOSX-arm64.sh#f9e0795431910ee4ac341c0cc2a0b62e6c497440789b4117c20736db45b34204" "anaconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2024.06-1-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2024.06-1-MacOSX-x86_64.sh#9b2aa48bfc58e337176d8b5f3776692815807e1346ec12ebcc46a01801bb4ee0" "anaconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-2024.10-1000066400000000000000000000026151476513315000252270ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Anaconda3-2024.10-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-aarch64.sh#489c608e8bddd2cf29dfbdd811cf99087cd6b6a0615d41c6f9058ce340594b65" "anaconda" verify_py312 ;; "Linux-s390x" ) install_script "Anaconda3-2024.10-1-Linux-s390x" "https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-s390x.sh#e00bd5e6c275695e8050a45aa85790315f504c95243dfe3632f505284310f3c4" "anaconda" verify_py312 ;; "Linux-x86_64" ) install_script "Anaconda3-2024.10-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh#3ba0a298155c32fbfd80cbc238298560bf69a2df511783054adfc151b76d80d8" "anaconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Anaconda3-2024.10-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2024.10-1-MacOSX-arm64.sh#f64ed797ce23ae1d07ead949bfb6ff630b9fa8269ca8aef8ea2efa82172ece47" "anaconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Anaconda3-2024.10-1-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2024.10-1-MacOSX-x86_64.sh#ad3eea1cc969e9dfd4d571fc266aae06ec119f651d7cb19c0dc187b73e2bfab1" "anaconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-4.0.0000066400000000000000000000016241476513315000247210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-4.0.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-4.0.0-Linux-x86.sh#e1469fa0d24de12f33661ce3d7a06d77968be8822f366a61a0018a3850ab56b0" "anaconda" verify_py35 ;; "Linux-x86_64" ) install_script "Anaconda3-4.0.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.0.0-Linux-x86_64.sh#36a558a1109868661a5735f5f32607643f6dc05cf581fefb1c10fb8abbe22f39" "anaconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Anaconda3-4.0.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.0.0-MacOSX-x86_64.sh#704a776c0cf3fcca6e0c5a1e6b6043728229cfac813bff28f003157771824036" "anaconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-4.1.0000066400000000000000000000016241476513315000247220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-4.1.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-4.1.0-Linux-x86.sh#7764093f337a43e4962b12d01508c1a385f0f62c1ddc006b69af95ae763fc4c2" "anaconda" verify_py35 ;; "Linux-x86_64" ) install_script "Anaconda3-4.1.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.1.0-Linux-x86_64.sh#11d32cf4026603d3b327dc4299863be6b815905ff51a80329085e1bb9f96c8bd" "anaconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Anaconda3-4.1.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.1.0-MacOSX-x86_64.sh#4c45c8d75665fa5194ebe4e355d3427f5aa385f77eb2b5002c0c78d8ae7f2200" "anaconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-4.1.1000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-4.1.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-4.1.1-Linux-x86.sh#931626363f4030c7a1e8897549b1d3589dc3f429874dc3dd8a79869ecf5c895c" "anaconda" verify_py35 ;; "Linux-x86_64" ) install_script "Anaconda3-4.1.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.1.1-Linux-x86_64.sh#4f5c95feb0e7efeadd3d348dcef117d7787c799f24b0429e45017008f3534e55" "anaconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Anaconda3-4.1.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.1.1-MacOSX-x86_64.sh#7c3c06e9281c41f1213d357cb5f233fd99d6d0db6bdba8d9fd7cfad1f1a85df9" "anaconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-4.2.0000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-4.2.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86.sh#1a8320635f2f06ec9d8610e77d6d0f9cb2c5d11d20a4ff7fcda113e04b0a8a50" "anaconda" verify_py35 ;; "Linux-x86_64" ) install_script "Anaconda3-4.2.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86_64.sh#73b51715a12b6382dd4df3dd1905b531bd6792d4aa7273b2377a0436d45f0e78" "anaconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Anaconda3-4.2.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.2.0-MacOSX-x86_64.sh#95448921601e1952e01a17ba9767cd3621c154af7fc52dd6b7f57d462155a358" "anaconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-4.3.0000066400000000000000000000016241476513315000247240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-4.3.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-4.3.0-Linux-x86.sh#f7ce2eeec3e42c2ba1ee3b9fcd670478fd30f4be547c6e0a675d183c4ca9dd9b" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-4.3.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.3.0-Linux-x86_64.sh#e9169c3a5029aa820393ac92704eb9ee0701778a085ca7bdc3c57b388ac1beb6" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-4.3.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.3.0-MacOSX-x86_64.sh#c53059b810c5e7a9a5ef9c46a7ed76675dfc7183f4ea867b4d81449cbd5a093d" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-4.3.1000066400000000000000000000016241476513315000247250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-4.3.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-4.3.1-Linux-x86.sh#7b70bdba282a18ddbdc167afe8131f7532076cb1df8d3fbbd13e79ca3afaa2c1" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-4.3.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.3.1-Linux-x86_64.sh#4447b93d2c779201e5fb50cfc45de0ec96c3804e7ad0fe201ab6b99f73e90302" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-4.3.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.3.1-MacOSX-x86_64.sh#a42267203e207cb5e0f539e0d879ead12e436311825c7114d0edd880d001b539" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-4.4.0000066400000000000000000000016241476513315000247250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-4.4.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86.sh#b0e492206d43067314b25963bc7d1f012096ca0323b7629f4ebcd071b03905b5" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-4.4.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh#3301b37e402f3ff3df216fe0458f1e6a4ccbb7e67b4d626eae9651de5ea3ab63" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-4.4.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-4.4.0-MacOSX-x86_64.sh#10fe58f09ae524df2548d17b8bb1e75db17da597a6ec10d695ce01387a2d7422" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-5.0.0000066400000000000000000000016341476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-5.0.0.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-5.0.0.1-Linux-x86.sh#407576899d3aa546bc3c2c4a13cbc18ab5bab372c3388ea80087f29b32184bee" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-5.0.0.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.0.0.1-Linux-x86_64.sh#092c92427f44687d789a41922ce8426fbdc3c529cc9d6d4ee6de5b62954b93b2" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-5.0.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.0.0-MacOSX-x86_64.sh#23df1e3a38a6b4aaa0ab559d0c1e51be76eca5d75cb595d473d223c8d17e762d" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-5.0.1000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-5.0.1-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86.sh#991a4b656fcb0236864fbb27ff03bb7f3d98579205829b76b66f65cfa6734240" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-5.0.1-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh#55e4db1919f49c92d5abbf27a4be5986ae157f074bf9f8238963cd4582a4068a" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-5.0.1-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.0.1-MacOSX-x86_64.sh#f438a0af923bc1edc7bca53f496c59a668d1a08b48c768f443ad7f5ea2b8b3f8" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-5.1.0000066400000000000000000000016241476513315000247230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-5.1.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86.sh#0e940272517d8f8a6f26316a19e4be2bdaea8477a3a32cc2ecee7b48fd0fae84" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-5.1.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh#7e6785caad25e33930bc03fac4994a434a21bc8401817b7efa28f53619fa9c29" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-5.1.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.1.0-MacOSX-x86_64.sh#be705b3c3a0ca29ee32ce7658890bb5edb32a9eadedc09dec3d7e3cfbfd23cb7" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-5.2.0000066400000000000000000000016241476513315000247240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-5.2.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-5.2.0-Linux-x86.sh#f3527d085d06f35b6aeb96be2a9253ff9ec9ced3dc913c8e27e086329f3db588" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-5.2.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.2.0-Linux-x86_64.sh#09f53738b0cd3bb96f5b1bac488e5528df9906be2480fe61df40e0e0d19e3d48" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-5.2.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.2.0-MacOSX-x86_64.sh#c8089121dc89ffe8f9a0c01205bab75a112821a13d413152d6690f5eef094afa" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-5.3.0000066400000000000000000000016241476513315000247250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-5.3.0-Linux-x86" "https://repo.continuum.io/archive/Anaconda3-5.3.0-Linux-x86.sh#c15ffac2ae35179a15dc5872e5bb405b4027a0fd76c6817e9cee39545bc5ca0b" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-5.3.0-Linux-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.3.0-Linux-x86_64.sh#cfbf5fe70dd1b797ec677e63c61f8efc92dad930fd1c94d60390bb07fdc09959" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-5.3.0-MacOSX-x86_64" "https://repo.continuum.io/archive/Anaconda3-5.3.0-MacOSX-x86_64.sh#bc073b6e6d3b2ef29d01a2caf1de7c206c95968231ef0492d958eae1a314b4e9" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/anaconda3-5.3.1000066400000000000000000000016351476513315000247300ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Anaconda3-5.3.1-Linux-x86.sh" "https://repo.continuum.io/archive/Anaconda3-5.3.1-Linux-x86.sh#5dab8b2c95595df7fa55b88643f8372135c14faabd9ec05a34021551bb0999a1" "anaconda" verify_py36 ;; "Linux-x86_64" ) install_script "Anaconda3-5.3.1-Linux-x86_64.sh" "https://repo.continuum.io/archive/Anaconda3-5.3.1-Linux-x86_64.sh#d4c4256a8f46173b675dd6a62d12f566ed3487f932bab6bb7058f06c124bcc27" "anaconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Anaconda3-5.3.1-MacOSX-x86_64.sh" "https://repo.continuum.io/archive/Anaconda3-5.3.1-MacOSX-x86_64.sh#23c373abce2463d4df495f5a1c7e8b0faec6eda09542d98f41ed65a0fa0dbde0" "anaconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Anaconda3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/cinder-3.10-dev000066400000000000000000000027271476513315000250410ustar00rootroot00000000000000if [ "$(expr substr "$(uname -s)" 1 5)" != "Linux" ]; then { echo colorize 1 "ERROR" echo ": Cinder currently only supports Linux." echo return 1 } >&2 fi if [[ $(${CC:-gcc} -dumpversion 2>/dev/null) != 10 ]] && (command -v "gcc-10" >/dev/null) && (command -v "g++-10" >/dev/null); then echo "python-build: setting the compiler to GCC 10" export CC="gcc-10" export CXX="g++-10" fi if [[ $(awk -F. '{print $1}' <<< "$(${CC:-gcc} -dumpversion)") -lt 10 ]]; then { echo colorize 1 "ERROR" echo ": Cinder requires at least GCC 10." echo return 1 } >&2 fi require_distro Fedora 32 &> /dev/null || { echo colorize 1 "WARNING" echo ": Cinder officially only supports Facebook's Docker" echo "images which are based on Fedora 32. It may fail to build" echo "on a system with a different GCC and/or Glibc version." echo } >&2 prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Cinder-3.10-dev" "https://github.com/facebookincubator/cinder" "cinder/3.10" standard verify_py310 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/cinder-3.8-dev000066400000000000000000000027241476513315000247650ustar00rootroot00000000000000if [ "$(expr substr "$(uname -s)" 1 5)" != "Linux" ]; then { echo colorize 1 "ERROR" echo ": Cinder currently only supports Linux." echo return 1 } >&2 fi if [[ $(${CC:-gcc} -dumpversion 2>/dev/null) != 10 ]] && (command -v "gcc-10" >/dev/null) && (command -v "g++-10" >/dev/null); then echo "python-build: setting the compiler to GCC 10" export CC="gcc-10" export CXX="g++-10" fi if [[ $(awk -F. '{print $1}' <<< "$(${CC:-gcc} -dumpversion)") -lt 10 ]]; then { echo colorize 1 "ERROR" echo ": Cinder requires at least GCC 10." echo return 1 } >&2 fi require_distro Fedora 32 &> /dev/null || { echo colorize 1 "WARNING" echo ": Cinder officially only supports Facebook's Docker" echo "images which are based on Fedora 32. It may fail to build" echo "on a system with a different GCC and/or Glibc version." echo } >&2 prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Cinder-3.8-dev" "https://github.com/facebookincubator/cinder" "cinder/3.8" standard verify_py38 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-22.3.0000066400000000000000000000041401476513315000246100ustar00rootroot00000000000000# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='22.3.0' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="9853036fcde0b115026d8802a4f671b62d7a17fccb269c1e8b5fbf80cef10e23" ;; "linux-aarch64" ) checksum="c48c5d9ff5699046c0629181a40a3116172e1c508c851f0993dcca45d86349c0" ;; "macos-amd64" ) checksum="cc8454f460b5730e778d5b8f79385cf92c39321fbf27d44bb9ca90584670f921" ;; "macos-aarch64" ) checksum="9a388834f28fbb86ff9588d9a150a4d26e9bec28be06c3d60ebe20079f855e41" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpy-${VERSION}${BUILD}" "${urlprefix}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-23.0.0000066400000000000000000000041471476513315000246150ustar00rootroot00000000000000# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='23.0.0' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="25e4fa7c1d45db6dcac5bfa4d1a0aa9ef5581623dc5903ce98d246c5d394639c" ;; "linux-aarch64" ) checksum="e2a00b2b6485282b4a04aa382e30d696e00d20eb2fe1736debbe2d9df2a8737a" ;; "macos-amd64" ) checksum="1578902976e6aaf45b9758931f0bddbb29c5c9bdca62c67591d6e153340c2a4f" ;; "macos-aarch64" ) checksum="cc40e1d47610c5f4a825a1a7c3ffe8b163c71b5d042d16aebd1a65451d4309a5" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}" fi install_package "graalpy-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-23.1.0000066400000000000000000000050341476513315000246120ustar00rootroot00000000000000# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='23.1.0' BUILD='' colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo colorize 1 "The GraalVM Community Edition variant of GraalPy is also available, under the name graalpy-community-23.1.0" && echo graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="afbb81f034e77aecf4717fe14f2a7403aa1b82f0abf53a2e55e46bd49efe8c39" ;; "linux-aarch64" ) checksum="be1e21ea245ddbdb9c266e670d6f1e76a55c693f98cee44aa74a76b249e53f96" ;; "macos-amd64" ) checksum="6445537c597567ccf5ae37d296ecd988a92149fb4a1fb57088811e75f19c6da4" ;; "macos-aarch64" ) checksum="f1b9b22cd8c0afb7eabd59fad554c23f452fbafcdffccf8a22eca037199d62ae" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then { echo colorize 1 "ERROR" echo "Oracle GraalPy currently doesn't provide snapshot builds. Use graalpy-community if you need snapshots." echo } >&2 exit 1 fi url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" install_package "graalpy-${VERSION}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-23.1.2000066400000000000000000000050351476513315000246150ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='23.1.2' BUILD='' colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo colorize 1 "The GraalVM Community Edition variant of GraalPy is also available, under the name graalpy-community-23.1.2" && echo graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="ea9c61845968dd396f57bbb6bb6ccf1608b198dffd99c6fe2e5c03d836e40a74" ;; "linux-aarch64" ) checksum="715cc67f551a009a04814e7201bc33e629ba6c329e7d32c265a3ebf8619f4a66" ;; "macos-amd64" ) checksum="e9e5977077ef4986fce0f8416b81c1c468add9f3f123edfb223b54a5d34a95c6" ;; "macos-aarch64" ) checksum="46c859233c7c5ce44fc44e97f17a1685dc3f8516785c2e419f8661ed7b5185b1" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then { echo colorize 1 "ERROR" echo "Oracle GraalPy currently doesn't provide snapshot builds. Use graalpy-community if you need snapshots." echo } >&2 exit 1 fi url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" install_package "graalpy-${VERSION}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-24.0.0000066400000000000000000000050411476513315000246100ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.0.0' BUILD='' colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo colorize 1 "The GraalVM Community Edition variant of GraalPy is also available, under the name graalpy-community-${VERSION}" && echo graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="f0d194dea76da26093b9b01b78c0fcabbd8714640b08fcd2a9b05b9ded3e2039" ;; "linux-aarch64" ) checksum="5bf0fd9d115c3ecd6bfb89a2fac7b9ba9343841c3928d14eac471b9b1ad1266e" ;; "macos-amd64" ) checksum="1e2e51ea618bd6f6fe9a0248486b5962f6258193249c0657dc0480fd2b92d772" ;; "macos-aarch64" ) checksum="d5597711839a41506beb129f9d8015f8997a1db1e0c79972636834d955d4ef61" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then { echo colorize 1 "ERROR" echo "Oracle GraalPy currently doesn't provide snapshot builds. Use graalpy-community if you need snapshots." echo } >&2 exit 1 fi url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" install_package "graalpy-${VERSION}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-24.1.0000066400000000000000000000050411476513315000246110ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.1.0' BUILD='' colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo colorize 1 "The GraalVM Community Edition variant of GraalPy is also available, under the name graalpy-community-${VERSION}" && echo graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="95819091eee7c21566601c22536768204b7c75e9b59e522a10961612a1dd6298" ;; "linux-aarch64" ) checksum="838662e07ce745708d58a50e5e030f9af608306c4595adb3a8e7ac1f6e7d8b6a" ;; "macos-amd64" ) checksum="4bee92fdf97ef9e2f9a8dfc56030b9f40860019bf57c9cd097a4b86baaf31d94" ;; "macos-aarch64" ) checksum="520888b407e47c8bbc91b0830d540a1eb1a6919ad0ce5be3e657e54f77ee0fba" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then { echo colorize 1 "ERROR" echo "Oracle GraalPy currently doesn't provide snapshot builds. Use graalpy-community if you need snapshots." echo } >&2 exit 1 fi url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" install_package "graalpy-${VERSION}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-24.1.1000066400000000000000000000050411476513315000246120ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.1.1' BUILD='' colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo colorize 1 "The GraalVM Community Edition variant of GraalPy is also available, under the name graalpy-community-${VERSION}" && echo graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="b7ec8b6ead8f0ad19d212617f75c305b38d419bfd3ac6c9e82e9339282699ab9" ;; "linux-aarch64" ) checksum="cb97bbef83372f00c7ea5f351bcb3c1ad36255ebd7d3cff9267d604ad183c28a" ;; "macos-amd64" ) checksum="3f4583cf8438237a2061460d4df9025d04eaaae0beadb3626ccdcebf9cfe725a" ;; "macos-aarch64" ) checksum="23d2397d90ebbd51747541f029ed80b7740fe36b23a45d4616ddad9b60f2c6cb" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then { echo colorize 1 "ERROR" echo "Oracle GraalPy currently doesn't provide snapshot builds. Use graalpy-community if you need snapshots." echo } >&2 exit 1 fi url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" install_package "graalpy-${VERSION}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-24.1.2000066400000000000000000000050411476513315000246130ustar00rootroot00000000000000# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.1.2' BUILD='' colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo colorize 1 "The GraalVM Community Edition variant of GraalPy is also available, under the name graalpy-community-${VERSION}" && echo graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="859292dddb7deb47280e445afa61aa58326900e15fbf0d3fa8044f1a1ce23594" ;; "linux-aarch64" ) checksum="5ad46ba7ef58f2b3871cb99aa244ef9bf6e6e4206770e027603e3c323ba3e67b" ;; "macos-amd64" ) checksum="e2eed01618ae788b24e01ab423ff27382e15faa1ecb7c8eb7e9809b022c74fe8" ;; "macos-aarch64" ) checksum="daa1fa51129f1bc4e5f0f2251ce7d0e039019eb9569579bb41aaa905407fa6a3" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then { echo colorize 1 "ERROR" echo "Oracle GraalPy currently doesn't provide snapshot builds. Use graalpy-community if you need snapshots." echo } >&2 exit 1 fi url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" install_package "graalpy-${VERSION}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-community-23.1.0000066400000000000000000000042261476513315000266360ustar00rootroot00000000000000# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='23.1.0' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="720334d90d52b5337db018ad6582953e9383c27188f08810250c2fe14a11db5a" ;; "linux-aarch64" ) checksum="c7dc4f94413e667070f7d46f57af04c4db53383e721be9637b58cb030dfa1f58" ;; "macos-amd64" ) checksum="13583382ba716231edce1b71d53e9efba776fef003ef2f515bda9c00a831779a" ;; "macos-aarch64" ) checksum="5bc39af6938c507ec169b02a34237b6f4b286982e5be04b3109c171becc1949d" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then url="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-dev-${BUILD}/graalpy-community-dev-${graalpy_arch}.tar.gz" else url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" fi install_package "graalpy-community-${VERSION}${BUILD}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-community-23.1.2000066400000000000000000000042261476513315000266400ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='23.1.2' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="27577bded9dd742c7b9b8e5315cec286657edb5842968cc966aa451ddc8729d9" ;; "linux-aarch64" ) checksum="c993484132b9e196d351570ba6a74632eb8695767e383ca86ba1092c4484ff7a" ;; "macos-amd64" ) checksum="e74d586f114b33e55e1a6849672e1a0ea5bd372d8f4a501b532d221c61915d3c" ;; "macos-aarch64" ) checksum="d269f5fdb3e8ae323554de2876ef25d43aaa86867edc41f2b76ea53a27ee3662" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then url="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-dev-${BUILD}/graalpy-community-dev-${graalpy_arch}.tar.gz" else url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" fi install_package "graalpy-community-${VERSION}${BUILD}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-community-24.0.0000066400000000000000000000042261476513315000266360ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.0.0' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="a77892d8d6b897b70b4226aa1b6abc8c41e824ae98d727429542b0157ae6f8d9" ;; "linux-aarch64" ) checksum="201e2bad0ed59efc89654a77ae1634302111b3ffb9af53f9ee63ab43b735e5c3" ;; "macos-amd64" ) checksum="7c816beb8c8b46ee0de60861f739c274efbc744304aa9034bffbd0319f13701d" ;; "macos-aarch64" ) checksum="7f5540a28cf5c2c628cd003c3eb86bfa0a07175dae7d9b6528b40c44c4927402" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then url="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-dev-${BUILD}/graalpy-community-dev-${graalpy_arch}.tar.gz" else url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" fi install_package "graalpy-community-${VERSION}${BUILD}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-community-24.1.0000066400000000000000000000042261476513315000266370ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.1.0' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="89c7f8bd8f91639adc815949458d56ea9bffaa286249360d244fc6a6885c220a" ;; "linux-aarch64" ) checksum="8f52958486606328a9692a0c0553f2cd3afd1c86c9df97ae47a703afc2e804a8" ;; "macos-amd64" ) checksum="1b01102ca9cbfe8164e935ca834226db76e8ca9359a5585ba686430593cbc02d" ;; "macos-aarch64" ) checksum="cd0d6064bbb4f92d50d2b85ed46f6a9c22a5ae775f15cc264508da8f026eecaa" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then url="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-dev-${BUILD}/graalpy-community-dev-${graalpy_arch}.tar.gz" else url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" fi install_package "graalpy-community-${VERSION}${BUILD}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-community-24.1.1000066400000000000000000000042261476513315000266400ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.1.1' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="42a6b563271174161a1abca4b045b0602d8e27c12204f3cadd31265fd3ff6d19" ;; "linux-aarch64" ) checksum="a513ea3036a48a6cee8cfa666bff7b5e6b1a1b6cf623400109fbf856476e9bd3" ;; "macos-amd64" ) checksum="7f5591074dbd701faa6dec6ea10391bc2d8af736fe8370c5675a11842959edd7" ;; "macos-aarch64" ) checksum="53f6161d0f9871efaf1f62f2c1894152da0bb2b504a95ebad6f35b19de994f77" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then url="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-dev-${BUILD}/graalpy-community-dev-${graalpy_arch}.tar.gz" else url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" fi install_package "graalpy-community-${VERSION}${BUILD}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-community-24.1.2000066400000000000000000000042261476513315000266410ustar00rootroot00000000000000# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='24.1.2' BUILD='' graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) checksum="d1bf37fb9edf8065e6dab4f351d2006acaff2b2e692cfaea07199380c892ee0c" ;; "linux-aarch64" ) checksum="2568d5f7f3b9d8827de33eb864783c1fed4bc3e729a6fd14e072311c5105346f" ;; "macos-amd64" ) checksum="29f9f19604bf2f7d255add89fa5639d6aab6877799414cb820398fed8ef3d5bb" ;; "macos-aarch64" ) checksum="dcc4fa73cdb866e88c51219ddf9b9689b62633fc8304649372fe8ada4e03957d" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then url="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-dev-${BUILD}/graalpy-community-dev-${graalpy_arch}.tar.gz" else url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}" fi install_package "graalpy-community-${VERSION}${BUILD}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpy-dev000066400000000000000000000043231476513315000246470ustar00rootroot00000000000000# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. JSON_URL=https://raw.githubusercontent.com/graalvm/graal-languages-ea-builds/main/graalpy/versions/latest-ea.json colorize 1 "GraalPy 23.1 and later installed by python-build use the faster Oracle GraalVM distribution" && echo colorize 1 "Oracle GraalVM uses the GFTC license, which is free for development and production use, see https://medium.com/graalvm/161527df3d76" && echo colorize 1 "Release builds of the GraalVM Community Edition variant of GraalPy are available, with names starting with graalpy-community-" && echo json=`http get "$JSON_URL"` version=`expr "$json" : '{.*"version":[^"]*"\([^"]*\)'` base_url=`expr "$json" : '{.*"download_base_url":[^"]*"\([^"]*\)'` graalpy_arch="$(graalpy_architecture 2>/dev/null || true)" case "$graalpy_arch" in "linux-amd64" ) ;; "linux-aarch64" ) ;; "macos-amd64" ) ;; "macos-aarch64" ) ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPy is available for $(uname -sm)." echo } >&2 exit 1 ;; esac url="${base_url}/graalpy-${version}-${graalpy_arch}.tar.gz" install_package "graalpy-${version}" "${url}" "copy" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-20.1.0000066400000000000000000000037321476513315000255030ustar00rootroot00000000000000# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='20.1.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="8df5d3797876d63e5b0fed6460b1943d53160fa3c3a589d0c1ce68c23646dd93" ;; "osx64" ) graalpython_arch="macos" checksum="7fe5aca69a64fd411d9b424b68118f2225daf96509ee1e0fcc4252a19887d9c7" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-20.2.0000066400000000000000000000037321476513315000255040ustar00rootroot00000000000000# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='20.2.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="9ba0447523a6cf6f8b74fef2b918672762b7d7f67be9f5be8ab6b479f173cfd7" ;; "osx64" ) graalpython_arch="macos" checksum="e06f8e6f5766483d5613eca6a4703cec8a93236443c7c6f2866b31307e62bbe6" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-20.3.0000066400000000000000000000037321476513315000255050ustar00rootroot00000000000000# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='20.3.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="121508c64c2f18e9a57294d38a4c090c7a9417087f8549e120d0050906e2c82f" ;; "osx64" ) graalpython_arch="macos" checksum="1a80bf3fde2dc2d0fdc92605176c281835d912c26847346150b3be82d2a250e0" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-21.0.0000066400000000000000000000037321476513315000255030ustar00rootroot00000000000000# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='21.0.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="df2317bf57461e6a59840921f05a019a3bdf5e59f867b44ab36804d536224d7f" ;; "osx64" ) graalpython_arch="macos" checksum="3d4c02286d682228843cca2f4a0faeed7a0a64a9558eea5ceb7992a680bd61e6" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-21.1.0000066400000000000000000000037321476513315000255040ustar00rootroot00000000000000# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='21.1.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="fb48d041e4113cf8a0d0535402eaa64af112b1999839ebee49f431963af3ece1" ;; "osx64" ) graalpython_arch="macos" checksum="3efb2257b21ce7fdab5d3986f571ad531a5c1c73d23468431a5c8440ee49c2f6" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-21.2.0000066400000000000000000000037321476513315000255050ustar00rootroot00000000000000# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='21.2.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="17399e168743ae8b7b3faa9870ce24213fb514a04a8966bd4bd10844baf039da" ;; "osx64" ) graalpython_arch="macos" checksum="b365278cba49d6e2e0c018d1f5a1e81fa0304be5fe6c086532630443c605b8c0" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-21.3.0000066400000000000000000000037321476513315000255060ustar00rootroot00000000000000# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='21.3.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="b17bbc9753fb04f03290660952acfd212020676603970323780f190509b061b9" ;; "osx64" ) graalpython_arch="macos" checksum="feecbd2567a43aeaeb5ca6a7385ef3d5bd2c94e563b64afee7dcce0c8f87a1c9" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-22.0.0000066400000000000000000000037341476513315000255060ustar00rootroot00000000000000# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='22.0.0.2' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="e80c6051a609e7e1403b96992951814e967cf6deb9ca2507e691769d01970d55" ;; "osx64" ) graalpython_arch="macos" checksum="5b0476321162557a7b43e6cdadfc187280bc40a3452d327a4ae8d624afaa5336" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-22.1.0000066400000000000000000000037321476513315000255050ustar00rootroot00000000000000# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='22.1.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="06862993573b64bd64c802aace9135192a4ba28a15d8260c42c5de632ad616bc" ;; "osx64" ) graalpython_arch="macos" checksum="88b22ea4a5cb8345b680d15cc385dff7a8ab858fdf0e182c79c6c3b74755de6c" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/graalpython-22.2.0000066400000000000000000000037321476513315000255060ustar00rootroot00000000000000# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is furnished to do # so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. VERSION='22.2.0' BUILD='' case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) graalpython_arch="linux" checksum="75a7e5d7afc158169fd87df9c69c3801aa0293dd727ba09facad6b01e1b6dee5" ;; "osx64" ) graalpython_arch="macos" checksum="575d78ae2be8d4ce4adbc9c61229b6f1271f557f0f3ec410a494de7b29986dd7" ;; * ) { echo colorize 1 "ERROR" echo ": No binary distribution of GraalPython is available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac if [ -n "${BUILD}" ]; then urlprefix="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-${BUILD}" else urlprefix="https://github.com/oracle/graalpython/releases/download/vm-${VERSION}" fi install_package "graalpython-${VERSION}${BUILD}" "${urlprefix}/graalpython-${VERSION}-${graalpython_arch}-amd64.tar.gz#${checksum}" "graalpython" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/ironpython-2.7.4000066400000000000000000000004121476513315000253060ustar00rootroot00000000000000install_zip "IronPython-2.7.4" "https://github.com/IronLanguages/main/releases/download/ipy-2.7.4/IronPython-2.7.4.zip#23358ebfd728adcc0b63ef44cb7db578d662d904b6f676c5292595286892796c" ironpython # FIXME: have not confirmed to install setuptools into IronPython yet pyenv-2.5.4/plugins/python-build/share/python-build/ironpython-2.7.5000066400000000000000000000004121476513315000253070ustar00rootroot00000000000000install_zip "IronPython-2.7.5" "https://github.com/IronLanguages/main/releases/download/ipy-2.7.5/IronPython-2.7.5.zip#d2651084a61a43379ce6c031f4f29c5e01ba96d1ff89a5282376dd4b84439b5b" ironpython # FIXME: have not confirmed to install setuptools into IronPython yet pyenv-2.5.4/plugins/python-build/share/python-build/ironpython-2.7.6.3000066400000000000000000000004201476513315000254500ustar00rootroot00000000000000install_zip "IronPython-2.7.6.3" "https://github.com/IronLanguages/main/releases/download/ipy-2.7.6.3/IronPython-2.7.6.3.zip#dfd00598f4752104f90c248c1662eafbebf7ead24e17531d852ffc32a5a8075b" ironpython # FIXME: have not confirmed to install setuptools into IronPython yet pyenv-2.5.4/plugins/python-build/share/python-build/ironpython-2.7.7000066400000000000000000000003231476513315000253120ustar00rootroot00000000000000install_zip "IronPython-2.7.7" "https://github.com/IronLanguages/main/releases/download/ipy-2.7.7/IronPython-2.7.7-win.zip#657c134ff6d6f0ed86557d9455dcdfeac11823944f7aa36d72a41cc5444c4a89" ironpython ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/ironpython-dev000066400000000000000000000002601476513315000254150ustar00rootroot00000000000000install_git "ironpython-dev" "https://github.com/IronLanguages/ironpython2.git" master ironpython_builder # FIXME: have not confirmed to install setuptools into IronPython yet pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.5-dev000066400000000000000000000010611476513315000250210ustar00rootroot00000000000000require_java install_hg "jython-2.5-dev" "https://hg.python.org/jython" "2.5" jython_builder install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python # pip (>= 1.3) does not work properly since it uses HTTPS for downloads # * https://github.com/pyenv/pyenv/issues/15 install_package "pip-1.2.1" "https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz#12a9302acfca62cdc7bc5d83386cac3e0581db61ac39acdb3a4e766a16b88eb1" python pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.5.0000066400000000000000000000015461476513315000244130ustar00rootroot00000000000000require_java install_jar "jython-2.5.0" "https://downloads.sourceforge.net/project/jython/jython/2.5.0/jython_installer-2.5.0.jar#e3d8209ef9eb143df8101a5da6b3482cf457084e3a6247031fd510d71c13ab98" jython # distribute (>= 0.33) does not support Jython prior to 2.5.2 # * https://github.com/pyenv/pyenv/issues/15 # * https://bitbucket.org/tarek/distribute/issue/367/importing-setuptoolssandbox-fails-on install_package "distribute-0.6.32" "https://pypi.python.org/packages/source/d/distribute/distribute-0.6.32.tar.gz#8970cd1e148b5d1fea9430584aea66c45ea22d80e0933393ec49ebc388f718df" python # pip (>= 1.3) does not work properly since it uses HTTPS for downloads # * https://github.com/pyenv/pyenv/issues/15 install_package "pip-1.2.1" "https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz#12a9302acfca62cdc7bc5d83386cac3e0581db61ac39acdb3a4e766a16b88eb1" python pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.5.1000066400000000000000000000015461476513315000244140ustar00rootroot00000000000000require_java install_jar "jython-2.5.1" "https://downloads.sourceforge.net/project/jython/jython/2.5.1/jython_installer-2.5.1.jar#229dfd1ed9728aa7e00c71f111d08fa777a4edcd03383779c74216765098f9c5" jython # distribute (>= 0.33) does not support Jython prior to 2.5.2 # * https://github.com/pyenv/pyenv/issues/15 # * https://bitbucket.org/tarek/distribute/issue/367/importing-setuptoolssandbox-fails-on install_package "distribute-0.6.32" "https://pypi.python.org/packages/source/d/distribute/distribute-0.6.32.tar.gz#8970cd1e148b5d1fea9430584aea66c45ea22d80e0933393ec49ebc388f718df" python # pip (>= 1.3) does not work properly since it uses HTTPS for downloads # * https://github.com/pyenv/pyenv/issues/15 install_package "pip-1.2.1" "https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz#12a9302acfca62cdc7bc5d83386cac3e0581db61ac39acdb3a4e766a16b88eb1" python pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.5.2000066400000000000000000000012371476513315000244120ustar00rootroot00000000000000require_java install_jar "jython-2.5.2" "https://downloads.sourceforge.net/project/jython/jython/2.5.2/jython_installer-2.5.2.jar#1b7168b961e31ddd89012a36cde611c340dadfd8b60b81c4248b026730ee2f29" jython install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python # pip (>= 1.3) does not work properly since it uses HTTPS for downloads # * https://github.com/pyenv/pyenv/issues/15 install_package "pip-1.2.1" "https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz#12a9302acfca62cdc7bc5d83386cac3e0581db61ac39acdb3a4e766a16b88eb1" python pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.5.3000066400000000000000000000012631476513315000244120ustar00rootroot00000000000000require_java install_jar "jython-2.5.3" "https://search.maven.org/remotecontent?filepath=org/python/jython-installer/2.5.3/jython-installer-2.5.3.jar#05405966cdfa57abc8e705dd6aab92b8240097ce709fb916c8a0dbcaa491f99e" jython install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python # pip (>= 1.3) does not work properly since it uses HTTPS for downloads # * https://github.com/pyenv/pyenv/issues/15 install_package "pip-1.2.1" "https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz#12a9302acfca62cdc7bc5d83386cac3e0581db61ac39acdb3a4e766a16b88eb1" python pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.5.4-rc1000066400000000000000000000012771476513315000251030ustar00rootroot00000000000000require_java install_jar "jython-2.5.4-rc1" "https://search.maven.org/remotecontent?filepath=org/python/jython-installer/2.5.4-rc1/jython-installer-2.5.4-rc1.jar#2fa6821ef506804ca77f87631a21878c11d743f8a7fa9ed26e55dfd7696204d1" jython install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python # pip (>= 1.3) does not work properly since it uses HTTPS for downloads # * https://github.com/pyenv/pyenv/issues/15 install_package "pip-1.2.1" "https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz#12a9302acfca62cdc7bc5d83386cac3e0581db61ac39acdb3a4e766a16b88eb1" python pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.7.0000066400000000000000000000011341476513315000244060ustar00rootroot00000000000000require_java unrequire_python27 install_jar "jython-2.7.0" "https://repo1.maven.org/maven2/org/python/jython-installer/2.7.0/jython-installer-2.7.0.jar#b44352ece72382268a60e2848741c96609a91d796bb9a9c6ebeff62f0c12c9cf" jython case "$(pypy_architecture 2>/dev/null || true)" in "osx64"|"win32" ) # Jython does not seem to work properly on OSX/windows unless JAVA_HOME is set if [ -z "${JAVA_HOME+defined}" ]; then colorize 1 "WARNING: " echo "Please ensure that your JAVA_HOME environment variable is set correctly!" echo "See http://bugs.jython.org/issue2346 for details." fi ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.7.1000066400000000000000000000011341476513315000244070ustar00rootroot00000000000000require_java unrequire_python27 install_jar "jython-2.7.1" "https://repo1.maven.org/maven2/org/python/jython-installer/2.7.1/jython-installer-2.7.1.jar#6e58dad0b8565b95c6fb14b4bfbf570523d1c5290244cfb33822789fa53b1d25" jython case "$(pypy_architecture 2>/dev/null || true)" in "osx64"|"win32" ) # Jython does not seem to work properly on OSX/windows unless JAVA_HOME is set if [ -z "${JAVA_HOME+defined}" ]; then colorize 1 "WARNING: " echo "Please ensure that your JAVA_HOME environment variable is set correctly!" echo "See http://bugs.jython.org/issue2346 for details." fi ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.7.2000066400000000000000000000011341476513315000244100ustar00rootroot00000000000000require_java unrequire_python27 install_jar "jython-2.7.2" "https://repo1.maven.org/maven2/org/python/jython-installer/2.7.2/jython-installer-2.7.2.jar#36e40609567ce020a1de0aaffe45e0b68571c278c14116f52e58cc652fb71552" jython case "$(pypy_architecture 2>/dev/null || true)" in "osx64"|"win32" ) # Jython does not seem to work properly on OSX/windows unless JAVA_HOME is set if [ -z "${JAVA_HOME+defined}" ]; then colorize 1 "WARNING: " echo "Please ensure that your JAVA_HOME environment variable is set correctly!" echo "See http://bugs.jython.org/issue2346 for details." fi ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/jython-2.7.3000066400000000000000000000011341476513315000244110ustar00rootroot00000000000000require_java unrequire_python27 install_jar "jython-2.7.3" "https://repo1.maven.org/maven2/org/python/jython-installer/2.7.3/jython-installer-2.7.3.jar#3ffc25c5257d2028b176912a4091fe048c45c7d98218e52d7ce3160a62fdc9fc" jython case "$(pypy_architecture 2>/dev/null || true)" in "osx64"|"win32" ) # Jython does not seem to work properly on OSX/windows unless JAVA_HOME is set if [ -z "${JAVA_HOME+defined}" ]; then colorize 1 "WARNING: " echo "Please ensure that your JAVA_HOME environment variable is set correctly!" echo "See http://bugs.jython.org/issue2346 for details." fi ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/jython-dev000066400000000000000000000006231476513315000245220ustar00rootroot00000000000000require_java unrequire_python27 install_hg "jython-dev" "https://hg.python.org/jython" "default" jython_builder ez_setup # pip (>= 1.3) does not work properly since it uses HTTPS for downloads # * https://github.com/pyenv/pyenv/issues/15 install_package "pip-1.2.1" "https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz#12a9302acfca62cdc7bc5d83386cac3e0581db61ac39acdb3a4e766a16b88eb1" python pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge000066400000000000000000000022651476513315000245370ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Mambaforge-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-ppc64le.sh" "miniconda" verify_py3_latest ;; "Linux-x86_64" ) install_script "Mambaforge-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh" "miniconda" verify_py3_latest ;; "Linux-aarch64" ) install_script "Mambaforge-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-aarch64.sh" "miniconda" verify_py3_latest ;; "MacOSX-arm64" ) install_script "Mambaforge-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-arm64.sh" "miniconda" verify_py3_latest ;; "MacOSX-x86_64" ) install_script "Mambaforge-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-x86_64.sh" "miniconda" verify_py3_latest ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-22.11.1-3000066400000000000000000000031421476513315000254720ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-22.11.1-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Mambaforge-22.11.1-3-Linux-aarch64.sh#898134462553de6b16cdcf649b2fc5f46b7bff5ac92b12cae7f6a46eeb973c8d" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-22.11.1-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Mambaforge-22.11.1-3-Linux-ppc64le.sh#446b3c31293cfec57dc651fbd0aadb9b9663746863e7601b2aa25aa005907192" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-22.11.1-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Mambaforge-22.11.1-3-Linux-x86_64.sh#dc7b120aa6f12004e406498cb605c752bd6e4bfe18da169dfe119b91d0c8c8ce" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-22.11.1-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Mambaforge-22.11.1-3-MacOSX-arm64.sh#a85225bc54ba3c5caaf202817b4f49578d6134e6818c8fbc75173af69a80847d" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-22.11.1-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Mambaforge-22.11.1-3-MacOSX-x86_64.sh#0b17731c449ab96b3c5e39553fd68fbe1e4c68e9b016126ccf68a8f00a4a3a38" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-22.11.1-4000066400000000000000000000031421476513315000254730ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-22.11.1-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-Linux-aarch64.sh#96191001f27e0cc76612d4498d34f9f656d8a7dddee44617159e42558651479c" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-22.11.1-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-Linux-ppc64le.sh#9ad024c2ed11e1c75324515727c70384f073be1373111c34b14b7212944e7e0d" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-22.11.1-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-Linux-x86_64.sh#16c7d256de783ceeb39970e675efa4a8eb830dcbb83187f1197abfea0bf07d30" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-22.11.1-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-MacOSX-arm64.sh#a551be4b416a05f31ba3605f78694f1e21559533744c45ded0c4bfeb7666f317" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-22.11.1-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-MacOSX-x86_64.sh#0f0f746330259c6f9c3678fdbdb6195dddad4b9bac921a6de07c62a60234ad8d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-22.9.0-0000066400000000000000000000031231476513315000254140ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-22.9.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Mambaforge-22.9.0-0-Linux-aarch64.sh#6076cfb0c2f88efa3e5e125dc54f3c0f8219cfe1ae9d9258a5abe42dbcf21a13" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-22.9.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Mambaforge-22.9.0-0-Linux-ppc64le.sh#a17530e0e981991db5f6875e949dc22554f2ed0dd2b1bbb40ce677c910a2dc51" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-22.9.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Mambaforge-22.9.0-0-Linux-x86_64.sh#7049f5ebdd6e2aee7611874599ab14445cd63070cdb63db2e00ae0b90d7c6132" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-22.9.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Mambaforge-22.9.0-0-MacOSX-arm64.sh#d116ea977a2117068d290a961212f10fdaf1cc6ad156ea14b3979e2e4c0499d9" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-22.9.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Mambaforge-22.9.0-0-MacOSX-x86_64.sh#03b0af9a3d343da8107edaf75713cea3b79c71aacbbeb8f06507d0dbd26c5218" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-22.9.0-1000066400000000000000000000031231476513315000254150ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-22.9.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Mambaforge-22.9.0-1-Linux-aarch64.sh#2f60c1faadcf0660ac9a97e00c64edf8fd241664387a156685de4b72f36c657c" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-22.9.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Mambaforge-22.9.0-1-Linux-ppc64le.sh#525cf02648ad50a221c1f1ca5ecc4c05be6cbe829e7d994c17507b439d923e55" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-22.9.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Mambaforge-22.9.0-1-Linux-x86_64.sh#cba9a744454039944480871ed30d89e4e51a944a579b461dd9af60ea96560886" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-22.9.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Mambaforge-22.9.0-1-MacOSX-arm64.sh#90c9c6eccdef8d938c4f31d44f2553c706b89955a4750adbd09d7eeefbedc603" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-22.9.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Mambaforge-22.9.0-1-MacOSX-x86_64.sh#0afa53d38735762ee2a43174ee4ce726f076a1526f24122bd2faf7d0e005b61b" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-22.9.0-2000066400000000000000000000031231476513315000254160ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-22.9.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Mambaforge-22.9.0-2-Linux-aarch64.sh#26cf4a5cd3a3b9085f75911b459b969d6ff8ab426ef9a8e7ce3b47cc683ead86" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-22.9.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Mambaforge-22.9.0-2-Linux-ppc64le.sh#e13044cdbce8542896dd8b7128a00b691c119e7ad6e872c7de93ec9954b4775d" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-22.9.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Mambaforge-22.9.0-2-Linux-x86_64.sh#d2bb6c33f2373131fc71283baae9eb81a279708d007e55d627d85abe30c2d0eb" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-22.9.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Mambaforge-22.9.0-2-MacOSX-arm64.sh#21959f1a17a662b3f260e8b04fe2dfe82f1246746875a72f513d39159d8b816b" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-22.9.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Mambaforge-22.9.0-2-MacOSX-x86_64.sh#844fc1ac61967990f0cfb9e516e8b0704ac2e500854588fd9851d2790d817bab" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-22.9.0-3000066400000000000000000000031231476513315000254170ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-22.9.0-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Mambaforge-22.9.0-3-Linux-aarch64.sh#bd9694b1558f4ee6c4eef081cefc57dbb32ceb6406e497018f0c7d2dab5b61dd" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-22.9.0-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Mambaforge-22.9.0-3-Linux-ppc64le.sh#f19dc098452ddbd73caa83792aaacd63674be20898ac63b38ad687e5148199f8" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-22.9.0-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Mambaforge-22.9.0-3-Linux-x86_64.sh#29f6374464307732c2c9d6711cdbca4d685c632f31e8bf1a5565276c65e0069b" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-22.9.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Mambaforge-22.9.0-3-MacOSX-arm64.sh#eebe06970fec4cb1445bba106e65f57084b753d39766bf213edf4e02b14e27c1" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-22.9.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Mambaforge-22.9.0-3-MacOSX-x86_64.sh#a3ccaf7b93b6f99bc2018f2a6f3cd95489940731f11fb9bf6adf1a44a7ba4e17" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.1.0-0000066400000000000000000000031231476513315000254050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.1.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Mambaforge-23.1.0-0-Linux-aarch64.sh#01c29a399ad63c9aa28a69a622e9273e9bb8c5d504f1858ba789c5ca63ba1187" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.1.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Mambaforge-23.1.0-0-Linux-ppc64le.sh#ec0b8b10fbb9a7eb1b9c6ddf0487d0e8e0b16926791b84afc1623b43f45d1faf" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.1.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Mambaforge-23.1.0-0-Linux-x86_64.sh#0598ec82e02233e0e242b12129349416225dd07c2318f0ec1cfce4d7d9c397d8" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.1.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Mambaforge-23.1.0-0-MacOSX-arm64.sh#538ea7a9d24cad041a2b7fd71cf49f433137f9b4bc8e11408f2285e99cf79f96" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.1.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Mambaforge-23.1.0-0-MacOSX-x86_64.sh#61d95ff7a7bbe465a416f5ad43460fb1a50e621ed15233cc4e3441a03bb48cd4" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.1.0-1000066400000000000000000000031231476513315000254060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.1.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Mambaforge-23.1.0-1-Linux-aarch64.sh#d9d89c9e349369702171008d9ee7c5ce80ed420e5af60bd150a3db4bf674443a" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.1.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Mambaforge-23.1.0-1-Linux-ppc64le.sh#f7065963c9c7eba0ea80ad6431903ddb89fe1ec34c47967cbb8a5247c613b30b" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.1.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Mambaforge-23.1.0-1-Linux-x86_64.sh#cfb16c47dc2d115c8b114280aa605e322173f029fdb847a45348bf4bd23c62ab" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.1.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Mambaforge-23.1.0-1-MacOSX-arm64.sh#e519a74734f963c2fe744557115f8862fa573dea0de581b0b4a22cbd31127448" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.1.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Mambaforge-23.1.0-1-MacOSX-x86_64.sh#e33f9d426d62759e7c4adf5431fdd91a23df71732b5e22b699cace52255e8196" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.1.0-2000066400000000000000000000031231476513315000254070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.1.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Mambaforge-23.1.0-2-Linux-aarch64.sh#a1a3f7cd517e97ef9b0f8e4c1afeb659c7c69849e623904297984e79b1f29b37" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.1.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Mambaforge-23.1.0-2-Linux-ppc64le.sh#fa7e75949d227c12d152efce5ae494ad5725fb0f71151dfdbdddd60e3d265dde" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.1.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Mambaforge-23.1.0-2-Linux-x86_64.sh#8c9244094375379cfe1b6317afc9e693924d0f58ea5c68c64cde4463847c1e31" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.1.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Mambaforge-23.1.0-2-MacOSX-arm64.sh#a58be683b4c00c32591eedc7a6675c8a4d3c7cbf3ef3808f4513033de46be7c8" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.1.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Mambaforge-23.1.0-2-MacOSX-x86_64.sh#f7c53778a47579d886441747a7fe697d020da3b1726f3f7fe7d7e779c3d506e2" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.1.0-3000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.1.0-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Mambaforge-23.1.0-3-Linux-aarch64.sh#b7038f4f4d972fa2589dd9edd014940b94600589f924cc6d35a9b11d37506c25" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.1.0-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Mambaforge-23.1.0-3-Linux-ppc64le.sh#b89f25891ce072a0de5f6f1f5889609dc1eee71ac1301c8ddb7538bd608f273c" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.1.0-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Mambaforge-23.1.0-3-Linux-x86_64.sh#7a6a07de6063245163a87972fb15be3a226045166eb7ee526344f82da1f3b694" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.1.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Mambaforge-23.1.0-3-MacOSX-arm64.sh#75368b03ac79b170537748a600ea847e35d83a4fef9ea438c34217b7e28b9330" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.1.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Mambaforge-23.1.0-3-MacOSX-x86_64.sh#7e4dd16067bbb4ab41616f3378d0c788302818c7fe13806fe8e97707471c9004" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.1.0-4000066400000000000000000000031231476513315000254110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.1.0-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Mambaforge-23.1.0-4-Linux-aarch64.sh#95c354268f62e32d57c84f2e1a0caf9b19f77c894ecc83008db0e5e666ce3d43" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.1.0-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Mambaforge-23.1.0-4-Linux-ppc64le.sh#70ed57b9d32457c172c208b16a839937e2dd77e3fa1bff5ef1cb2f1a7da102ba" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.1.0-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Mambaforge-23.1.0-4-Linux-x86_64.sh#6ca38e02be99c410644c283bac74601f296dd10995ce1c8d345af995a39b5916" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.1.0-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Mambaforge-23.1.0-4-MacOSX-arm64.sh#baa1ae638537766cac808efba09175ba21878b34288476dc7bbd01347145721f" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.1.0-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Mambaforge-23.1.0-4-MacOSX-x86_64.sh#26937ea98870531e51da942b7f6cc26cc9af49bb16390486ee6dde9e0dc2c597" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.10.0-0000066400000000000000000000031421476513315000254660ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.10.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Mambaforge-23.10.0-0-Linux-aarch64.sh#38d86db6ef78caa0ac001c48f454112df2a1e90cd6884dba03a3265393f762b2" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.10.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Mambaforge-23.10.0-0-Linux-ppc64le.sh#8f28c516ef441c0691d94a7cf3917b8c77eda4ac378c89bd491d4d8ff4f887c8" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.10.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Mambaforge-23.10.0-0-Linux-x86_64.sh#cf2782419e118db664653a6e63bbf212a24cbc3126c413aa5886fd0f7d20d3c0" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.10.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Mambaforge-23.10.0-0-MacOSX-arm64.sh#8b300c413195f33c3965445213de2b76bbf5fcbe9087aa80b8d6bf81a21b5764" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.10.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Mambaforge-23.10.0-0-MacOSX-x86_64.sh#8f1ddb27deffe5e631b3ce69fc3f880c7f3710ee08a42fee64e2b2e1a039683f" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.11.0-0000066400000000000000000000031421476513315000254670ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.11.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Mambaforge-23.11.0-0-Linux-aarch64.sh#71320f28280b4e41f37469f6b0ae85e31ba9c26a87c7ee69cecaae3eaa5a4057" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.11.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Mambaforge-23.11.0-0-Linux-ppc64le.sh#148b18f94b5a0878d5fa1190b41cad5a803eca1cd15429e26571fef11422e2b2" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.11.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Mambaforge-23.11.0-0-Linux-x86_64.sh#3dfdcc162bf0df83b5025608dc2acdbbc575bd416b75701fb5863343c0517a78" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.11.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Mambaforge-23.11.0-0-MacOSX-arm64.sh#dd832d8a65a861b5592b2cf1d55f26031f7c1491b30321754443931e7b1e6832" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.11.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Mambaforge-23.11.0-0-MacOSX-x86_64.sh#c6ac073b80cedb313561bc11c2e61b0bd102b74df0363ed6c1e90303b322092a" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.3.0-0000066400000000000000000000031231476513315000254070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.3.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Mambaforge-23.3.0-0-Linux-aarch64.sh#ae506f8013fc3f487dd3c9a4fde0b1a529b02bb5478921913c46a115dbcd7d1f" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.3.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Mambaforge-23.3.0-0-Linux-ppc64le.sh#f8c0e24abaedfcf611c70451d0bb771f453a0eb4cc0bbbb0670f9753817827a6" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.3.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Mambaforge-23.3.0-0-Linux-x86_64.sh#f8b12a9815575b0fec9c85100053ef24e59043194546826fb565288c51ba930d" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.3.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Mambaforge-23.3.0-0-MacOSX-arm64.sh#82ed548de9de74d2b6dda9830f581d897eb82694c1df79d957eaef9066dd7ef4" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.3.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Mambaforge-23.3.0-0-MacOSX-x86_64.sh#d4603c9b380d5daa923f8d0543de5df57ba971a1562a519c6e3fe1240963012a" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.3.1-0000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.3.1-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Mambaforge-23.3.1-0-Linux-aarch64.sh#6e4feeafeff69f35a7455a35f763eb6d5a1e946e7b9b321099640ac93e619a53" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.3.1-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Mambaforge-23.3.1-0-Linux-ppc64le.sh#6518bf3aa2499a4c76fee54d33450d386a1d4c1bf2e0b2ddaec03f8f7b4319d2" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.3.1-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Mambaforge-23.3.1-0-Linux-x86_64.sh#c425dcc3501692f23564d8b0a7b3ba69166c61424e9ce0d825f64f9479dcafa1" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.3.1-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Mambaforge-23.3.1-0-MacOSX-arm64.sh#71e7ea4295d22f0c7ab08b334c07d9540e10775c8abd456314e186625cfb3bf1" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.3.1-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Mambaforge-23.3.1-0-MacOSX-x86_64.sh#b7b5fe0690528a4d449597e49edb2595625f2cf29e0473fd2a8d2dabc4d948f5" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-23.3.1-1000066400000000000000000000031231476513315000254110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-23.3.1-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Mambaforge-23.3.1-1-Linux-aarch64.sh#32dcc92b4f0b0108ac0734721fb65172395f6c39ecdcaf5bf63edc01f0932020" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-23.3.1-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Mambaforge-23.3.1-1-Linux-ppc64le.sh#93fa681cadda8b73bd93a1bf2f60aaa577fe02ef537ee5300eab33af2b45f6d0" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-23.3.1-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Mambaforge-23.3.1-1-Linux-x86_64.sh#dbe92c011a1315b9626e2f93a165892f4b89177145bc350b3859a483a3642a24" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-23.3.1-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Mambaforge-23.3.1-1-MacOSX-arm64.sh#1b07c1a231a18f21da6aac1abe87dd173ce141ce7612f06eab962eb9f8353a27" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-23.3.1-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Mambaforge-23.3.1-1-MacOSX-x86_64.sh#ee707e117c4eb54b7a02a0ba1b2fc2b60325ce6f767e76274e45dbe7743efa7d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.1.2-0000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.1.2-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Mambaforge-24.1.2-0-Linux-aarch64.sh#937b2dab9a988d83a4a9e574148d1410204bdb3d137905083570e5a1a0a995e4" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.1.2-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Mambaforge-24.1.2-0-Linux-ppc64le.sh#68b28e441171cef9e4da81a1a99264a4b41c4bf99f8c132af9ec38c67fd41694" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-24.1.2-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Mambaforge-24.1.2-0-Linux-x86_64.sh#b172a8d2ff1c452768dd1beffb8d61880dde89f14e855de7e2459963af33828c" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.1.2-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Mambaforge-24.1.2-0-MacOSX-arm64.sh#b828ec3189393501d859b001f0dcfdf953140bb9506875ae997eb7ff641f6d19" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.1.2-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Mambaforge-24.1.2-0-MacOSX-x86_64.sh#3d3f50d7fa16b65ec507c062e6a337ba9c812650c796eb06495930b8cdd5d471" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.11.0-0000066400000000000000000000031421476513315000254700ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.11.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Mambaforge-24.11.0-0-Linux-aarch64.sh#5816a4a11f08b0caba33c38365f65d81f3659fd73da498a87ab4510a58a9abd5" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.11.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Mambaforge-24.11.0-0-Linux-ppc64le.sh#1d530dd326f9b8e29a8005cba28a239f00c7979337d642cc89531b4755fb69b7" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.11.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Mambaforge-24.11.0-0-Linux-x86_64.sh#ae30935839c9e88458ce0605a251fa3f1ade623e3b9709f859460545577779f1" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.11.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Mambaforge-24.11.0-0-MacOSX-arm64.sh#5535232048d9e2430f165153636bbf781f21128132908e9db455130198c79dc5" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.11.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Mambaforge-24.11.0-0-MacOSX-x86_64.sh#f3849b245e724c0d3efde9deb125041b6a78aff69867691e1f7ecff79c40cbd1" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.11.0-1000066400000000000000000000031421476513315000254710ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.11.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Mambaforge-24.11.0-1-Linux-aarch64.sh#7a02a83679a04e164a7ed5a95fe18688032012a4619a2dba6051dada20a437c3" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.11.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Mambaforge-24.11.0-1-Linux-ppc64le.sh#7f985f2dba06a62dcebeaf832ac926ba85707552134b5be310e9a28e869550e1" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.11.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Mambaforge-24.11.0-1-Linux-x86_64.sh#fad8afeb7a0247e8e8fd7a82e9306c694421d2e9b6b341752c73737fbebe4d73" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.11.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Mambaforge-24.11.0-1-MacOSX-arm64.sh#30d47bb61b337d2a2e166cc56923267089a6be526faf9677666af178a0059f0d" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.11.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Mambaforge-24.11.0-1-MacOSX-x86_64.sh#2303dcacb52860660e3f290d06e9313acb9e8826bfa6c1ca10972fedc9e3b388" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.3.0-0000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.3.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Mambaforge-24.3.0-0-Linux-aarch64.sh#7f2a0282819f1a12bb44628a836b96fe9dfb21a5920fb8331325c47f91bf9a81" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.3.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Mambaforge-24.3.0-0-Linux-ppc64le.sh#4550d7cb6ea9bb145ae2aae7b02734a642ef24bda0abfc9b1b6d8d6abf0b7749" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-24.3.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Mambaforge-24.3.0-0-Linux-x86_64.sh#0be3654cc3b9c43d3aeeeca5efe6d2f31e9f7711702f3818529b367b3db677fb" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.3.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Mambaforge-24.3.0-0-MacOSX-arm64.sh#de7c7f229d05104de802f1f729a595736b08139c4ae59ba8ba0049050d63c98f" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.3.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Mambaforge-24.3.0-0-MacOSX-x86_64.sh#5455900cf1298f21333b7c0d1ec159952e1ef5426563cc97eb7e42053d608afc" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.5.0-0000066400000000000000000000031231476513315000254120ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.5.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Mambaforge-24.5.0-0-Linux-aarch64.sh#a19c4d40dc4aa9084d729f3fbed36fd7a741bb8a0ef4f7df4bc92c5157817ba8" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.5.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Mambaforge-24.5.0-0-Linux-ppc64le.sh#db6432e76bac0547d65f06e1e0559a0d12147e9020e0cce99c8b07a9c8f2824d" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.5.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Mambaforge-24.5.0-0-Linux-x86_64.sh#afee51df9c542d2e1bef249ad167197ba90fd4386fd32a63383dc95efba4bdfe" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.5.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Mambaforge-24.5.0-0-MacOSX-arm64.sh#88514feaad5bf03605242bd4e767829ad9695587ef51621329343d9960771d2b" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.5.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Mambaforge-24.5.0-0-MacOSX-x86_64.sh#1dfb244bce67bc6d9c0900cce2bf9d9feaf66ba60e811b7c98c6e580394d0ccc" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.7.1-0000066400000000000000000000031231476513315000254150ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.7.1-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Mambaforge-24.7.1-0-Linux-aarch64.sh#09221afebba644eabccb5a83a92ba7e1bf88ff17171f80f77f95aa81cad225cc" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.7.1-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Mambaforge-24.7.1-0-Linux-ppc64le.sh#1ba05b444bea703097054a25aee2ebb7b04236632791f08f28db82491e005b52" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.7.1-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Mambaforge-24.7.1-0-Linux-x86_64.sh#e72ecc1f1b170ee804da298e54ed616ce82543ce84a8b83f63cb0ada2e4bfa50" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.7.1-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Mambaforge-24.7.1-0-MacOSX-arm64.sh#204be9ff318a5b23f9466f8bbbf18f7e180c6ed393ffc2a9859d8ab06c474248" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.7.1-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Mambaforge-24.7.1-0-MacOSX-x86_64.sh#668e69e89e41c5e9bae4431cf4040346eb6e484831577a28795c44039f70798d" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.7.1-1000066400000000000000000000031231476513315000254160ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.7.1-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Mambaforge-24.7.1-1-Linux-aarch64.sh#34ea804e678d71c747d5a7fc99f97ffea395252c8acaf0c66e6dc6812585573b" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.7.1-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Mambaforge-24.7.1-1-Linux-ppc64le.sh#3ee3e1d127adeea1950ed1b73ccbc7e4d9f2a25e98f5a18c09e8a3bb8a905d05" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.7.1-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Mambaforge-24.7.1-1-Linux-x86_64.sh#7b47af948c8a5d786bc7036eb918ba1254273a820bacd83596316919cd097a14" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.7.1-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Mambaforge-24.7.1-1-MacOSX-arm64.sh#5994a2ad9cd40b2c79cc67173b9be42ec04b7b5d65ad17443bd67d68740bc403" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.7.1-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Mambaforge-24.7.1-1-MacOSX-x86_64.sh#4fc2637e40282562a1139827cf36e98a71dfdd9b3306967210f9d02badf65447" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.7.1-2000066400000000000000000000031231476513315000254170ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.7.1-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Mambaforge-24.7.1-2-Linux-aarch64.sh#fd99046ef2394198c56df8988f50bbd18967edbc36d7fb29a4814f46ee5ab210" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.7.1-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Mambaforge-24.7.1-2-Linux-ppc64le.sh#3a09b99214c47d744c1e80a52de3e26b4a0420463cb50bade04b454af8ace591" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.7.1-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Mambaforge-24.7.1-2-Linux-x86_64.sh#4ce9db89d22e3ebd4e5c5d0b745613e25dcef79fba4d67760b09d76f15020d4c" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.7.1-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Mambaforge-24.7.1-2-MacOSX-arm64.sh#5920c685a6bedb7d71fe0caafd5fafdb41a664ff6f41ee637fd683e283e4d771" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.7.1-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Mambaforge-24.7.1-2-MacOSX-x86_64.sh#ec0ec07816a97080443472e052a6777c1e3870a83cadba1254bfa3bc60f65a6c" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.9.0-0000066400000000000000000000031231476513315000254160ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.9.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Mambaforge-24.9.0-0-Linux-aarch64.sh#2d83f58793e9e303746747a683833aec5b9178fb1a313a3f9a56df2d319e23a5" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.9.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Mambaforge-24.9.0-0-Linux-ppc64le.sh#cc083e40b1891611b26b0f63b5df3422cb4f8e1a29204f55caea514ead528eb2" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.9.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Mambaforge-24.9.0-0-Linux-x86_64.sh#77fb505f6266ffa1b5d59604cf6ba25948627e908928cbff148813957b1c28af" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.9.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Mambaforge-24.9.0-0-MacOSX-arm64.sh#ceb3dac98c1618f652aed493dc9488155ac7ca2c8abaccd18b93e58034a462c6" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.9.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Mambaforge-24.9.0-0-MacOSX-x86_64.sh#046d8eedabafc798c88f3764e71b6ca22728ccbf04806b68450421cb6ebdaae6" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-24.9.2-0000066400000000000000000000031231476513315000254200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-24.9.2-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Mambaforge-24.9.2-0-Linux-aarch64.sh#f142244dd08dc1a7dbb95a48f22e2c0cba01602bc0b6b0425520460d278c2f4d" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Mambaforge-24.9.2-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Mambaforge-24.9.2-0-Linux-ppc64le.sh#0c442d49787dea24847690e85744566cc901641b2c0ffd3f4e6579c9c4306a94" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Mambaforge-24.9.2-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Mambaforge-24.9.2-0-Linux-x86_64.sh#9e122fbb925a96011b876fcf118d70c55cbe982b6ee001fe23aa8a2600d649d1" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Mambaforge-24.9.2-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Mambaforge-24.9.2-0-MacOSX-arm64.sh#85f1c04493513a4552a14ed32b785c0b5484ecfafa827ef413605fd20e5d5cea" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Mambaforge-24.9.2-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Mambaforge-24.9.2-0-MacOSX-x86_64.sh#f845ed82244fe553dc4d1b3a7c134e3c0ede26a84d2d279cfa93bdcb0fc739b0" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.1-4000066400000000000000000000024561476513315000254210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86_64" ) install_script "Mambaforge-4.10.1-4-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-4/Mambaforge-4.10.1-4-Linux-x86_64.sh#9eb335cb559644a6e462c077ebc129af51b7329817574fb707b994dafdddf2af" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Mambaforge-4.10.1-4-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-4/Mambaforge-4.10.1-4-Linux-aarch64.sh#eb7d10c758afbd59432a8f08294bc3ac053e747e1997ff5d6a1141a276b6d0e5" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.1-4-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-4/Mambaforge-4.10.1-4-MacOSX-arm64.sh#90a75e9fa9fedfe991a9eaf65cae62ef5cdb6a8fda9375654f31b3b6cf99ef06" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.1-4-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-4/Mambaforge-4.10.1-4-MacOSX-x86_64.sh#b8a849f0cf2923940a2fcda47a5f7181fa855dfc5c1b59134ac7e8b3735e0f71" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.1-5000066400000000000000000000024561476513315000254220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86_64" ) install_script "Mambaforge-4.10.1-5-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Mambaforge-4.10.1-5-Linux-x86_64.sh#069e151cae85ed4747721e938e7974aa00889a1ae87cff33ddbdde9530fc4c6d" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Mambaforge-4.10.1-5-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Mambaforge-4.10.1-5-Linux-aarch64.sh#64739b6eb0108ff3873d4edb32d2760db166cc822797234654c888c0f7063b9d" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.1-5-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Mambaforge-4.10.1-5-MacOSX-arm64.sh#20553cd410ae250cd1cabce04e7478f57439ab1d55cb1c6a157998d96bee1b7d" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.1-5-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Mambaforge-4.10.1-5-MacOSX-x86_64.sh#871fc6471ff8de7aa609db5f1a8e99bfaea6dabbbd2c41fa61c26ef82daa6832" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.2-0000066400000000000000000000031231476513315000254060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.2-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Mambaforge-4.10.2-0-Linux-aarch64.sh#cbc5329fa22f4d7ff10f66e59024b186d37653b9da31d841d23092a701f46b1f" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.2-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Mambaforge-4.10.2-0-Linux-ppc64le.sh#c682e2e1f07e2da07cbe6252559af363bb0b67aa315527887fe2dd5123ca8760" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.2-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Mambaforge-4.10.2-0-Linux-x86_64.sh#1e89ee86afa06e23b2478579be16a33fff6cff346314f6a6382fd20b1f83e669" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.2-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Mambaforge-4.10.2-0-MacOSX-arm64.sh#87768fed0097edf58a129981129142db2651ab5d1591e19c5840ade186b443c5" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.2-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Mambaforge-4.10.2-0-MacOSX-x86_64.sh#5a396db66672b5e6557e692bcb3cb527bcbe7c24b9c4a1c67b4449f8ef67cd47" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-0000066400000000000000000000031231476513315000254070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Mambaforge-4.10.3-0-Linux-aarch64.sh#d6d4fdf1d722c4afe9fdf5e372369321d5de9b491fdada22255665b122453fc7" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Mambaforge-4.10.3-0-Linux-ppc64le.sh#cdda287122007bdc6b96ed62fb17c7c8213e38b3598ad6db03d8301c81d7d594" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Mambaforge-4.10.3-0-Linux-x86_64.sh#5c3914235c0db8a8925d294a17d196fca7e6eab9175406fc78ed90fde34297db" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Mambaforge-4.10.3-0-MacOSX-arm64.sh#17a38bf23ef3f2864eb3c1ebf1c07389635ad9ff65f0692f438c1f6286feef63" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Mambaforge-4.10.3-0-MacOSX-x86_64.sh#43986b8c2a6b3535c2fa920c8001187c89695c0aaaa96c25696adb7746e0eb54" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-1000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Mambaforge-4.10.3-1-Linux-aarch64.sh#e830d626bcf8fccde1e64567fa9974d87fa45026c3baa73c889bab9a7fa60647" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Mambaforge-4.10.3-1-Linux-ppc64le.sh#ade3331e4946dc149c97346941c635ddef1b99d63ec0781027a0ae0d156f62d7" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Mambaforge-4.10.3-1-Linux-x86_64.sh#72c623cc9ce300c5ad54e0b383e428b13e5c640e74529295ab61fbbfa1a8acaa" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Mambaforge-4.10.3-1-MacOSX-arm64.sh#5d1e6ae4eb424290271fe25e7f8c3e8165ba5730a4817f92a157566f44c7e363" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Mambaforge-4.10.3-1-MacOSX-x86_64.sh#a8b0e666c893eb21769c00ab4ba603d28590f4c92d1fafe6ca2eb959cecf76ce" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-10000066400000000000000000000024721476513315000254760ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86_64" ) install_script "Mambaforge-4.10.3-10-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Mambaforge-4.10.3-10-Linux-x86_64.sh#8b789c619d03760e606a9c9b3d098414653f6037b80f16174ad94f0ee0c679d8" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Mambaforge-4.10.3-10-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Mambaforge-4.10.3-10-Linux-aarch64.sh#60a1d50c92fe1d48e2744effca9e7b51bfd5cc4e863dbcdb762ed48020703e3a" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-10-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Mambaforge-4.10.3-10-MacOSX-arm64.sh#72bc86612ab9435915b616c2edb076737cbabe2c33fd684d58c2f9ae72e1957c" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-10-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Mambaforge-4.10.3-10-MacOSX-x86_64.sh#7c44259a0982cd3ef212649678af5f0dd4e0bb7306e8fffc93601dd1d739ec0b" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-2000066400000000000000000000031231476513315000254110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Mambaforge-4.10.3-2-Linux-aarch64.sh#63294acfe2859c4a7b86151836da3253fd0370e9e0cd821be6ffb18a029c3a7a" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Mambaforge-4.10.3-2-Linux-ppc64le.sh#8162d50d3111a4c0746c7a4e51094eea3011966816768c4d3638fe40050d6e59" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Mambaforge-4.10.3-2-Linux-x86_64.sh#e4228930af7102de20019efdf45e4e9c056b6ae354cb2e344249e53a11f71175" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Mambaforge-4.10.3-2-MacOSX-arm64.sh#49132e1e2593b4ab3762ff238e76dfc5f5bd670fe23c622c5051607709f93a0b" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Mambaforge-4.10.3-2-MacOSX-x86_64.sh#cbd143702ed1d1176fa3b480eca1ec6eb0e32a2c9eab7134877ff32dabae91e0" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-3000066400000000000000000000031231476513315000254120ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Mambaforge-4.10.3-3-Linux-aarch64.sh#c53eda563935e7ed5d07816477758374f4c541d912ee5732f2f9ace37d9fab75" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Mambaforge-4.10.3-3-Linux-ppc64le.sh#3b762a3cf77fffebc56d3ecdefe590bf065139b36f556bb57f7f83a0ebe8561b" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Mambaforge-4.10.3-3-Linux-x86_64.sh#a012c24e1cc3bcbe74a1e5693e510830e7c2956e85877b08d1e28707a0bd8d75" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Mambaforge-4.10.3-3-MacOSX-arm64.sh#6cbae54d7a2d99cdcf747d74412a0c6490c8240cbb2d870655f61a9600bc2f06" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Mambaforge-4.10.3-3-MacOSX-x86_64.sh#69f626a18eb1a6fda52d9f005114604acff1fd2d7c10d46e56543dca7d78f30d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-4000066400000000000000000000031231476513315000254130ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Mambaforge-4.10.3-4-Linux-aarch64.sh#f37435d5e2bc3eb14ec7f5bc64f9c45997f8e0a6d2fef3a7bb1ffa19f118817b" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Mambaforge-4.10.3-4-Linux-ppc64le.sh#68319a11298b8c13a15960cd9d2a5777fd34420b73587a7f2e8e4757752f3252" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Mambaforge-4.10.3-4-Linux-x86_64.sh#5017562c434185b4d9d311274c14717077f6c09a238a4d34a1caf7618d26ddd4" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Mambaforge-4.10.3-4-MacOSX-arm64.sh#901f2c2b4be08cadf6968f408d4a1ee632ddb011a07ce4b480b83d8da142255f" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Mambaforge-4.10.3-4-MacOSX-x86_64.sh#b5fd40995aebd7631f761324eb425ee813fb4604ce8d8fde3c03cb60cac1716e" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-5000066400000000000000000000031231476513315000254140ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-5-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Mambaforge-4.10.3-5-Linux-aarch64.sh#5e471d796d7b1749949c0c0d79841e00f1b477833ce82b4b05b7b9886a1735eb" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-5-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Mambaforge-4.10.3-5-Linux-ppc64le.sh#892ccb32b847978062c8045e96827a403d59fe64f318e0b92303be6a08e4d3f7" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-5-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Mambaforge-4.10.3-5-Linux-x86_64.sh#2692f9ae27327412cbf018ec0218d21a99b013d0597ccaefc988540c8a9ced65" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-5-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Mambaforge-4.10.3-5-MacOSX-arm64.sh#1c7517e204814f7227ef0d2e0fbf95b43f6afae978e882cd017779e31f8b26cb" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-5-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Mambaforge-4.10.3-5-MacOSX-x86_64.sh#547823784a2b79641f29d06f70f74ae25775eec1680c6cca14888c4907441f5c" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-6000066400000000000000000000031231476513315000254150ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-6-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Mambaforge-4.10.3-6-Linux-aarch64.sh#b6d3c0af4ba6202dc9994e70933d2de47ef8c4e6891afce768889a7d44e1db28" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-6-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Mambaforge-4.10.3-6-Linux-ppc64le.sh#9d50677aeff37b56b0d6067339aad8c964942e28fc74a24a7602416a3dcc35b2" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-6-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Mambaforge-4.10.3-6-Linux-x86_64.sh#c63907ba0971d2ca9a8775bd7ea48b635b2bdce4838b2f2d3a8e751876849595" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-6-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Mambaforge-4.10.3-6-MacOSX-arm64.sh#c753e99380e3f777d690e7131fc79c6f9cb8fb79af23fb53c7b8a0ade3361fec" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-6-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Mambaforge-4.10.3-6-MacOSX-x86_64.sh#955a6255871d9b53975e1c1581910844bcf33cbca613c7dba2842f6269917da6" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-7000066400000000000000000000031231476513315000254160ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-7-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Mambaforge-4.10.3-7-Linux-aarch64.sh#ac95f137b287b3408e4f67f07a284357b1119ee157373b788b34e770ef2392b2" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-7-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Mambaforge-4.10.3-7-Linux-ppc64le.sh#21c0190d2462eea68c78a600ce28828238d6a450858a289d7d4c03d9a2551ee8" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-7-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Mambaforge-4.10.3-7-Linux-x86_64.sh#fc872522ec427fcab10167a93e802efaf251024b58cc27b084b915a9a73c4474" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-7-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Mambaforge-4.10.3-7-MacOSX-arm64.sh#49c7ba06fe663c634929d5d85b4c06840f4ab9844744be691aab90848c52444e" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-7-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Mambaforge-4.10.3-7-MacOSX-x86_64.sh#94ed8b8a647f48a815590958217aabebd4a3e3e10edaf2c5772d50a75727773a" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-8000066400000000000000000000014321476513315000254200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-8-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-8/Mambaforge-4.10.3-8-MacOSX-arm64.sh#f40271609a59bad71e7b1c6fa61a36065ea35222a9497614bc970572594e1f5a" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-8-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-8/Mambaforge-4.10.3-8-MacOSX-x86_64.sh#4f3dfd9475ed226f6a4478fe5c0585117528700557fe06fb9db054a354f07951" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.10.3-9000066400000000000000000000031231476513315000254200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.10.3-9-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Mambaforge-4.10.3-9-Linux-aarch64.sh#91fcdf2dfca49d68daaa9927d38f77a82718b5b72333180f9855e5b2cfa07c3b" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.10.3-9-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Mambaforge-4.10.3-9-Linux-ppc64le.sh#4873079e88bcda0225af7c6acf59b48b272bb147ab9506e1b80cdab035a53b02" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.10.3-9-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Mambaforge-4.10.3-9-Linux-x86_64.sh#f53ab6584385a4648608993de2a66bb84b9255c87e1f4315bb39cbfc05b19e87" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.10.3-9-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Mambaforge-4.10.3-9-MacOSX-arm64.sh#968fe531ee2d9900409853085e6b458077144c1674061a5501938e3581b5adf4" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.10.3-9-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Mambaforge-4.10.3-9-MacOSX-x86_64.sh#d669b345a7612552a9a218e3499b7a3a7c8deec2925d203155bd0922250b2823" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.11.0-0000066400000000000000000000031231476513315000254050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.11.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Mambaforge-4.11.0-0-Linux-aarch64.sh#9ad5db1775ed7f6a390774a7b7a2aeac3992499ee4b01e801f53528857112dc0" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.11.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Mambaforge-4.11.0-0-Linux-ppc64le.sh#6fe80e207d409eb6c0922e068aa23aff5032083d9a5c2aacecc446a1d20f357b" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.11.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Mambaforge-4.11.0-0-Linux-x86_64.sh#49268ee30d4418be4de852dda3aa4387f8c95b55a76f43fb1af68dcbf8b205c3" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.11.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Mambaforge-4.11.0-0-MacOSX-arm64.sh#7703e27a2ceadb747a69f2c6a88b3cb859cb4bb4268fc85b03739e22d0eb160b" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.11.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Mambaforge-4.11.0-0-MacOSX-x86_64.sh#2039f744e272d47878f0bc2ae372f03c7f07881f39a93d693d5445744f36f19d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.11.0-1000066400000000000000000000031231476513315000254060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.11.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Mambaforge-4.11.0-1-Linux-aarch64.sh#8b2cd64b89c7e92a444dd2df993a4c0aeda20b1d090aeef8956bbb3fa5c526fe" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.11.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Mambaforge-4.11.0-1-Linux-ppc64le.sh#c7fb2000b4447a410fd18d334a9b658f8682b19962fe0e22d1d003078dc89dfe" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.11.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Mambaforge-4.11.0-1-Linux-x86_64.sh#32eb24c99062d5c97d1b8ab55cae19e37cca08464a3249e5eac65339927697e9" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.11.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Mambaforge-4.11.0-1-MacOSX-arm64.sh#ce002867552011148b77e1df022465c584d25d0aec02fc15fdc96b68a0da1545" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.11.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Mambaforge-4.11.0-1-MacOSX-x86_64.sh#11b0e24649ca1931cfcc92ff2b3a67d43e7f2485a1f57b7f512b5b7cd6f3f27c" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.11.0-2000066400000000000000000000031231476513315000254070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.11.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Mambaforge-4.11.0-2-Linux-aarch64.sh#dc24d61b3c57fde5bb05367a9514bcdf7acd820f97ef913e94781c78dff55f8d" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.11.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Mambaforge-4.11.0-2-Linux-ppc64le.sh#8936568238c0ab4ae6444390cbe22853f8852080b5bc85912e1d41c8d3bbaea7" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.11.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Mambaforge-4.11.0-2-Linux-x86_64.sh#5708db10e2e84035f9ed5700731435bf4027c73b0d5d41562cb5cf5dd9048925" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.11.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Mambaforge-4.11.0-2-MacOSX-arm64.sh#8265d0902b6c3914a64afa7899c6398b1db7005603ad5d190dc0f0c87e8a8446" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.11.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Mambaforge-4.11.0-2-MacOSX-x86_64.sh#e6312bcd55bac1036ce0d3c52a36bf57d3f65d3ec4f36f6267617dbb7edfe16d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.11.0-3000066400000000000000000000014321476513315000254110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "MacOSX-arm64" ) install_script "Mambaforge-4.11.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-3/Mambaforge-4.11.0-3-MacOSX-arm64.sh#7f16bf19722987cba7b077a010276262d8c3b521cb5c759f0b981e0fb0877d50" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.11.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-3/Mambaforge-4.11.0-3-MacOSX-x86_64.sh#e0e60c1542d087b514c3a81a1d4df9f0cc1d127b5245f1685bf77b2562ad6314" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.11.0-4000066400000000000000000000031231476513315000254110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.11.0-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Mambaforge-4.11.0-4-Linux-aarch64.sh#e2105e962f19a764c33d986f6e6850a3ce9aef9efc9571c7293b5274c335231d" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.11.0-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Mambaforge-4.11.0-4-Linux-ppc64le.sh#d50a94a0fd367242db4bf5121ba4fd9356e171c79444d2226081275baa31e63a" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.11.0-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Mambaforge-4.11.0-4-Linux-x86_64.sh#3f3a9177c3ce022a5f7f8798aab360af004c6c1e4963d0e91fc005e54bc1e271" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.11.0-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Mambaforge-4.11.0-4-MacOSX-arm64.sh#d0a86d865d3881f26bc0e677a83b7fdff700536e654cd8490c8fdc1731f93f6c" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.11.0-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Mambaforge-4.11.0-4-MacOSX-x86_64.sh#9b385902da43fba025ba8a02e628057217fe75cace15af26add5748ab443abbb" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.12.0-0000066400000000000000000000031231476513315000254060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.12.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Mambaforge-4.12.0-0-Linux-aarch64.sh#44e0a9f7c32e855e82a24af4df9a65ecf35a12b6eede8822b24dcf2308289d40" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.12.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Mambaforge-4.12.0-0-Linux-ppc64le.sh#44de866d661a441f5e32605ce4708b3323f80348ccb5e0568e52a25a3de0d81e" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.12.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Mambaforge-4.12.0-0-Linux-x86_64.sh#6c6fd04d688ceb7e6b540bba059dd3a541d60602e9adece3abaf754d15c83484" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.12.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Mambaforge-4.12.0-0-MacOSX-arm64.sh#59d847b17148ebd27a4b31775d0047302cf9f8f8dae7db1e75bf037f0a823d48" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.12.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Mambaforge-4.12.0-0-MacOSX-x86_64.sh#2301f866fb239ce6cda3e741e00be22ff7aa5ff76ba5683509ebae58df917546" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.12.0-1000066400000000000000000000031231476513315000254070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.12.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Mambaforge-4.12.0-1-Linux-aarch64.sh#c6ee5819f700926485197c864ed1190e8ca9d436cf15b100ed8a35540f1c46ea" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.12.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Mambaforge-4.12.0-1-Linux-ppc64le.sh#87dc485c6c82592102b8704e0e59cf9ce2fef762c369011a3e132fa72549d730" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.12.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Mambaforge-4.12.0-1-Linux-x86_64.sh#10f7194e7356e46e41ddf6add800a2f175a801211ed62869ad8c0c301d493c34" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.12.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Mambaforge-4.12.0-1-MacOSX-arm64.sh#234504f4db1d04966218f0c1ad73418a15e7e9bdf714d166bc5e86b917291cc2" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.12.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Mambaforge-4.12.0-1-MacOSX-x86_64.sh#e68c3b8f94db17aae3b33f2bacb950c613c06b170507002d72231ff320b9ad7c" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.12.0-2000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.12.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Mambaforge-4.12.0-2-Linux-aarch64.sh#6b67bdd1552dfd6a2257c4c3da0ead19a4d34f68c16fb3e5b4bbc728b60cd200" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.12.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Mambaforge-4.12.0-2-Linux-ppc64le.sh#f8700febc99cbda9cbe9ff52364477ed6a04efdf15a0aa499d8ea8be4a58998c" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.12.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Mambaforge-4.12.0-2-Linux-x86_64.sh#8cb16ef82fe18d466850abb873c7966090b0fbdcf1e80842038e0b4e6d8f0b66" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.12.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Mambaforge-4.12.0-2-MacOSX-arm64.sh#2e2be9d976da31b62ab314881d3c6ed3f65c76e3ea69cc4b59fb344780109026" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.12.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Mambaforge-4.12.0-2-MacOSX-x86_64.sh#562c2bcbabff10387f130acea72b960454fa3d90b593126e4e4febcf6da763d3" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.12.0-3000066400000000000000000000031231476513315000254110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.12.0-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Mambaforge-4.12.0-3-Linux-aarch64.sh#379796ce7d0f6515093bdde06f45df1bd7261c4104f13f53a5cd30f9acba44d9" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.12.0-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Mambaforge-4.12.0-3-Linux-ppc64le.sh#ae6fb19467c147c77cf31b044aaae155109bc0e952965d98990fa8d2b2e7bfdd" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.12.0-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Mambaforge-4.12.0-3-Linux-x86_64.sh#93d481e4f12dce9f2ffe46904dc8cf88485c7b27fc4d18dd8e900e2c3ab83f80" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.12.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Mambaforge-4.12.0-3-MacOSX-arm64.sh#6c3b82eb0edce21b58d0bcafc9afbbc498e140a8229b70275afcdf9e17db47d1" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.12.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Mambaforge-4.12.0-3-MacOSX-x86_64.sh#17ecce907a048240970cc9a546369aed07bcd21f30116ad43249360dce69edcd" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.13.0-1000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.13.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Mambaforge-4.13.0-1-Linux-aarch64.sh#69e3c90092f61916da7add745474e15317ed0dc6d48bfe4e4c90f359ba141d23" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.13.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Mambaforge-4.13.0-1-Linux-ppc64le.sh#ff41608c73da7deb01f741682e9b6c92435f4b2aff2aecde353093d3125126cf" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.13.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Mambaforge-4.13.0-1-Linux-x86_64.sh#412b79330e90e49cf7e39a7b6f4752970fcdb8eb54b1a45cc91afe6777e8518c" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.13.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Mambaforge-4.13.0-1-MacOSX-arm64.sh#6263560d2b0902942841667721dad3621c05f704f6b080d968ad355aeca51486" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.13.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Mambaforge-4.13.0-1-MacOSX-x86_64.sh#bc42d606b67ace370847deb849e7d1ea2879b0be78bb1be51b020c3cb4e5bef2" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.14.0-0000066400000000000000000000031231476513315000254100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.14.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Mambaforge-4.14.0-0-Linux-aarch64.sh#37221b8d818951fab125c0bfb6cc6e83dac059f66892d2544a83192828d8e2c4" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.14.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Mambaforge-4.14.0-0-Linux-ppc64le.sh#607bbd38aa21af4c79a663f2a183a06cca054efdd8d617c17370522504c7be1e" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.14.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Mambaforge-4.14.0-0-Linux-x86_64.sh#d47b78b593e3cf5513bafbfa6a51eafcd9f0e164c41c79c790061bb583c82859" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.14.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Mambaforge-4.14.0-0-MacOSX-arm64.sh#35d05a65e19b8e5d596964936ddd6023ae66d664a25ba291a52fec18f06a73b6" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.14.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Mambaforge-4.14.0-0-MacOSX-x86_64.sh#949f046b4404cc8e081807b048050e6642d8db5520c20d5158a7ef721fbf76c5" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.14.0-1000066400000000000000000000031231476513315000254110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.14.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Mambaforge-4.14.0-1-Linux-aarch64.sh#f721dc44d5aba7a24c6f76408979d125e7ed7f1ba56397ff073a9cfd1611f71c" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.14.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Mambaforge-4.14.0-1-Linux-ppc64le.sh#da6cbf1abe89fae4e1246aa64e86e8e155e7938c462f968265266af61fda64cc" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.14.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Mambaforge-4.14.0-1-Linux-x86_64.sh#d9c8337bda234cf53d2743f32efaab41cbc9d942b8fb52b8588996ef0300c82f" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.14.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Mambaforge-4.14.0-1-MacOSX-arm64.sh#48aca11999c866058c8201cbd01361cd1bf35044e36655874238cd57c06b389d" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.14.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Mambaforge-4.14.0-1-MacOSX-x86_64.sh#e0f2c280e5cd4b4211151a9d8e40c3f86b1b53fdb4b4fbb907603409581e696f" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-4.14.0-2000066400000000000000000000031231476513315000254120ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Mambaforge-4.14.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Mambaforge-4.14.0-2-Linux-aarch64.sh#af6b683bb6bf3170a29b1fe37c1356d4b7fd94f9c38019d33d3d1933a5a5f41a" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Mambaforge-4.14.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Mambaforge-4.14.0-2-Linux-ppc64le.sh#ab2cfff59870fbd946d26ed55fc47def32de25879b994eac6c464d079ed39c68" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Mambaforge-4.14.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Mambaforge-4.14.0-2-Linux-x86_64.sh#ac3cabd483712a216f1dddeb92a7f8e198a771390c6627aa94791ab6abc7fae8" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Mambaforge-4.14.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Mambaforge-4.14.0-2-MacOSX-arm64.sh#28b45f0949cb734347656e27acb6feb6da6ff12f93cb8c7546d7195e1ae1beba" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Mambaforge-4.14.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Mambaforge-4.14.0-2-MacOSX-x86_64.sh#efd4ea95da961c8005a28ecb8bde719d0fd408ccac92dafaaa37eab133ff7a52" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/mambaforge-pypy3000066400000000000000000000020611476513315000256130ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Mambaforge-pypy3-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-Linux-ppc64le.sh" "miniconda" verify_py3_latest ;; "Linux-x86_64" ) install_script "Mambaforge-pypy3-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-Linux-x86_64.sh" "miniconda" verify_py3_latest ;; "Linux-aarch64" ) install_script "Mambaforge-pypy3-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-Linux-aarch64.sh" "miniconda" verify_py3_latest ;; "MacOSX-x86_64" ) install_script "Mambaforge-pypy3-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-pypy3-MacOSX-x86_64.sh" "miniconda" verify_py3_latest ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Mambaforge with PyPy3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.10000066400000000000000000000005771476513315000253730ustar00rootroot00000000000000has_tar_xz_support \ && src="https://micropython.org/resources/source/micropython-1.10.tar.xz#8488ec243217c4578f1cf2ed20e749344b01510a52d443da95304949cf7abfdb" \ || src="https://github.com/micropython/micropython/releases/download/v1.10/micropython-1.10.tar.gz#207de28a243d5be59c1d5433670a5c76472ece532b446cc25da6cf3c6e943fbc" install_package micropython-1.10 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.11000066400000000000000000000005771476513315000253740ustar00rootroot00000000000000has_tar_xz_support \ && src="https://micropython.org/resources/source/micropython-1.11.tar.xz#c3d4918149e3b9427a318a8a78efb928f2b724123832f1feb4d7921af490269d" \ || src="https://github.com/micropython/micropython/releases/download/v1.11/micropython-1.11.tar.gz#2edda4ffe283899af6d7b59dd0a0a59f8b845fe0f26017f1a180661338eca35f" install_package micropython-1.11 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.12000066400000000000000000000005771476513315000253750ustar00rootroot00000000000000has_tar_xz_support \ && src="https://micropython.org/resources/source/micropython-1.12.tar.xz#181bfe82ba310a3f91540ee70d373f247141db3f9de8082fb189145df085d1b4" \ || src="https://github.com/micropython/micropython/releases/download/v1.12/micropython-1.12.tar.gz#98fd02366bca23a61c77bbf2b999a45cfc237132db66b5b0874378a5446d81ba" install_package micropython-1.12 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.13000066400000000000000000000005771476513315000253760ustar00rootroot00000000000000has_tar_xz_support \ && src="https://micropython.org/resources/source/micropython-1.13.tar.xz#fb5434ec1fd2f7d06733696b020a992e69005532bcb97a9b4158ec1fffbc9c1e" \ || src="https://github.com/micropython/micropython/releases/download/v1.13/micropython-1.13.tar.gz#9ab32eb2c19a682f6de7e9b4226de849c42cb92e1ecb4cf56438a75d763bd451" install_package micropython-1.13 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.14000066400000000000000000000006231476513315000253670ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.14.tar.xz#97306156fdeab120a1244626c75a929bb820722afdfc1317dbd5dadef388d94c"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.14.zip#9aff4d9d8231d93cb9dac2b239ff947d1f123a0fe7a58614c252474cdd3b88d9"; } $install micropython-1.14 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.15000066400000000000000000000006231476513315000253700ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.15.tar.xz#52d020b3adef6c2bd2b6c8aba672f381c3c99d2b90130ac8d0d7414999cb4e13"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.15.zip#8a0c6b5914a1d1eaf63f4b3c226db5049107f1bc1c6046e4dda8d4c5c4657e97"; } $install micropython-1.15 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.16000066400000000000000000000006231476513315000253710ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.16.tar.xz#48271fb5da97efc22325c3fc1d87ba45b32bab25673206d8d8136c25e4ff29a9"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.16.zip#427adc00d2a99d102e4ce46d9eb4933d168e863f859bb3ce5b84735f0899c1ed"; } $install micropython-1.16 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.17000066400000000000000000000006231476513315000253720ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.17.tar.xz#e322f915cee784de0f8614779cdb88fce175956975b3864e2d1898a53638a2f7"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.17.zip#4dfc60e2ba67e89c0b794c0533bb4e43a10d4e38095d0640b64b4faa9160f244"; } $install micropython-1.17 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.18000066400000000000000000000006231476513315000253730ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.18.tar.xz#96fc71b42ed331c64e1adc5a830ec4f29f2975c23e8751109c03f32b80fa3eb4"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.18.zip#90fa8049cf275310638b9e9c77121f6042f7250b814ef622f9522befde009f57"; } $install micropython-1.18 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.19.1000066400000000000000000000006311476513315000255320ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.19.1.tar.xz#940e3815e8c425c6eaed3a2aa30d320220cc012a2654b6e086e1b6f0567df350"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.19.1.zip#7047ce208627457c6881850527edb78189a1855a974aa34e2d929c9a3b3c5cc3"; } $install micropython-1.19.1 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.20.0000066400000000000000000000006311476513315000255210ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.20.0.tar.xz#098ef8e40abdc62551b5460d0ffe9489074240c0cb5589ca3c3a425551beb9bf"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.20.0.zip#6a2ce86e372ee8c5b9310778fff7fca1daa580afa28ea755f1a303675a8612b7"; } $install micropython-1.20.0 "$src" micropython pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.21.0000066400000000000000000000006301476513315000255210ustar00rootroot00000000000000has_tar_xz_support \ && { install=install_package; src="https://micropython.org/resources/source/micropython-1.21.0.tar.xz#abd2152613559d3f44728668346e78be9d93458133a03b700baf222c322fd4d5"; } \ || { install=install_zip; src="https://micropython.org/resources/source/micropython-1.21.0.zip#12521faacc7191353f2739267bd9fd2a5e60ea04fb47df74f8e22b6bf59ba967"; } $install micropython-1.21.0 "$src" micropythonpyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.9.3000066400000000000000000000006071476513315000254560ustar00rootroot00000000000000has_tar_xz_support \ && src="https://micropython.org/resources/source/micropython-1.9.3.tar.xz#3aa37065f5ea8df372d36253d0ae6333c68572e577df8558d4b7b93e070c624d" \ || src="https://github.com/micropython/micropython/releases/download/v1.9.3/micropython-1.9.3.tar.gz#f94c0b4834edca625b86c0846c89e609ee8fbdbe98e7f719d5108d74b6b4945e" install_package micropython-1.9.3 "$src" micropython_1_9 pyenv-2.5.4/plugins/python-build/share/python-build/micropython-1.9.4000066400000000000000000000006071476513315000254570ustar00rootroot00000000000000has_tar_xz_support \ && src="https://micropython.org/resources/source/micropython-1.9.4.tar.xz#1d358d99e908a94fd6dd0d6b448ee56c5830b609cf27a42e0db3bee40cc52a9e" \ || src="https://github.com/micropython/micropython/releases/download/v1.9.4/micropython-1.9.4.tar.gz#0db042011bffcbd65362b67eb3cca87eaefa9f2a55b747fa75e922c706b8ce1a" install_package micropython-1.9.4 "$src" micropython_1_9 pyenv-2.5.4/plugins/python-build/share/python-build/micropython-dev000066400000000000000000000001321476513315000255550ustar00rootroot00000000000000install_git micropython-dev https://github.com/micropython/micropython master micropython pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-2.2.2000066400000000000000000000016351476513315000250370ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-2.2.2-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-2.2.2-Linux-x86.sh#c6c7847066dbf459f3934f7fc870d2b0919cf2cbdad78601e85c2c720daadc9d" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-2.2.2-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-2.2.2-Linux-x86_64.sh#1cb05546029363279b0d6be5d66e7254b7e2b52637a02601483771f6248dde43" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-2.2.2-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-2.2.2-MacOSX-x86_64.sh#69139f6c3988b9dc7900e8e65a1f265745b185b6a60e577fe2fd4ff84646c94e" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.0.0000066400000000000000000000016351476513315000250340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.0.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.0.0-Linux-x86.sh#ffd2fb01d0c379d5e11a07f0712ebbddae73f24fe266d1af3c3fd93cc383ca8b" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.0.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.0.0-Linux-x86_64.sh#09b3a81ea0421260ae5f8a1ba8a6a21b1e9f0c745d43b997010f11ad1920dbe3" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.0.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.0.0-MacOSX-x86_64.sh#8f825d04146a8229154c54cf07e9cafd9b1fe44dbcfe92c36020a502489e04da" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.0.4000066400000000000000000000016351476513315000250400ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.0.4-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.0.4-Linux-x86.sh#b3f392e042469a598e2cd74886d1e15c4708e190a4b188f50fa61c057d7a0ffe" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.0.4-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.0.4-Linux-x86_64.sh#39f75a6d1619109b96756b4882d962ee12e40e07aa6d662eec10a88f19950eaa" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.0.4-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.0.4-MacOSX-x86_64.sh#a457695a2c1216ee91f23d6a1cf2a911178382ee25fd5166ad21d45d5e57de5b" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.0.5000066400000000000000000000016351476513315000250410ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.0.5-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.0.5-Linux-x86.sh#7f1b78d7380c664f65d811e76f3515c46689947634752e711693202a7451b85b" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.0.5-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.0.5-Linux-x86_64.sh#5439a10dc7ff66fa48f5b40290adfad01e58db3b03317d87f90aaf72deda862a" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.0.5-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.0.5-MacOSX-x86_64.sh#5ba297923cb06ed7077c4ee5e4213bc7db2878dbec9ccba1d4c9c61d5e2697ee" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.10.1000066400000000000000000000016431476513315000251150ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.10.1-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.10.1-Linux-x86.sh#509ee56f1590705472fdac4a00aa7191f79a6a09daf4af088e92f93c648d815e" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.10.1-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.10.1-Linux-x86_64.sh#363f56f5608d1552325549e7371fcf460c5ed45484eb300058e3b99c997808b5" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.10.1-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.10.1-MacOSX-x86_64.sh#61a1e468a79cca45a518b1760033e7af89108bf88487afead79f96e3229b422a" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.16.0000066400000000000000000000016431476513315000251220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.16.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.16.0-Linux-x86.sh#57e9659848e6322cb18c1c4a5c844a4f7dc5e784dbd8977245769ff9db28dade" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.16.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.16.0-Linux-x86_64.sh#b1facded0d33850e3a467d6e4589830be477bd4f819407b99b033a4d22601e4d" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.16.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.16.0-MacOSX-x86_64.sh#e93517696d4ede4f8ff21ea42272f24508023b83f1e2e2c989d1b32ab19347a9" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.18.3000066400000000000000000000000551476513315000251230ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/miniconda2-3.18.3" pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.3.0000066400000000000000000000016351476513315000250370ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.3.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.3.0-Linux-x86.sh#415119946afab438ee2ec9d9cd063977da780029d5561d2558101233913f226a" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.3.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.3.0-Linux-x86_64.sh#e071ff3ffb9b4df65edf5e780d576c901753fecccd10e5af629138036aa51de3" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.3.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.3.0-MacOSX-x86_64.sh#9e9a65c69a1f4ec3b4df05f477b517dfa1088182344bfe8009f58d0b4bd00e5c" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.4.2000066400000000000000000000016351476513315000250420ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.4.2-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.4.2-Linux-x86.sh#f198359f0b34f7efa704235d24126160930b7ea7205127880f3acb0a47999413" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.4.2-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.4.2-Linux-x86_64.sh#97d4e234f6abca0c53c606b8a7a73b909cc05a7703c512f4ea855de83b753db1" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.4.2-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.4.2-MacOSX-x86_64.sh#f428977cbef0d5b78379d886735c75e446a482ecb6b5605837d6c2738ddcd074" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.7.0000066400000000000000000000016271476513315000250440ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.7.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.7.0-Linux-x86.sh#cada23bbaab6f21053d45f6d76cf311dffb2f234659fcef0b6a33a6d769317cb" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.7.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.7.0-Linux-x86_64.sh#ed6fd3f85dc43ca10e41355bf3efc40bffd64f2364aecad24ac68a9f1009a469" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.7.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.7.0-MacOSX-x86_64.sh#9a8e731a2a3bd6ab3d5b7304c3c783c04582386142fe39ceb7d5bfabdd74d8eb" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.8.3000066400000000000000000000016271476513315000250500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.8.3-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.8.3-Linux-x86.sh#253a95fac2dbcc01ad5ce5a78d241a362482e1fbb24b1000ea5e217f55825cb6" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.8.3-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.8.3-Linux-x86_64.sh#7ac19397731ffb212ed5534c29cd25f5f4c0c81669707ba6da8635cf1431c114" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.8.3-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.8.3-MacOSX-x86_64.sh#e19e16b7969fb256d68f7de3a4e02331ba04e1c48a262d2b9f66db106e016257" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-3.9.1000066400000000000000000000016351476513315000250460ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda-3.9.1-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda-3.9.1-Linux-x86.sh#f3cdc8d774acce05462eb07d2676162c519e1e5d35c98d1dc3d6eb7b262da0b2" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda-3.9.1-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.9.1-Linux-x86_64.sh#64f2b5047f944bb9b06e46c7281e9edffd412981c93e31d4c111287a1d30fef4" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda-3.9.1-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda-3.9.1-MacOSX-x86_64.sh#ea529626cfb3519eebee83c40965f0a58375e0826c6777b759eb0c42ca9970d2" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda-latest000066400000000000000000000000551476513315000256650ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/miniconda2-latest" pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-2.7-4.8.3000066400000000000000000000015551476513315000254370ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-py27_4.8.3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-py27_4.8.3-Linux-ppc64le.sh#120b300120b1362831f2075cc0bd452f" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-py27_4.8.3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-py27_4.8.3-Linux-x86_64.sh#19ce7d0039ab349914d928e7f32b1c1b" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-py27_4.8.3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-py27_4.8.3-MacOSX-x86_64.sh#14e2d294decc5a48a449b588f5819c10" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-3.18.3000066400000000000000000000016521476513315000252110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-3.18.3-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-3.18.3-Linux-x86.sh#1eceb3a763ab784af41a46dfd96a520659957b5fefdc1f4d53f00de43b539be0" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-3.18.3-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-3.18.3-Linux-x86_64.sh#dd16e093aec2346af4e8f383a9dedb9a3d6c1a0cb7637b180e1e0790dfa55e81" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-3.18.3-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-3.18.3-MacOSX-x86_64.sh#c90b37e4ba866ac2195ddf9ffe5549311279041def27ade29f661f5707d43c94" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-3.19.0000066400000000000000000000016521476513315000252070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-3.19.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-3.19.0-Linux-x86.sh#869d65bed0927ff78973947f619558ed8be282851632449631d1923e3ac814d6" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-3.19.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-3.19.0-Linux-x86_64.sh#646b4d5398f8d76a0664375ee6226611c43ee3d49de3eb03efe7480e3c3b9ebf" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-3.19.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-3.19.0-MacOSX-x86_64.sh#32915acbfc8491e9fbe12b90a611a76b84e15f2cdef5272f576bfe77a4ef7061" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.0.5000066400000000000000000000016441476513315000251240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-4.0.5-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-4.0.5-Linux-x86.sh#fc85229837ef2f0571e0c369e6de8ae7339b6cd9f16449efce0a2a01f0bec110" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.0.5-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.0.5-Linux-x86_64.sh#ada5b7942e519829bc5e8e638d525e009676a7a598cf3dd80f041f6d5e39ddbb" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.0.5-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.0.5-MacOSX-x86_64.sh#7471adcdf7ff1f4e7464617992f57fb7f6f58dbc16ce2455d441dc2c2660e350" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.1.11000066400000000000000000000016521476513315000252010ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-4.1.11-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-4.1.11-Linux-x86.sh#5c4f6e121ddcbd24c7f7d3e7a6ce06c60cf2c98b14895620f1d7805d75bc5a9f" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.1.11-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.1.11-Linux-x86_64.sh#4cdd4707c8bd2959551e40c6d4561ebec2711e034a04305e2dd1f88f038edb04" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.1.11-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.1.11-MacOSX-x86_64.sh#a974389c7aab8058f14fa7d4bc00e5bb5316a3da4b0ca1463b854701532297d7" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.3.14000066400000000000000000000016511476513315000252050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-4.3.14-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-4.3.14-Linux-x86.sh#3ff873687fa5cd40f3d32ac8578003b97e98090b8fc1fa969bcfd087897f598d" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.3.14-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.14-Linux-x86_64.sh#2dc629843be954fc747f08ffbcb973b5473f6818464b82a00260c38f687e02f1" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.3.14-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.14-MacOSX-x86_64.sh#de5ec11463073f2d9cb4c7ea18e128ba24142d9065926a977262e61c66f61ae8" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.3.21000066400000000000000000000016511476513315000252030ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-4.3.21-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-4.3.21-Linux-x86.sh#180b46832849ecba5cfb19e1cd60a38f98e02ac2fd1517648771af8f049b7d50" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.3.21-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.21-Linux-x86_64.sh#5097d5ec484a345c8785655113b19b88bfcd69af5f25a36c832ce498f02ea052" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.3.21-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.21-MacOSX-x86_64.sh#ec996889bed2f4bfbd6775222dcd5e1633e50b203e56643944611501a79b8037" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.3.27000066400000000000000000000016611476513315000252120ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-4.3.27.1-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-4.3.27.1-Linux-x86.sh#3d80246ff3942599669f86c10468e25af482cdd1197c3168027ef6680c857f95" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.3.27.1-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.27.1-Linux-x86_64.sh#f7bb442faeed33330564bfc33188a9dcd4ebe2ab3771aa89a823c03e67197e1d" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.3.27-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.27-MacOSX-x86_64.sh#7e3d2bc3e48f1daca127062a59e518df37f279aa750ca595c2c8c9569eff2fba" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.3.30000066400000000000000000000016551476513315000252070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-4.3.30-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-4.3.30-Linux-x86.sh#3727dcc1561be246c052d6be210b5fd748bf32407cb7e06d0322fe4f79c77482" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.3.30-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.30-Linux-x86_64.sh#0891000ca28359e63aa77e613c01f7a88855dedfc0ddc8be31829f3139318cf3" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.3.30.1-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-4.3.30.1-MacOSX-x86_64.sh#1d4eb025ce58e6f0d5e19b39191ca17dee1fe3b2fd7d425a7418d99fe01fd65e" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.3.31000066400000000000000000000015111476513315000251770ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-4.3.31-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda2-4.3.31-Linux-x86.sh#4067ba22e1d687f92b11531a0b30b17f" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.3.31-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.3.31-Linux-x86_64.sh#da2dd466d26e33a2b1f72fdb853a8ff0" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.3.31-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.3.31-MacOSX-x86_64.sh#2c499488605bafd9e13a430f299f1489" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.4.10000066400000000000000000000020251476513315000251760ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.4.10-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.4.10-Linux-ppc64le.sh#c6bf34cef423be4cda46df61fd09e069" "miniconda" verify_py27 ;; "Linux-x86" ) install_script "Miniconda2-4.4.10-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda2-4.4.10-Linux-x86.sh#1e8bf30cb77548f6aae9f4444b826fcb" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.4.10-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.4.10-Linux-x86_64.sh#dd54b344661560b861f86cc5ccff044b" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.4.10-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.4.10-MacOSX-x86_64.sh#20e0f8851c93331f763635c89840c39c" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.5.1000066400000000000000000000020151476513315000251160ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.5.1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.1-Linux-ppc64le.sh#02a0628652df3ab5917568606fecb8c3" "miniconda" verify_py27 ;; "Linux-x86" ) install_script "Miniconda2-4.5.1-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.1-Linux-x86.sh#9da5b43024d7edba30d0359c547cd2e5" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.5.1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.1-Linux-x86_64.sh#332aeff0bb6b45bbf7e220dec17ba867" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.5.1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.1-MacOSX-x86_64.sh#ad96c4012ca4d84d94f94d9c2f90a889" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.5.11000066400000000000000000000020251476513315000252000ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.5.11-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.11-Linux-ppc64le.sh#b85a019f75ff87714eb3254dd1f3390f" "miniconda" verify_py27 ;; "Linux-x86" ) install_script "Miniconda2-4.5.11-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.11-Linux-x86.sh#187c460ffc6ea5f890b512320b2994c6" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.5.11-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.11-Linux-x86_64.sh#458324438b7b0e5afcc272b63d44195d" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.5.11-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.11-MacOSX-x86_64.sh#a444da43ad50a83c332ea1fb7a5bb96c" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.5.12000066400000000000000000000020251476513315000252010ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.5.12-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.12-Linux-ppc64le.sh#e441328782c71c7ce71cc2a668df0451" "miniconda" verify_py27 ;; "Linux-x86" ) install_script "Miniconda2-4.5.12-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.12-Linux-x86.sh#56c90370226fd410c9b0086bd693d9c0" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.5.12-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.12-Linux-x86_64.sh#4be03f925e992a8eda03758b72a77298" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.5.12-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.12-MacOSX-x86_64.sh#76041da218ab91e2c9538a5dc19cd14e" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.5.4000066400000000000000000000020151476513315000251210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.5.4-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.4-Linux-ppc64le.sh#3e26ee6447c8025609ea1e410f768417" "miniconda" verify_py27 ;; "Linux-x86" ) install_script "Miniconda2-4.5.4-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.4-Linux-x86.sh#a638ae058a0ce15c5b289d151c488045" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.5.4-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.4-Linux-x86_64.sh#8a1c02f6941d8778f8afad7328265cf5" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.5.4-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.5.4-MacOSX-x86_64.sh#35f4ca99d33ed56f68745eeaf1449274" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.6.14000066400000000000000000000015251476513315000252100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.6.14-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.6.14-Linux-ppc64le.sh#76eeccfcf127bb29ce71a279ebd185a9" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.6.14-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.6.14-Linux-x86_64.sh#faa7cb0b0c8986ac3cacdbbd00fe4168" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.6.14-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.6.14-MacOSX-x86_64.sh#6665a5911f92dce1cf6d1021249af9db" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.7.10000066400000000000000000000015251476513315000252050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.7.10-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.10-Linux-ppc64le.sh#dee73c820a4e3af712f0b3ff02f57264" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.7.10-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.10-Linux-x86_64.sh#3bc6ffc6cda8efa467926dfd92a30bca" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.7.10-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.10-MacOSX-x86_64.sh#f540257a4b1df264e6f72c75f75620bb" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-4.7.12000066400000000000000000000027021476513315000252050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda2-4.7.12-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12-Linux-ppc64le.sh#59325e5b37e93f39ab4b3987abe1b7dd" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.7.12-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12-Linux-x86_64.sh#5a218d9dce3a77905d17ae87ac72a1e8" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.7.12-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12-MacOSX-x86_64.sh#2498099a426fcaafd1068fd6d79e3a6d" "miniconda" verify_py27 ;; "Linux-ppc64le" ) install_script "Miniconda2-4.7.12.1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12.1-Linux-ppc64le.sh#f00e3c5881c2629a9b516cc7a62bbc3c" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-4.7.12.1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.sh#23bf3acd6aead6e91fb936fc185b033e" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-4.7.12.1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12.1-MacOSX-x86_64.sh#5a10de42eb90c1c21dbda191f1ec19b1" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda2-latest000066400000000000000000000013471476513315000257540ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda2-latest-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86.sh" "miniconda" verify_py27 ;; "Linux-x86_64" ) install_script "Miniconda2-latest-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh" "miniconda" verify_py27 ;; "MacOSX-x86_64" ) install_script "Miniconda2-latest-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda2-latest-MacOSX-x86_64.sh" "miniconda" verify_py27 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda2 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-2.2.2000066400000000000000000000016431476513315000251210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-2.2.2-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-2.2.2-Linux-x86.sh#55a8d6fbd680a4959525c600f3d30475af54b338beee7cd1b44a10d8122e3ee4" "miniconda" verify_py33 ;; "Linux-x86_64" ) install_script "Miniconda3-2.2.2-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-2.2.2-Linux-x86_64.sh#4fb79fd66c228e221e8e6627570c84efb785f90ede576d6697e91f906b515548" "miniconda" verify_py33 ;; "MacOSX-x86_64" ) install_script "Miniconda3-2.2.2-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-2.2.2-MacOSX-x86_64.sh#040065c06fdeaade1bec67418573608763f6c8c481e0e4e6a9f267598767ab33" "miniconda" verify_py33 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.0.0000066400000000000000000000016431476513315000251160ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.0.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.0.0-Linux-x86.sh#1280ea8cbfcbd3f2a490b094657f2af7872752629b4895b88163f6d0d50dca83" "miniconda" verify_py33 ;; "Linux-x86_64" ) install_script "Miniconda3-3.0.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.0.0-Linux-x86_64.sh#6bfa6dd73140f00b15e49a8092ec74dbbb96ad28d68a5e05dedd9b427539fcaf" "miniconda" verify_py33 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.0.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.0.0-MacOSX-x86_64.sh#b693cfdd2c4b819cd2e977b7200277e7374bcc1578a3d1975255a28887896597" "miniconda" verify_py33 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.0.4000066400000000000000000000016431476513315000251220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.0.4-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.0.4-Linux-x86.sh#1046256accc3b752f4625658e7d845d65c14c7fbb7346579ee828adf7139471d" "miniconda" verify_py33 ;; "Linux-x86_64" ) install_script "Miniconda3-3.0.4-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.0.4-Linux-x86_64.sh#afe03bbed5001a5352e81c018e0bb14e6ade2baa09ecf689febfd6edecb5e93a" "miniconda" verify_py33 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.0.4-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.0.4-MacOSX-x86_64.sh#986525923231b4796c1eb13f2e4defae9aad5ed09b3e32c01b7ebb0aad4ad870" "miniconda" verify_py33 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.0.5000066400000000000000000000016431476513315000251230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.0.5-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.0.5-Linux-x86.sh#014d0e44b752d9e91373a3c56252b62c0f29b628a8584f8b5515c7c3d8acc6be" "miniconda" verify_py33 ;; "Linux-x86_64" ) install_script "Miniconda3-3.0.5-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.0.5-Linux-x86_64.sh#eaf8c5005645eecd18cc09d2da2a69314057a9e36eadc5084120bc1deffa332b" "miniconda" verify_py33 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.0.5-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.0.5-MacOSX-x86_64.sh#7c088951665e2c35574f6dde81189467d80806caff47872887525ed3d0b4dbd0" "miniconda" verify_py33 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-22.11.1-1000066400000000000000000000033421476513315000257750ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_22.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_22.11.1-1-Linux-aarch64.sh#48a96df9ff56f7421b6dd7f9f71d548023847ba918c3826059918c08326c2017" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_22.11.1-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py310_22.11.1-1-Linux-ppc64le.sh#4c86c3383bb27b44f7059336c3a46c34922df42824577b93eadecefbf7423836" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_22.11.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_22.11.1-1-Linux-s390x.sh#a150511e7fd19d07b770f278fb5dd2df4bc24a8f55f06d6274774f209a36c766" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_22.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_22.11.1-1-Linux-x86_64.sh#00938c3534750a0e4069499baf8f4e6dc1c2e471c86a59caa0dd03f4a9269db6" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_22.11.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_22.11.1-1-MacOSX-arm64.sh#22eec9b7d3add25ac3f9b60621d8f3d8df3e63d4aa0ae5eb846b558d7ba68333" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_22.11.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_22.11.1-1-MacOSX-x86_64.sh#7406579393427eaf9bc0e094dcd3c66d1e1b93ee9db4e7686d0a72ea5d7c0ce5" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.1.0-1000066400000000000000000000033261476513315000257160ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.1.0-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-aarch64.sh#80d6c306b015e1e3b01ea59dc66c676a81fa30279bc2da1f180a7ef7b2191d6e" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_23.1.0-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-ppc64le.sh#9ca8077a0af8845fc574a120ef8d68690d7a9862d354a2a4468de5d2196f406c" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.1.0-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-s390x.sh#0d00a9d34c5fd17d116bf4e7c893b7441a67c7a25416ede90289d87216104a97" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.1.0-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh#32d73e1bc33fda089d7cd9ef4c1be542616bd8e437d1f77afeeaf7afdb019787" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.1.0-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-MacOSX-arm64.sh#cc5bcf95d5db0f7f454b2d800d52da8b70563f8454d529e7ac2da9725650eb27" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.1.0-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-MacOSX-x86_64.sh#bfb81814e16eb450b1dbde7b4ecb9ebc5186834cb4ede5926c699762ca69953b" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.10.0-1000066400000000000000000000033641476513315000260000ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.10.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.10.0-1-Linux-aarch64.sh#3b8698e433dd9e8f948f94939b176b7819807bedb86020b81e2fca674d3df3b4" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_23.10.0-1-Linux-ppc64le.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.10.0-1-Linux-ppc64le.sh#8ba2b32ee15be9e43c3712d9235e8c6f1350de733e72f67ef035c878eee134e5" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.10.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.10.0-1-Linux-s390x.sh#ab037a5df6414fe48979285769a61bf99e46d1efd1c98bd3b0a9ab767862f86b" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.10.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.10.0-1-Linux-x86_64.sh#c7a34df472feb69805b64df6e8db58363c5ccab41cd3b40b07e3e6dfb924359a" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.10.0-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.10.0-1-MacOSX-arm64.sh#a1477dfb4edfe922c2d1ed8dce90c16e6c57b3008f9503fae804acfda67736ae" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.10.0-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.10.0-1-MacOSX-x86_64.sh#bea320962dce404ecc1f6f4b0c0462cd3300df8ab165e5cb5bcee372c498535f" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.11.0-1000066400000000000000000000027621476513315000260020ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.11.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-1-Linux-aarch64.sh#30b3f26fee441c5d70bd50ec06ea1acaa0e373ad30771165eada3f6bdf27766a" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.11.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-1-Linux-s390x.sh#54bfe6a47e24ddaa74b02c88d64596c1234fdf6c3789740471dea2bf3c685392" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.11.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-1-Linux-x86_64.sh#6581658486be8e700d77e24eccafba586a0fbafafadcf73d35ab13eaee4b80b1" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.11.0-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-1-MacOSX-arm64.sh#570f66f7264d8ba3195fc0755baed35320842b36fb34ef16bdc142f1dc616cae" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.11.0-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-1-MacOSX-x86_64.sh#6517332e5af2088a0413dd9f536f258814efb6d5b9f78011a6f2ea53e2874484" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.11.0-2000066400000000000000000000027621476513315000260030ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.11.0-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-2-Linux-aarch64.sh#85bb96bca04b75f2081b4c0f7f10476fd67fba1637c18b07272aa3a518df5596" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.11.0-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-2-Linux-s390x.sh#fd506291eb51641e8cd3164c09fec31826f26dc446c3da9bb4c88fe35c95dfe7" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.11.0-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-2-Linux-x86_64.sh#35a58b8961e1187e7311b979968662c6223e86e1451191bed2e67a72b6bd0658" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.11.0-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-2-MacOSX-arm64.sh#958a8d6e14d9eb843b24ba4019a1b62e0dedd819d844247485fd0c0ea4acbc61" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.11.0-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.11.0-2-MacOSX-x86_64.sh#07a6f46146993510d5d839ee014fc2229f7870d92aa73a52f11dd240833f08fb" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.3.1-0000066400000000000000000000033261476513315000257200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.3.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Linux-aarch64.sh#6950c7b1f4f65ce9b87ee1a2d684837771ae7b2e6044e0da9e915d1dee6c924c" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_23.3.1-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Linux-ppc64le.sh#b3de538cd542bc4f5a2f2d2a79386288d6e04f0e1459755f3cefe64763e51d16" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.3.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Linux-s390x.sh#ed4f51afc967e921ff5721151f567a4c43c4288ac93ec2393c6238b8c4891de8" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.3.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Linux-x86_64.sh#aef279d6baea7f67940f16aad17ebe5f6aac97487c7c03466ff01f4819e5a651" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.3.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-MacOSX-arm64.sh#9d1d12573339c49050b0d5a840af0ff6c32d33c3de1b3db478c01878eb003d64" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.3.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-MacOSX-x86_64.sh#5abc78b664b7da9d14ade330534cc98283bb838c6b10ad9cfd8b9cc4153f8104" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.5.0-3000066400000000000000000000033261476513315000257240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.5.0-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.0-3-Linux-aarch64.sh#a632110a9ebddd8528b26241663ee9368d218e36b40e570072774897762f1de8" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_23.5.0-3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.0-3-Linux-ppc64le.sh#5ed0af4645f49c4412e33a3f94396bcb3eb25f4a3ccb0bfe5bc23ef06bad6f3f" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.5.0-3-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.0-3-Linux-s390x.sh#5701eba074e3c2894949370ab456df48361a2efaad9b11209dbf8258ddf1e331" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.5.0-3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.0-3-Linux-x86_64.sh#738890e7a6f0719a942c632a0aab1df7a5a592c5667d0495d1f0495990a709ba" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.5.0-3-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.0-3-MacOSX-arm64.sh#ff2121c0a8245bbe63ff70cdb76b492c831889225f9c5277e096f08fd03e7f17" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.5.0-3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.0-3-MacOSX-x86_64.sh#03a98ff5d1c813d7bf969203fe404d7a6f149b335c2077703656807721603495" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.5.1-0000066400000000000000000000033261476513315000257220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.1-0-Linux-aarch64.sh#d6a99c45326f8e849b18964090f0f5ac56bc4f173a6b18a4a5057bc09bd128f3" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_23.5.1-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.1-0-Linux-ppc64le.sh#920a8d8f9a6aa6bc1cd2ddf56cb0af779b3c70eb82d61fb05397814adfc0837f" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.5.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.1-0-Linux-s390x.sh#63962e4c21e13b680f62d8c7cf11fb1a4a2192188d0d7c0a0994099470b65567" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.5.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.1-0-Linux-x86_64.sh#9f4cd0a9f7289a1e03b79fe6d06bab0769c46c33a774ea8a94dc3c1883344d85" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.5.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.1-0-MacOSX-arm64.sh#dde48d596695115a05218d694b20212d900a66c005a1926a9018a756b1188f1f" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.5.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.1-0-MacOSX-x86_64.sh#4e5315e39ce5be6d64fb0bf0a62aa6e8d09224542fa5b9a4d695c599bd6f66b0" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.5.2-0000066400000000000000000000033261476513315000257230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.5.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-aarch64.sh#24f7fe91032538cf2d9748facabae346e45e46ca21bb5f2d5875b7865dca6fa4" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_23.5.2-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-ppc64le.sh#3a76e4e400271d1589770dac8f696b03d1faf45fee57da38e8c399b6cb0daadb" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.5.2-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-s390x.sh#7a65b8593db0ec4b561b9968daca7c7c4f5f95cb21fe717ba895fded924bc056" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.5.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh#ea5e6e8a3d5a0247b9df85382d27220fac8e59b5778fd313c5913879cd9baafc" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.5.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-MacOSX-arm64.sh#71b7ca2ae4068504f9c6dab30fd6e83694086241156af1e319d598befe0f3a26" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.5.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-MacOSX-x86_64.sh#13c57188a4bcb7462a7580c9ddf8ff2d301e353c835d33042a51a231667cf25d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-23.9.0-0000066400000000000000000000033261476513315000257250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_23.9.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.9.0-0-Linux-aarch64.sh#bc0f7f0a1c83cdf1330726168518b55454d092c64593f82872a50c4b5742b958" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniconda3-py310_23.9.0-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.9.0-0-Linux-ppc64le.sh#fa9d79e1df278dc72e5935fec3c87c6897a9388895a2a47b0ed49935d71c92e7" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_23.9.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.9.0-0-Linux-s390x.sh#e10a160a44b0356f2ce59ce562855461499202976197ca7e1bf25ccb51dabb57" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_23.9.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.9.0-0-Linux-x86_64.sh#b272a5f843762f0a18f6b70a162cd554a43a06adcd6f5a2102840e41907fffe5" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_23.9.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.9.0-0-MacOSX-arm64.sh#3178aad8c75b30830e97d9a232433df1dfbe6cd34f55e0d7769cfaa17aa49e84" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_23.9.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_23.9.0-0-MacOSX-x86_64.sh#88266dda3e812bf6789fceeb9cfcfbbcada860aa4050ae2a781812fbd077ed35" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-24.1.2-0000066400000000000000000000027311476513315000257170ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_24.1.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-aarch64.sh#e560e737ac0e625dcc19ca2927457c2944434a61280daae2594632aca76d1422" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_24.1.2-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-s390x.sh#014fd09da9f7ecae040d586a6ff4218e508bf0e5e0232be6383ff37973a337c7" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_24.1.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh#8eb5999c2f7ac6189690d95ae5ec911032fa6697ae4b34eb3235802086566d78" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_24.1.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-MacOSX-arm64.sh#01110da80119c11078d2b39a499b6dc086c5fd4b413f4b333d32feb3b03cbe7b" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_24.1.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-MacOSX-x86_64.sh#f078682fca26350717c1940650c227f9843fe9f3f0ecc87bf2665bccc5c64f9c" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-24.11.1-0000066400000000000000000000027621476513315000260030ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_24.11.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.11.1-0-Linux-aarch64.sh#70fa20d714ba54114c41990a7222a49bd3c833a0f602bd0e0df507bb2f787035" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_24.11.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.11.1-0-Linux-s390x.sh#c5021ecb894cc7b1bb2d62f2156bdaf3e642235b501998bcc730024b07515c74" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_24.11.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.11.1-0-Linux-x86_64.sh#7a3cdbb78a642b2b6dd0687c9e09824e53330368ab57406e27d88e25c4fe4e40" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_24.11.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.11.1-0-MacOSX-arm64.sh#73d7eb2569e976c6da1946723a3b8bebf0f2aaccef80b28f8eef69fd835572b1" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_24.11.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.11.1-0-MacOSX-x86_64.sh#2f8be5e7beeda8d161be2254d1d1d7e786ca8d11602bd1b7dde1134fcad365fa" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-24.3.0-0000066400000000000000000000027311476513315000257170ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_24.3.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.3.0-0-Linux-aarch64.sh#cacbd0c4b829dae73ddbcee6b30674dc7aa20bf6dea720929fb01d4b6279f743" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_24.3.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.3.0-0-Linux-s390x.sh#fb0f113b0ad2eb9a05b017f49d4a27960ff9ec3d8ec0b580b79efb8c84d15d8e" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_24.3.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.3.0-0-Linux-x86_64.sh#def595b1b182749df0974cddb5c8befe70664ace16403d7a7bf54467be5ea48b" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_24.3.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.3.0-0-MacOSX-arm64.sh#ceae63e7c99b4ff33ddb1a9973956d829d4a00d39f1f7c6e2056e0e076059535" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_24.3.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.3.0-0-MacOSX-x86_64.sh#094c5a94818caf41deba41411876c3cffa918efdf8ada40dc32bcc535d181c78" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-24.4.0-0000066400000000000000000000027501476513315000257210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_24.4.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.4.0-0-Linux-aarch64.sh#68f3a537bf2ba8031961c8be6b52236c75478c797e0333e055539f02147676b8" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_24.4.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.4.0-0-Linux-s390x.sh#d5d06f9aa66d9cc9a23d6278826cb09f44f8e005b8b8fcf2664bef02e61ca751" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_24.4.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.4.0-0-Linux-x86_64.sh#fdaa5afdea8c07b6f2203b8f95abe0e4e8c4d3fd3c10d19fe590311446591ffa" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_24.4.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.4.0-0-MacOSX-arm64.sh#21f0b7c653518a6eb6135593c509cefc78fdff839bb2e887d36bc03eda607faf" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_24.4.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.4.0-0-MacOSX-x86_64.sh#c2eed72ff97b4eb81bc1171616b0ff48a440a2e1ad5638e1899b80286767c568" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-24.5.0-0000066400000000000000000000027501476513315000257220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_24.5.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.5.0-0-Linux-aarch64.sh#edcf076c80846beded0b72e98811cf7b93d0abc2ae93c060efc76f8da1e6fc45" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_24.5.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.5.0-0-Linux-s390x.sh#e00f3d03d13fc4fa394a5d20a5476087237ee6cb029eba3b02322acc104b530b" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_24.5.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.5.0-0-Linux-x86_64.sh#b3d73db6a05069fbdf20dc33fc9b6a29fa7198578f0d090c639f5ca0e84102bd" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_24.5.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.5.0-0-MacOSX-arm64.sh#e422602aa19140c600b5889e5b41a0d7187640107ea82fcb5da857dd25330148" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_24.5.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.5.0-0-MacOSX-x86_64.sh#6d7c1cc138adfc4bb2ccbb8a22eb8e9eb13a366b6af0d63245b643e6c3a3c708" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-24.7.1-0000066400000000000000000000027501476513315000257250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_24.7.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.7.1-0-Linux-aarch64.sh#8a5f3510b91f9641c72046f82974a2b95f0b7fee7ed3a9f8223fd5e447c13a2e" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_24.7.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.7.1-0-Linux-s390x.sh#f0fa28fb5ee38ac1950fdb22cbef435f08dbe1846690a7757298e5021152ad38" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_24.7.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.7.1-0-Linux-x86_64.sh#684cda724bc37e3bbbb342e440fc4cac515c92e91a489eb4359feca35382894b" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_24.7.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.7.1-0-MacOSX-arm64.sh#0205a5fca4648832f1a0a3862149722dded533cabbb1d274609f883690e7ee72" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_24.7.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.7.1-0-MacOSX-x86_64.sh#fb3406a97b59c665640ab427694844676c9c4d3ab7ca551866381b4e547b4dcf" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-24.9.2-0000066400000000000000000000027501476513315000257300ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_24.9.2-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.9.2-0-Linux-aarch64.sh#5d022f16ecb01d33ac8c85a87a0a8dccfb025dc90b20dbd56c4b9ae8f9727578" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_24.9.2-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.9.2-0-Linux-s390x.sh#93d75b306151f96a460a80d8849d85636929a90490f44004f4296a0b8399ccc5" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_24.9.2-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.9.2-0-Linux-x86_64.sh#364869f004c6259268b09a667ed476080bf4f44e9c4ab06a293146df8990d43f" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_24.9.2-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.9.2-0-MacOSX-arm64.sh#d666284d5dd9290b446de5dc20e8498545867c7730799cba8f52e97a45db42d2" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_24.9.2-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_24.9.2-0-MacOSX-x86_64.sh#7359ff3963ab3ccdc5eec244c610270b456a9584477cb645aa7539924bdd0482" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-25.1.1-0000066400000000000000000000027501476513315000257200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-aarch64.sh#d8a975d2194aab5ace390c273c5328be89342b956711c1648d02c87e4c4ffeb1" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-s390x.sh#087d1cb3708da2a07def69e925731a87b500a9b5befec5e7666422480a5edc67" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-x86_64.sh#2346f43213d3e96abca95d0a7df2575d52c66030f2feb90d3d58ed3eabe76aa3" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-MacOSX-arm64.sh#e52fabc1c331e79cb4a348eea0ac9fc75742609ed5a41370a1e8790a97c13449" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-MacOSX-x86_64.sh#3d9720b16428a924b09f460f942be1f841c28d9ceeff9149051a8f4241745839" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-25.1.1-1000066400000000000000000000027501476513315000257210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-aarch64.sh#"a72a3247d4c5843bf9ba3e902218ada02e2b75b16260541befd7ac0961077fa9 "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-s390x.sh#072b62a97432048e5ad1e9a987c6739de719192f6c19c79b06d1e05424cd4c35" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-x86_64.sh#585972959914f1f9be463284d477717eb10f7306bda63f2ec3c4c86047b9dd72" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-MacOSX-arm64.sh#0be344f9eb9e7cf7c2d45598922674e599739c9a9f6c5ee1436238005da9dd03" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-MacOSX-x86_64.sh#497d6deb3932f8f0257a3db515419e871a0f1ecb155e0fd80d13ca7bbccbecac" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10-25.1.1-2000066400000000000000000000027501476513315000257220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py310_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-aarch64.sh#5f61143e93d9d48a82aa99a1d7b1c77561f599b9a67ab954862e6e8d6a25c0cc" "miniconda" verify_py310 ;; "Linux-s390x" ) install_script "Miniconda3-py310_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-s390x.sh#89d689248a6855da3e6087cfeebaad6886e4ef46b4e96671bf251bb9aa6b1499" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniconda3-py310_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-x86_64.sh#7f298109ab95b5436632973a04189a125282cc948f1dd1b03fa9cb6c71443915" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniconda3-py310_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-MacOSX-arm64.sh#119e3196d9e67f8eb0f88d4a3188849b5b8bf14a8dd87873c0bff7ce016eea52" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py310_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-MacOSX-x86_64.sh#543d635dcd34256ac87ffe7a242259cf8f639d51a503da4e4eb3e29ecf406302" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.10.1000066400000000000000000000016511476513315000251770ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.10.1-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.10.1-Linux-x86.sh#e9b751fa8bc5372731512e058fa3867ad9e54983b48d462b4c8f7a031953c2bc" "miniconda" verify_py34 ;; "Linux-x86_64" ) install_script "Miniconda3-3.10.1-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.10.1-Linux-x86_64.sh#cbd86f49008319416d1e57f9ac43a42445058f06aaeebe5ab974769887a8628b" "miniconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.10.1-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.10.1-MacOSX-x86_64.sh#58ba40cbd1cf5bba680f94321d2ce22685a2b06ad9252044f06a0018fe99bd62" "miniconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-23.10.0-1000066400000000000000000000033641476513315000260010ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_23.10.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.10.0-1-Linux-aarch64.sh#a60e70ad7e8ac5bb44ad876b5782d7cdc66e10e1f45291b29f4f8d37cc4aa2c8" "miniconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Miniconda3-py311_23.10.0-1-Linux-ppc64le.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.10.0-1-Linux-ppc64le.sh#1a2eda0a9a52a4bd058abbe9de5bb2bc751fcd7904c4755deffdf938d6f4436e" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_23.10.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.10.0-1-Linux-s390x.sh#ae212385c9d7f7473da7401d3f5f6cbbbc79a1fce730aa48531947e9c07e0808" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_23.10.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.10.0-1-Linux-x86_64.sh#d0643508fa49105552c94a523529f4474f91730d3e0d1f168f1700c43ae67595" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script ""Miniconda3-py311_23.10.0-1-MacOSX-arm64.sh "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.10.0-1-MacOSX-arm64.sh#5043144d7eaea2286e30d091b62fcf50f7ed983b092230e56c370b592e7a57f2" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script ""Miniconda3-py311_23.10.0-1-MacOSX-x86_64.sh "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.10.0-1-MacOSX-x86_64.sh#8c50faa3880fdef96967477af09d41c52332998beeee7ef8116c79d4f5023d72" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-23.11.0-1000066400000000000000000000027621476513315000260030ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_23.11.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-1-Linux-aarch64.sh#63c06a1974695e50bbe767a030903d169e637e42d5b7b6d30876b19a01fbbad8" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_23.11.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-1-Linux-s390x.sh#04586c734987a39114b81384014c2cfa89360c518371b6fa249d3062efca27fe" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_23.11.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-1-Linux-x86_64.sh#5b3cefe534e23541f5f703f40d4818e361c3615dbf14651a0f29554c3fc3d0fd" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_23.11.0-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-1-MacOSX-arm64.sh#7901f8f272478657bd023cfd6d832b53213053897efd23c1061bcc35c68c0637" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_23.11.0-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-1-MacOSX-x86_64.sh#7ee24fb01fbe1081d6dd600805f5f9c6a3a12714670ecad65a6dfcf870c8a74d" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-23.11.0-2000066400000000000000000000027621476513315000260040ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_23.11.0-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-2-Linux-aarch64.sh#decd447fb99dbd0fc5004481ec9bf8c04f9ba28b35a9292afe49ecefe400237f" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_23.11.0-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-2-Linux-s390x.sh#53a9e9eb97cd6e318f4f184add069436e1a46124cf864bf2d7bd67043e50e471" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_23.11.0-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-2-Linux-x86_64.sh#c9ae82568e9665b1105117b4b1e499607d2a920f0aea6f94410e417a0eff1b9c" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_23.11.0-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-2-MacOSX-arm64.sh#5694c382e6056d62ed874f22692224c4f53bca22e8135b6f069111e081be07aa" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_23.11.0-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-2-MacOSX-x86_64.sh#2b7f9e46308c28c26dd83abad3e72121ef63916eaf17b63723b5a1f728dc3032" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-23.5.0-3000066400000000000000000000033261476513315000257250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_23.5.0-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.0-3-Linux-aarch64.sh#6e3e60e7093194b3435fde19efc54d0dd78be393bf5b7487cc28cd1039ebed4d" "miniconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Miniconda3-py311_23.5.0-3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.0-3-Linux-ppc64le.sh#c1ab8b5d629f66a1609e456a0d6a83a2896af6dc0b2b702025cb19456030eacd" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_23.5.0-3-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.0-3-Linux-s390x.sh#42e7cc490fc81d9b1dc56cf8bd951e084e804824d60aca3a4b15d35c57ad373e" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_23.5.0-3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.0-3-Linux-x86_64.sh#61a5c087893f6210176045931b89ee6e8760c17abd9c862b2cab4c1b7d00f7c8" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_23.5.0-3-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.0-3-MacOSX-arm64.sh#c4ce7311d2d1c729bf8d98e6d5aa2581ce0b08a1480985e63efaf8529b2fc6ca" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_23.5.0-3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.0-3-MacOSX-x86_64.sh#2503d9e852fcaf85adca825bde84bdc297b118fd2c14316e4f27a93a190a7bdd" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-23.5.1-0000066400000000000000000000033261476513315000257230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_23.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.1-0-Linux-aarch64.sh#a7a68db6676075aa20991d3fac6d7cfdb2bb3c815c0c17ea26fac96241486c6b" "miniconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Miniconda3-py311_23.5.1-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.1-0-Linux-ppc64le.sh#63d6756dd9956e3ff581381fd319088fe23af53df8ccad8c6f029c89f5a1e534" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_23.5.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.1-0-Linux-s390x.sh#4472acdf8bab722a6dc4ef0b59636feac12b3520ef3d88c1bebd11106b596a96" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_23.5.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.1-0-Linux-x86_64.sh#333779c9cae3fe14735949a8dcb9657b9e55ada69e9c60f191c5d582b2deac20" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_23.5.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.1-0-MacOSX-arm64.sh#52b3a134a73d48204e7517fb5b4378bece65a048e9a32c9276eb3fd51989b976" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_23.5.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.1-0-MacOSX-x86_64.sh#834a194e6d790eade3db98a78ec3f2857df13bb8b6661a26a34e67462561015b" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-23.5.2-0000066400000000000000000000033261476513315000257240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_23.5.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-aarch64.sh#3962738cfac270ae4ff30da0e382aecf6b3305a12064b196457747b157749a7a" "miniconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Miniconda3-py311_23.5.2-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-ppc64le.sh#92237cb2a443dd15005ec004f2f744b14de02cd5513a00983c2f191eb43d1b29" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_23.5.2-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-s390x.sh#221a4cd7f0a9275c3263efa07fa37385746de884f4306bb5d1fe5733ca770550" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_23.5.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-x86_64.sh#634d76df5e489c44ade4085552b97bebc786d49245ed1a830022b0b406de5817" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_23.5.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-MacOSX-arm64.sh#c8f436dbde130f171d39dd7b4fca669c223f130ba7789b83959adc1611a35644" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_23.5.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-MacOSX-x86_64.sh#1622e7a0fa60a7d3d892c2d8153b54cd6ffe3e6b979d931320ba56bd52581d4b" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-23.9.0-0000066400000000000000000000033261476513315000257260ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_23.9.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.9.0-0-Linux-aarch64.sh#1242847b34b23353d429fcbcfb6586f0c373e63070ad7d6371c23ddbb577778a" "miniconda" verify_py311 ;; "Linux-ppc64le" ) install_script "Miniconda3-py311_23.9.0-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.9.0-0-Linux-ppc64le.sh#07b53e411c2e4423bd34c3526d6644b916c4b2143daa8fbcb36b8ead412239b9" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_23.9.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.9.0-0-Linux-s390x.sh#707c68e25c643c84036a16acdf836a3835ea75ffd2341c05ec2da6db1f3e9963" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_23.9.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.9.0-0-Linux-x86_64.sh#43651393236cb8bb4219dcd429b3803a60f318e5507d8d84ca00dafa0c69f1bb" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_23.9.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.9.0-0-MacOSX-arm64.sh#4215f6fc572207f73a8f64692b4936b1952051f4cd620eec2ebd1f946e98b886" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_23.9.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_23.9.0-0-MacOSX-x86_64.sh#4b60eb49cf8fea6272bd2060878ab02cbab187dffd2fd732685c3c92a60b62ed" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-24.1.2-0000066400000000000000000000027311476513315000257200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_24.1.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.1.2-0-Linux-aarch64.sh#1e046ef2d9d47289db2491f103c81b0b4baf943a9234ac59bd5bca076c881d98" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_24.1.2-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.1.2-0-Linux-s390x.sh#0489909051fd9e2c9addfa5fbd531ccb7f8f2463ac47376b8854e5a09b1c4011" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_24.1.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.1.2-0-Linux-x86_64.sh#3f2e5498e550a6437f15d9cc8020d52742d0ba70976ee8fce4f0daefa3992d2e" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_24.1.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.1.2-0-MacOSX-arm64.sh#b5c4f646144fa4760bd5f6114ff2e6b49a3ef7c57b993f569adceea784f21a52" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_24.1.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.1.2-0-MacOSX-x86_64.sh#3b26c0867561d0988040193c8efd9f53ca922026f735367436aa05b467b1f187" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-24.11.1-0000066400000000000000000000027621476513315000260040ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_24.11.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.11.1-0-Linux-aarch64.sh#a8846ade7a5ddd9b6a6546590054d70d1c2cbe4fbe8c79fb70227e8fd93ef9f8" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_24.11.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.11.1-0-Linux-s390x.sh#bb499b18dbcbb2d89b22f91fe26fe661f5ed1f1944fdc743560d69cd52a2468f" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_24.11.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.11.1-0-Linux-x86_64.sh#807774bae6cd87132094458217ebf713df436f64779faf9bb4c3d4b6615c1e3a" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_24.11.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.11.1-0-MacOSX-arm64.sh#862af4d7cb257219c6b280848049e09e1aff27acd06d5422359f2249f938e282" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_24.11.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.11.1-0-MacOSX-x86_64.sh#388f669ab95d659b4c97353f756ce93ed2000ec0114edaec9688f8541fa4bcab" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-24.3.0-0000066400000000000000000000027311476513315000257200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_24.3.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.3.0-0-Linux-aarch64.sh#49082882752167cdea60e1aeedac7b73136bdfdd63b9bb3aca3c038901544458" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_24.3.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.3.0-0-Linux-s390x.sh#8e52dd1300c9462367d303a596a931e6ef8db422c7c79194efa6fdb152c92b61" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_24.3.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.3.0-0-Linux-x86_64.sh#4da8dde69eca0d9bc31420349a204851bfa2a1c87aeb87fe0c05517797edaac4" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_24.3.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.3.0-0-MacOSX-arm64.sh#b7663626fedf8395d3fed78383b08060a13bd6747003bdb2a39220407f55cf65" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_24.3.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.3.0-0-MacOSX-x86_64.sh#fdd6294aaa0472f7ddeac89deacceec1469e76bd2a16ac11f37b4ab584fe5089" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-24.4.0-0000066400000000000000000000027501476513315000257220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_24.4.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-Linux-aarch64.sh#d3ed9ff565c7341a4e4c957443ccb4f12f3dd5a087549099e7f199c36469e55c" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_24.4.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-Linux-s390x.sh#f2bea598cb72ed838a6e62b7dd8fbf1c3941a92783ba686822f70108c8c2e543" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_24.4.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-Linux-x86_64.sh#7cb030a12d1da35e1c548344a895b108e0d2fbdc4f6b67d5180b2ac8539cc473" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_24.4.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-MacOSX-arm64.sh#a396cf4ca0088cf2d78517b28732b61697cdcb698528300946ef6409353eca86" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_24.4.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-MacOSX-x86_64.sh#b7f3adebd2b25dbefdc85e16f5ee130ac0d1167f416078f961e90f277476b115" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-24.5.0-0000066400000000000000000000027501476513315000257230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_24.5.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.5.0-0-Linux-aarch64.sh#94a742af7bf5c7bae3dba6bd07d84d94b858b839e15af2ea0cd10fdf2bde8a73" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_24.5.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.5.0-0-Linux-s390x.sh#002963f32aebe1091d5da9a82416831f3c11217e6b4ea164c655f0d11f0cff80" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_24.5.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.5.0-0-Linux-x86_64.sh#38b203bb1f2be78b735ebc00162f29e8e73fcd9a619ed5980490a72193ee1f58" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_24.5.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.5.0-0-MacOSX-arm64.sh#a3d62f20f09e8079db76379090f21b7ae34832dadeb5a250e4fab324c8328727" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_24.5.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.5.0-0-MacOSX-x86_64.sh#9e7dc7e0fbf0e9b2ff6bafdae9bf6ef122ae92d53533c2bbeb73433c0c6a4bd9" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-24.7.1-0000066400000000000000000000027501476513315000257260ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_24.7.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.7.1-0-Linux-aarch64.sh#f0ade904394ac5058dc293dd242a8af5c2005d28e020185691df32a5cc7ce0a0" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_24.7.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.7.1-0-Linux-s390x.sh#124b8f0df8c23e673409a68320f594a32e4e9e9608a3a6be1fddc0d597410e01" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_24.7.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.7.1-0-Linux-x86_64.sh#a098a5b1581d8fd078c430b82e27106602223e335efef708a124e723814d120c" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_24.7.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.7.1-0-MacOSX-arm64.sh#9e7a3e0b835c0b18d561041a49311280ed58a7424a3324da370e69d4350eabcd" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_24.7.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.7.1-0-MacOSX-x86_64.sh#e459d9478ece4415e1a2e9b127da7240823e7d1bf6207a4d92779081b351f773" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-24.9.2-0000066400000000000000000000027501476513315000257310ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_24.9.2-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.9.2-0-Linux-aarch64.sh#c4c12d969be6a02cb7370a0c717400e8eec79dea722ef0fba98d745048948980" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_24.9.2-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.9.2-0-Linux-s390x.sh#8de1e23f3e0a097bc3b9173a1b4b56544bd34d2831b70a71a9d528eeab0dbe90" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_24.9.2-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.9.2-0-Linux-x86_64.sh#62ef806265659c47e37e22e8f9adce29e75c4ea0497e619c280f54c823887c4f" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_24.9.2-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.9.2-0-MacOSX-arm64.sh#7358a1d53e7f857a9b87af148d20cdd00f3a91eca9f663371dfa3d830c375033" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_24.9.2-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_24.9.2-0-MacOSX-x86_64.sh#5d4229c322629cf2932c3a4e181501c98dae35b866c96d208b6688b0e2381604" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-25.1.1-0000066400000000000000000000027501476513315000257210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-aarch64.sh#737f02e2e6c192afbef000f6dba79f4dbbe852193c6890243516ea50d916d31c" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-s390x.sh#6244e894c56afc095eba0d2c2e88125af1a6a661187b136b8d1abc1392cca8eb" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-x86_64.sh#9bc631a7edfc015bbf944d5f48c3852e7c0c83aeae0359b75bee9f402942413a" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-MacOSX-arm64.sh#0189917c28f8c3a8e9f113532225d4878e6f018d215739ccff92f99750fe7083" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-MacOSX-x86_64.sh#af0d2916b3e3aad814f246a85c48ec9658e2b5f4d1cc7f09246d197fa18169c8" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-25.1.1-1000066400000000000000000000027501476513315000257220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-aarch64.sh#288aa5b21b97db7f09bf6da03323b3a3b97d461a4c5bf666be58312eb6b6e311" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-s390x.sh#e0c755e9e2e26f75cccda56fe978e7a964ed559f474486421a0022b7351bc108" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-x86_64.sh#03a253f7ca5cf1fdfca2aedced769d8479cb559b7c92e70f24c176fd9d23bc8e" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-MacOSX-arm64.sh#871ca583ee0be45d5fa36eba4143a6701e775c500c7b30ac519ef1a0205d78c3" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-MacOSX-x86_64.sh#deb025449147280611e6ca8bf89291cddb6eab06e2bff0114ac05f6f67b5ca89" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.11-25.1.1-2000066400000000000000000000027501476513315000257230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py311_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-aarch64.sh#8a1d4407fce7ec552ac6ed655ce93d83549e02b819cacefbb7f640f9051e638b" "miniconda" verify_py311 ;; "Linux-s390x" ) install_script "Miniconda3-py311_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-s390x.sh#0b4d5a3f16dcb2d230ba5dfdfdb848c854006aab6dd1bd3dbf29fcddf04b07a4" "miniconda" verify_py311 ;; "Linux-x86_64" ) install_script "Miniconda3-py311_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-x86_64.sh#d8c1645776c0758214e4191c605abe5878002051316bd423f2b14b22d6cb4251" "miniconda" verify_py311 ;; "MacOSX-arm64" ) install_script "Miniconda3-py311_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-MacOSX-arm64.sh#140b80b4d285bbbcc8616891876ec3613e46acbedb02321b9ddc03ff0784c584" "miniconda" verify_py311 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py311_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-MacOSX-x86_64.sh#41c4ed1ce9f44049346a7efd8311919f82a8115637eced8796b5d18599f50cae" "miniconda" verify_py311 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-24.1.2-0000066400000000000000000000027311476513315000257210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_24.1.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.1.2-0-Linux-aarch64.sh#942a057a52ec99f0fca4f413b87b332f6e61fad95c05fa7cabc003ae0b4471de" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_24.1.2-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.1.2-0-Linux-s390x.sh#7ee6a3c41a825eca3b1c9e3c7155c67f7c26e31a75d7dc4f78f75a4c438e3009" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.1.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.1.2-0-Linux-x86_64.sh#b978856ec3c826eb495b60e3fffe621f670c101150ebcbdeede4f961f22dc438" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_24.1.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.1.2-0-MacOSX-arm64.sh#1c277b1ec046fd1b628390994e3fa3dbac0e364f44cd98b915daaa67a326c66a" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_24.1.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.1.2-0-MacOSX-x86_64.sh#bc45a2ceea9341579532847cc9f29a9769d60f12e306bba7f0de6ad5acdd73e9" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-24.11.1-0000066400000000000000000000027621476513315000260050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_24.11.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.11.1-0-Linux-aarch64.sh#9180a2f1fab799fd76e9ef914643269dcf5bad9d455623b905b87f5d39ae140f" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_24.11.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.11.1-0-Linux-s390x.sh#105bce6b0137f574147b8fdfd5e3a7d6c92f3ea9fbf3e0de61331ea43586e9af" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.11.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.11.1-0-Linux-x86_64.sh#636b209b00b6673471f846581829d4b96b9c3378679925a59a584257c3fef5a3" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_24.11.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.11.1-0-MacOSX-arm64.sh#9d5c5782d24a09075e45f131693d24907d8c45a4e6205c51d4d3a81b72dc5ad7" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_24.11.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.11.1-0-MacOSX-x86_64.sh#71419eaf7f0bc016c41e8e27815609e76f2d6bcfc39426c19ca5e5cf7a2ea36f" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-24.3.0-0000066400000000000000000000027311476513315000257210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_24.3.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.3.0-0-Linux-aarch64.sh#05f70cbc89b6caf84e22db836f7696a16b617992eb23d6102acf7651eb132365" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_24.3.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.3.0-0-Linux-s390x.sh#b601cb8e3ea65a4ed1aecd96d4f3d14aca5b590b2e1ab0ec5c04c825f5c5e439" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.3.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.3.0-0-Linux-x86_64.sh#96a44849ff17e960eeb8877ecd9055246381c4d4f2d031263b63fa7e2e930af1" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_24.3.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.3.0-0-MacOSX-arm64.sh#72d4e9198a6884c0bd86cce2b4a3e8abb05415776e3b142c4b1de625bbaf4c50" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_24.3.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.3.0-0-MacOSX-x86_64.sh#fd71a4bf03fbb21d4b4d25245f17bef6308dfec478e901a60594dfa02e4605eb" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-24.4.0-0000066400000000000000000000027501476513315000257230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_24.4.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.4.0-0-Linux-aarch64.sh#832d48e11e444c1a25f320fccdd0f0fabefec63c1cd801e606836e1c9c76ad51" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_24.4.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.4.0-0-Linux-s390x.sh#e973f1b6352d58b1ab35f30424f1565d7ffa469dcde2d52c86ec1c117db11aad" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.4.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.4.0-0-Linux-x86_64.sh#b6597785e6b071f1ca69cf7be6d0161015b96340b9a9e132215d5713408c3a7c" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_24.4.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.4.0-0-MacOSX-arm64.sh#f4925c0150d232d95de798a64c696f4b2df2745bb997b793506bdfd27bf91e11" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_24.4.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.4.0-0-MacOSX-x86_64.sh#1413369470adb7cf52f8b961e81b3ceeb92f5931a451bef9cb0c42be0ce17ef3" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-24.5.0-0000066400000000000000000000027501476513315000257240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_24.5.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.5.0-0-Linux-aarch64.sh#70afe954cc8ee91f605f9aa48985bfe01ecfc10751339e8245eac7262b01298d" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_24.5.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.5.0-0-Linux-s390x.sh#bd2a0a8ea34c84c860868d5b8efde07afc51cdede76b64dd94e9c3fd2d65257e" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.5.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.5.0-0-Linux-x86_64.sh#4b3b3b1b99215e85fd73fb2c2d7ebf318ac942a457072de62d885056556eb83e" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_24.5.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.5.0-0-MacOSX-arm64.sh#12e678b8156aea69a132568b6176a019c7a1ba753ddf5caedf086d3c5460fe92" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_24.5.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.5.0-0-MacOSX-x86_64.sh#b1c87c8334ea878d30a9976c1860b1004e6d55bdec5228089fec40be81156363" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-24.7.1-0000066400000000000000000000027501476513315000257270ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_24.7.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.7.1-0-Linux-aarch64.sh#bdace1e233cda30ce37105de627e646ae8e04b036373eacfcd7fa8e35949f1b7" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_24.7.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.7.1-0-Linux-s390x.sh#5a454c59314f63a0b860e2ed27d68f4a2516c77a7beda919fc11d3cd03c6b2d2" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.7.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.7.1-0-Linux-x86_64.sh#33442cd3813df33dcbb4a932b938ee95398be98344dff4c30f7e757cd2110e4f" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_24.7.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.7.1-0-MacOSX-arm64.sh#e7ef5a899f9383d14d5b15aef61d54a8cd9bf3c4de18a372af0455d8f5f78cd2" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_24.7.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.7.1-0-MacOSX-x86_64.sh#5cfb85d81d94dfe3ef3265f2247aef32a35aeb450ea71c3a204cefed384fb87d" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-24.9.2-0000066400000000000000000000027501476513315000257320ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_24.9.2-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.9.2-0-Linux-aarch64.sh#86b8df7481646cf87e77873e9789adb7569b58248d3aa629eb2da35e6f2e2eed" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_24.9.2-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.9.2-0-Linux-s390x.sh#876db345b31db6d2b96ab1e2aedfbcea8af6b951a3218e6fd36f657452d1305c" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.9.2-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.9.2-0-Linux-x86_64.sh#8d936ba600300e08eca3d874dee88c61c6f39303597b2b66baee54af4f7b4122" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_24.9.2-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.9.2-0-MacOSX-arm64.sh#08d8a82ed21d2dae707554d540b172fe03327347db747644fbb33abfaf07fddd" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_24.9.2-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.9.2-0-MacOSX-x86_64.sh#ce3b440c32c9c636bbe529477fd496798c35b96d9db1838e3df6b0a80714da4e" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-25.1.1-0000066400000000000000000000027501476513315000257220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-aarch64.sh#ae9d3ea83df97e78fd51c452d0bc75005a28d504c22db6f1000822293f916b54" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-s390x.sh#fa0b443ea73c71abd29eb51212c7b032d5089cbb2761aa07f91668b903a2a575" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-x86_64.sh#832de27a5a35b7963f0d83466abada3eb138e51985255f190e0dc350427a9dd1" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-MacOSX-arm64.sh#24821d2c87598ae0f8e697e612cdf41d0dbc9ae563cae8aacd878d50d1a86e1e" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-MacOSX-x86_64.sh#65f91c564abced759ce7fca099239b7ed4ae9835cb4b64a11923cd3b5f57f5f1" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-25.1.1-1000066400000000000000000000027501476513315000257230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-aarch64.sh#c8a2112c5ed07196a0e7cf0682ff39c9a28eac5862df49659af7d4f6906efa70" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-s390x.sh#f644f5c18985078e6cd1af9c517f9634dbb3199a86f75eb90a9fb303289ebf0b" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-x86_64.sh#2cc524b9b47b268e1a3ecca1f7f3c1bb4142f42a10001c88fb69c6664ca8a9a6" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-MacOSX-arm64.sh#c8f316330308f712b94dd7ac2a6048f87d6b364c3354f4e619ed4aef6d99dfad" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-MacOSX-x86_64.sh#29fce1ea800ff167e2f44d5a0dbd33124384b33520fd481378908e94de68b1a1" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.12-25.1.1-2000066400000000000000000000027501476513315000257240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py312_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-aarch64.sh#6d05b9f9b7f327b90797a4cf56d68c81578bab2f63257a3e7a8b72cb0f0e4b5d" "miniconda" verify_py312 ;; "Linux-s390x" ) install_script "Miniconda3-py312_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-s390x.sh#55c681937c27e13a8ed818d1fec182e623e0308fffc1b10605896dac15f90077" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-x86_64.sh#4766d85b5f7d235ce250e998ebb5a8a8210cbd4f2b0fea4d2177b3ed9ea87884" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniconda3-py312_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-MacOSX-arm64.sh#16e7eea739d470d0c3451e9bb779bbfa169b98cfb283d2d6508945e0c6b36ada" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py312_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-MacOSX-x86_64.sh#0df9f4b7d063a78d18fd02af2b0a97121879af00b535ea79ee23d68d1005e6f8" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.16.0000066400000000000000000000016511476513315000252040ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.16.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.16.0-Linux-x86.sh#faedb7a75584d48d563f0f9b449cb00bf8d05ddb3e1ede1936bf522f03f0e1e2" "miniconda" verify_py34 ;; "Linux-x86_64" ) install_script "Miniconda3-3.16.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.16.0-Linux-x86_64.sh#3becbcdd36761711850cffa11064b87cfe067dbeb4a5eda544dc341af482de87" "miniconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.16.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.16.0-MacOSX-x86_64.sh#36fe954548a6900249270f9632b76252e247313cc9d551c096d7e1f526a88631" "miniconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.18.3000066400000000000000000000016511476513315000252110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.18.3-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.18.3-Linux-x86.sh#7f6b432daacfbe67ac5fd5b3e3bc5bca75642e4e099e967b1353a5b0a828b036" "miniconda" verify_py35 ;; "Linux-x86_64" ) install_script "Miniconda3-3.18.3-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.18.3-Linux-x86_64.sh#6eee19f7ac958578b0da4124f58b09f23422fa6f6b26af8b594a47f08cc61af4" "miniconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.18.3-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.18.3-MacOSX-x86_64.sh#b81c9b27eb9a91e3183e51000dbf986bfe91f99acfa1a4e3bc849ddacc7bf934" "miniconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.19.0000066400000000000000000000016511476513315000252070ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.19.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.19.0-Linux-x86.sh#9789463cad35cdb3ee4cda5a9c3767cad21491faacc071fcd60eb38a9f75098e" "miniconda" verify_py35 ;; "Linux-x86_64" ) install_script "Miniconda3-3.19.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.19.0-Linux-x86_64.sh#9ea57c0fdf481acf89d816184f969b04bc44dea27b258c4e86b1e3a25ff26aa0" "miniconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.19.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.19.0-MacOSX-x86_64.sh#40ec9c2726262addd330c24f62853de47430482965f0bb8cba47d8cd995bec29" "miniconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.3.0000066400000000000000000000016431476513315000251210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.3.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.3.0-Linux-x86.sh#80957b9c4b8d5674e13693cdf6be3e73ff1a109fa26faaefd4f0dbeb11a57295" "miniconda" verify_py33 ;; "Linux-x86_64" ) install_script "Miniconda3-3.3.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.3.0-Linux-x86_64.sh#07fbf1b54c7a03a524a34ec0078d4c39499fe7cdf3dce209e686ef5e0433722f" "miniconda" verify_py33 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.3.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.3.0-MacOSX-x86_64.sh#131b6a351987caab78410082e81d9cb51db262301cb9b8f09656bc94cddc51e4" "miniconda" verify_py33 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.4.2000066400000000000000000000016431476513315000251240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.4.2-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.4.2-Linux-x86.sh#9629cb8f1d633d1bfff59985fa93493eae3c18590893631bc5c1ae57d880e659" "miniconda" verify_py33 ;; "Linux-x86_64" ) install_script "Miniconda3-3.4.2-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.4.2-Linux-x86_64.sh#ea2eb831c89fedb8cd5e7d1cc4d299726684b8d8ccd0fdf16f039bd316dccf78" "miniconda" verify_py33 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.4.2-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.4.2-MacOSX-x86_64.sh#8dbad17efb24dc04473fef911239a09e9bf4219cdcfef7b9e263f5f129a8f38d" "miniconda" verify_py33 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-22.11.1-1000066400000000000000000000027271476513315000257310ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py37_22.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_22.11.1-1-Linux-aarch64.sh#ebba2f7e33ce5594c50e6422477106e6bb327310838fbac3db89d2eaebcde943" "miniconda" verify_py37 ;; "Linux-ppc64le" ) install_script "Miniconda3-py37_22.11.1-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_22.11.1-1-Linux-ppc64le.sh#dda16ae14992697e3c90b56fe9de819f5f3b1dcb3ac7a31d24ab5736ccd5f129" "miniconda" verify_py37 ;; "Linux-s390x" ) install_script "Miniconda3-py37_22.11.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py37_22.11.1-1-Linux-s390x.sh#3c71628865164c3f8b461f8e4b2a353ff1367eed61c83b9c3e14fc201608b1a7" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_22.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_22.11.1-1-Linux-x86_64.sh#22b14d52265b4e609c6ce78e2f2884b277d976b83b5f9c8a83423e3eba2ccfbe" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_22.11.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_22.11.1-1-MacOSX-x86_64.sh#e51d459aae45bb6b86c2716738b778b788785e6e1ea4b2ed244a0fdd754feb19" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-23.1.0-1000066400000000000000000000027151476513315000256450ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py37_23.1.0-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_23.1.0-1-Linux-aarch64.sh#31c1d635fae931b7c0687018cc87e918e8098ed5dd5e76a658e10c57e00ef864" "miniconda" verify_py37 ;; "Linux-ppc64le" ) install_script "Miniconda3-py37_23.1.0-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_23.1.0-1-Linux-ppc64le.sh#d2de534bfa46aa34ef0b115a309de7e8a681683af65faf86bcee6a00460f07be" "miniconda" verify_py37 ;; "Linux-s390x" ) install_script "Miniconda3-py37_23.1.0-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py37_23.1.0-1-Linux-s390x.sh#72a8fa9aca5abaf99771110746b1345a33d390c9b29a7b4daffe6a2ff00f2366" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_23.1.0-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_23.1.0-1-Linux-x86_64.sh#fc96109ea96493e31f70abbc5cae58e80634480c0686ab46924549ac41176812" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_23.1.0-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_23.1.0-1-MacOSX-x86_64.sh#bdfb2f01c0a3917bf258daffc65b69bfe07e29753be624aaf9cbda5ba02f43f4" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-4.10.1000066400000000000000000000012321476513315000255000ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py37_4.10.1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.1-Linux-aarch64.sh#bcb84cfe1f5ccf477fa73fc87d2f4125" "miniconda" verify_py37 ;; "Linux-s390x" ) install_script "Miniconda3-py37_4.10.1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.1-Linux-s390x.sh#0738d7c00290860d60870103c710e4c2" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-4.10.3000066400000000000000000000024311476513315000255040ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py37_4.10.3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-aarch64.sh#19815e497b045246307f9317bcb4fb93" "miniconda" verify_py37 ;; "Linux-ppc64le" ) install_script "Miniconda3-py37_4.10.3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-ppc64le.sh#a926bbaf28d59ac1264799e3ca770a44" "miniconda" verify_py37 ;; "Linux-s390x" ) install_script "Miniconda3-py37_4.10.3-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-s390x.sh#a82215f8abf68e44a8666a658ac4cdf9" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_4.10.3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh#9f186c1d86c266acc47dbc1603f0e2ed" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_4.10.3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-MacOSX-x86_64.sh#b88a2eb66917c55a6bd1973fabaf05b3" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-4.11.0000066400000000000000000000024311476513315000255020ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py37_4.11.0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.11.0-Linux-aarch64.sh#07e8dfaf467e5432d402a79b11085783" "miniconda" verify_py37 ;; "Linux-ppc64le" ) install_script "Miniconda3-py37_4.11.0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.11.0-Linux-ppc64le.sh#cf7cbccc16bf82365bbf0129f646ff45" "miniconda" verify_py37 ;; "Linux-s390x" ) install_script "Miniconda3-py37_4.11.0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.11.0-Linux-s390x.sh#1dc6dbf1951e65217d07cf30887360a8" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_4.11.0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.11.0-Linux-x86_64.sh#7675bd23411179956bcc4692f16ef27d" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_4.11.0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.11.0-MacOSX-x86_64.sh#0dde31d693fbcb4feb1eb4292cba4371" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-4.12.0000066400000000000000000000024311476513315000255030ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py37_4.12.0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-Linux-aarch64.sh#dbac5ea2d2a1dfcf864f5ad0ac775647" "miniconda" verify_py37 ;; "Linux-ppc64le" ) install_script "Miniconda3-py37_4.12.0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-Linux-ppc64le.sh#57a654d3f143db5230d181cad7a938c1" "miniconda" verify_py37 ;; "Linux-s390x" ) install_script "Miniconda3-py37_4.12.0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-Linux-s390x.sh#2f6c9cb12b37dca5d7d29a4b5d04ffdd" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_4.12.0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-Linux-x86_64.sh#770bac2587bc7380198b4f0741115b11" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_4.12.0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-MacOSX-x86_64.sh#161c0c4b88410149beb73d1eea6ec937" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-4.8.2000066400000000000000000000015551476513315000254400ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-py37_4.8.2-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.2-Linux-ppc64le.sh#e50662a93f3f5e56ef2d3fdfaf2f8e91" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_4.8.2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.2-Linux-x86_64.sh#87e77f097f6ebb5127c77662dfc3165e" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_4.8.2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.2-MacOSX-x86_64.sh#e0320c20ea13d04407424ecf57b70eaf" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-4.8.3000066400000000000000000000015551476513315000254410ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-py37_4.8.3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.3-Linux-ppc64le.sh#ae06d853a09764d86e400cd797c2e922" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_4.8.3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.3-Linux-x86_64.sh#751786b92c00b1aeae3f017b781018df" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_4.8.3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.3-MacOSX-x86_64.sh#d1754f1e192e078b4d207a8b2e5607b0" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7-4.9.2000066400000000000000000000024171476513315000254370ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py37_4.9.2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.9.2-Linux-aarch64.sh#eb76394f962a84fb6af4ed8bf115b904" "miniconda" verify_py37 ;; "Linux-ppc64le" ) install_script "Miniconda3-py37_4.9.2-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.9.2-Linux-ppc64le.sh#5bdc8650a2d1b32c8fd6eed9ed61aef5" "miniconda" verify_py37 ;; "Linux-s390x" ) install_script "Miniconda3-py37_4.9.2-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.9.2-Linux-s390x.sh#aa9207a1111352af948b8932d7823dce" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-py37_4.9.2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.9.2-Linux-x86_64.sh#3143b1116f2d466d9325c206b7de88f7" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py37_4.9.2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py37_4.9.2-MacOSX-x86_64.sh#cfe1b551b169d6386f5f4b7df40cdac4" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.7.0000066400000000000000000000016431476513315000251250ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.7.0-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.7.0-Linux-x86.sh#d5143303a8159a5b7388cc1d09aa6d9bc029c2c5f8cb53230a5fcf07d9ee149c" "miniconda" verify_py34 ;; "Linux-x86_64" ) install_script "Miniconda3-3.7.0-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.7.0-Linux-x86_64.sh#dba631db9938216af83ca9793605a73fae8b8e5ef966c15b9e89c09bf405de26" "miniconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.7.0-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.7.0-MacOSX-x86_64.sh#fd4df5a944801019ef56a348bdcb483a7fdbf376c98aeacb25a78e5bc9bb4158" "miniconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-22.11.1-1000066400000000000000000000033201476513315000257200ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_22.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_22.11.1-1-Linux-aarch64.sh#ff65684bce7a7ad7abb698ff649195816ee0f47a4f17cb9632a44abf69357ea5" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_22.11.1-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_22.11.1-1-Linux-ppc64le.sh#59fd0901f9fa1ba6b07e734adff4d6c5215e9d7f13ad37f0044af22e9b72194a" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_22.11.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_22.11.1-1-Linux-s390x.sh#5bdc6ead307c098b32ba8473b7cbbe87eb80f8eca9adba03f47848bcb34a9b38" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_22.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_22.11.1-1-Linux-x86_64.sh#473e5ecc8e078e9ef89355fbca21f8eefa5f9081544befca99867c7beac3150d" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_22.11.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_22.11.1-1-MacOSX-arm64.sh#bf75dbf193db6895c62b2bb963cab2534a8bbdf0ac956f270da8d7a19f4d1b54" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_22.11.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_22.11.1-1-MacOSX-x86_64.sh#6c4cea3c355326f503d15ae97e5126437529a595499e3ce304cd0f247e935da8" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.1.0-1000066400000000000000000000033041476513315000256410ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.1.0-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-aarch64.sh#10ea91cc579a64a3a88727119ac3f55839562f55118458b82824b544bc74f90d" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_23.1.0-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-ppc64le.sh#d89faee2d839c7e8a2c96f3ca60295c08e837c2f134f6bb9e9e21b707babedc2" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.1.0-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-s390x.sh#3d1e06eddaef0976530c54ed7dda80df62705c16513634e58f7d1c4567227b9e" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.1.0-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-x86_64.sh#640b7dceee6fad10cb7e7b54667b2945c4d6f57625d062b2b0952b7f3a908ab7" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.1.0-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-MacOSX-arm64.sh#8dfab7797151a31b16c174da9a5bc09529d5859f21e77f0655ea9b18209cc926" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.1.0-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-MacOSX-x86_64.sh#5d789cda38b23245ffed6b88c60b7479d984bbf20e3b70d66cd150f04a9c25c5" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.10.0-1000066400000000000000000000033421476513315000257230ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.10.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.10.0-1-Linux-aarch64.sh#aee297bdefb15cfee9e2cb4c0881f811ce18c1a066ac75b811b21967ccd41acd" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_23.10.0-1-Linux-ppc64le.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.10.0-1-Linux-ppc64le.sh#1d7ccb2fa31042116b38ec518a63428d9cf87adba8771ffa9f0e3241f6b5a72a" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.10.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.10.0-1-Linux-s390x.sh#095bfb828b3155e6a345b7e821010451dfd291e8373b618a3b72a050a1c7a909" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.10.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.10.0-1-Linux-x86_64.sh#6842afb93a64fd4f04daa0f49f4618857d2327ead1366851eb0e49f1ae460f00" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.10.0-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.10.0-1-MacOSX-arm64.sh#c5ece9fce0a2f3c68600476e4256146f03511f82f76d05324eedbdc9eb06bed7" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script ""Miniconda3-py38_23.10.0-1-MacOSX-x86_64.sh "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.10.0-1-MacOSX-x86_64.sh#0e6921f44b4278aa178969f59da57ca4ced2a55ef7730c774296f1de1801c561" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.11.0-1000066400000000000000000000027431476513315000257300ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.11.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-1-Linux-aarch64.sh#3b28bce7689d42c85190e86738f152efc88a7d17cbcd90b4eb8cb92be42e3bff" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.11.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-1-Linux-s390x.sh#38e4050d6b73814071c065d36c41c6fea553fbf973e72e6375b958fcff747b69" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.11.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-1-Linux-x86_64.sh#ad3cb53ddfbadd190172b864337572206733ae75515fcfb17157cc8f2cb907a5" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.11.0-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-1-MacOSX-arm64.sh#89b1b0428e68fea63af15193237f2efed9a3c80cffa2fc221cca0af2465d3fd2" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.11.0-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-1-MacOSX-x86_64.sh#5056bea02062a198991a09c8c9c02c39735ad2d26cdbf21863eaa799bcacd8ab" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.11.0-2000066400000000000000000000027431476513315000257310ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.11.0-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-2-Linux-aarch64.sh#6e439ae5373d35b78a3f45775fa69f0afddd0c0a9e5e545cd2f75f913a6d143b" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.11.0-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-2-Linux-s390x.sh#4d53356e80b3be7e90dbcf021d40cd3d7f889cf4d19574c9957ba22f5a9d98f2" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.11.0-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-2-Linux-x86_64.sh#cb908ddbd603d789d94076ea4dd3f8517b15866719e007725dca778a8dfab823" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.11.0-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-2-MacOSX-arm64.sh#5b0258717b9c53c90fc9255ef739d766325fc284761b637837e3d378bb12d3e3" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.11.0-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.11.0-2-MacOSX-x86_64.sh#143d79c7018c66ef452a27711090367dc36e0046ae765f514bc2b1c2b4f76746" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.3.1-0000066400000000000000000000033041476513315000256430ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.3.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-aarch64.sh#ad491ebad6efec7470fe2139c8b407a895cb2c828b3233b97da6e4f22cae0cde" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_23.3.1-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-ppc64le.sh#8aa819800ba3ec88ad8518a9e4fc71ada8087547300fc53527c4ecc8072a4d50" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.3.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-s390x.sh#e4d83bb9f0900c9128504f7e3c4d3b9e5eaf3b87c4bb5190a3086947e92bd3fa" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.3.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh#d1f3a4388c1a6fd065e32870f67abc39eb38f4edd36c4947ec7411e32311bd59" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.3.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-MacOSX-arm64.sh#e0151c68f6a11a38b29c2f4a775bf6a22187fa2c8ca0f31930d69f2f013c0810" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.3.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-MacOSX-x86_64.sh#eb7b2d285f6d3b7c9cde9576c8c647e70b65361426b0e0e069b4ab23ccbb79e2" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.5.0-3000066400000000000000000000033041476513315000256470ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.5.0-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.0-3-Linux-aarch64.sh#853e1c3c24f1c4cc2a1c57b05059740127724a2b346f887e3f0bb92a6cd05fe1" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_23.5.0-3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.0-3-Linux-ppc64le.sh#5bef0b71b9c9c6a27e534894e913e47e545793a549a8815bb4a66a8c9d793d45" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.5.0-3-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.0-3-Linux-s390x.sh#e0271bc3af023053258cfe01059d53769bbd32dc5542b5c96280d29dcd8568f6" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.5.0-3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.0-3-Linux-x86_64.sh#f833ae8ad96db31d4f2a09d12f1b188721c769d60d813d7e6341c19e77bc791f" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.5.0-3-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.0-3-MacOSX-arm64.sh#5daf6837136d08a17f039b29993f67207ba90dcc90abe94c6d5a8925f6888076" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.5.0-3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.0-3-MacOSX-x86_64.sh#54ead65ad1ff77d9cba2512a8765d64e6b7d8ae154e2fc1a6fcb01395b9a8cf3" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.5.1-0000066400000000000000000000033041476513315000256450ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.1-0-Linux-aarch64.sh#dcf57b73c3db9b4ce5ab1407f0573c83241b5041f2c6fd590959a091ca518b4c" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_23.5.1-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.1-0-Linux-ppc64le.sh#1c141b28ffe6dee40fc04c0d175da22270b86c63ec67e71798cd15183d10bcf2" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.5.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.1-0-Linux-s390x.sh#1c7c2188cad19a1a00bf8a5895af8bd67a06f983ea02d34ad3cdb40cb6a86224" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.5.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.1-0-Linux-x86_64.sh#05c1284d67d35abcc3a9b814cd124ec351020b9172962bcc166bf2f2ac22ea5e" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.5.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.1-0-MacOSX-arm64.sh#044bc2a3eab865448924bf2aeab069a7a61a174b132c58f6e9a88cf14c5b647c" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.5.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.1-0-MacOSX-x86_64.sh#ed617d73092e9f0b696f2b55e68126d751040ef6700c2ea38bc913bf18fd8956" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.5.2-0000066400000000000000000000033041476513315000256460ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.5.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-aarch64.sh#cd39b811ac9a2f9094c4dfff9ec0f7ec811d6ad7ede5ab3f1a31d330ab3a2c55" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_23.5.2-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-ppc64le.sh#6fc3bf00d4fe0c724fab884d93b981acbc22bb8fc41c144df6d2fc080ff80e25" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.5.2-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-s390x.sh#b840fd5a8474a3e6831cd50a64eadf73239c6ad7deeebf2c3d3fe366220b2722" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.5.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-x86_64.sh#e2a4438671e0e42c5bba14cb51de6ce9763938184d6ca2967340bbe972bbe7e6" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.5.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-MacOSX-arm64.sh#782bd1a401b20b41227a086adae98e270bbc942c3b7621788fb5574a9583142e" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.5.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-MacOSX-x86_64.sh#6dc8bfb3b382c31be1755545ae6afc5fbdf8a67726ffdb8a05b917204bd08779" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-23.9.0-0000066400000000000000000000033041476513315000256500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_23.9.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-Linux-aarch64.sh#c59fbb2565812573f39b88425ef48607de70d1feadc522204811555e58bb972c" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_23.9.0-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-Linux-ppc64le.sh#4d1903b396de1c3473a81b2794f0d9792b30b4e9d98ae1c9dcfeef3aba15435b" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_23.9.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-Linux-s390x.sh#57cf786d2c30aed186a14e9319c596579750ef75d1c8c039734492b5e6d6762c" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_23.9.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-Linux-x86_64.sh#3c684c1c22d3a0e6bd5ab28186fd7b068b5c552f0937ee927ad117f35a5573fc" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_23.9.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-MacOSX-arm64.sh#694facc3601da8a93592d6f947818c2064d6854ca1f2a7e5b40b3e2e91e65baa" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_23.9.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-MacOSX-x86_64.sh#6fab242ca8200a1d59e54c5cc1abb89f7519a136da234e2ab77a30fb87c4ce7d" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-4.10.1000066400000000000000000000015551476513315000255110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_4.10.1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.1-Linux-aarch64.sh#34aba2af867e5411eff7fddd80982aa9" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_4.10.1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.1-Linux-s390x.sh#ff0ed5428dd94a6f5c64c92a59a73165" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_4.10.1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.1-MacOSX-arm64.sh#1bb73c5cd765d135e2b874fc0f08d50c" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-4.10.3000066400000000000000000000024311476513315000255050ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_4.10.3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-aarch64.sh#1b84ae526853a0301d0c04b68b718ea8" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_4.10.3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-ppc64le.sh#12ddb1b94f30f8fc633c3223b0398d2f" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_4.10.3-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-s390x.sh#44e34b6ee8a47db8c28834f86ada6d41" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_4.10.3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-x86_64.sh#14da4a9a44b337f7ccb8363537f65b9c" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_4.10.3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-MacOSX-x86_64.sh#cb609591c280423e999fc421cdb779d3" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-4.11.0000066400000000000000000000027541476513315000255130ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_4.11.0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.11.0-Linux-aarch64.sh#18344281ba44bdd1e38c8ae0f05a8758" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_4.11.0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.11.0-Linux-ppc64le.sh#adec9893a69557f1eaadce56f24f6614" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_4.11.0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.11.0-Linux-s390x.sh#b337e6834c940774e762cfb420ec7b91" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_4.11.0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.11.0-Linux-x86_64.sh#252d3b0c863333639f99fbc465ee1d61" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_4.11.0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.11.0-MacOSX-arm64.sh#1075216b8a7458b8fb86f6386dc5a4a9" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_4.11.0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.11.0-MacOSX-x86_64.sh#e0ab9762f3d20d23bbff4b804a03cb08" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-4.12.0000066400000000000000000000027541476513315000255140ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_4.12.0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-aarch64.sh#72cb127e8f455b692e3c8a9009b34f7c" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_4.12.0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-ppc64le.sh#2023a9a4008a9e1c4c317f3b1a6a99cd" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_4.12.0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-s390x.sh#f5692dec773b021dea5074b6f6bc3464" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_4.12.0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-x86_64.sh#9986028a26f489f99af4398eac966d36" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniconda3-py38_4.12.0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-MacOSX-arm64.sh#c8796b213b0dee4426e442f6eb059b40" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_4.12.0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-MacOSX-x86_64.sh#215d80a3912d71c2272e37c63340f48a" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-4.8.2000066400000000000000000000015551476513315000254410ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-py38_4.8.2-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-ppc64le.sh#8dbe9589f7ba6e17428ac57658802eb2" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_4.8.2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh#cbda751e713b5a95f187ae70b509403f" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_4.8.2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-MacOSX-x86_64.sh#589972cf83097c97e70c41813f2fe3a2" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-4.8.3000066400000000000000000000015551476513315000254420ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-py38_4.8.3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.3-Linux-ppc64le.sh#a48a5db8c22c47cea7b04af2c3af2a1f" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_4.8.3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh#d63adf39f2c220950a063e0529d4ff74" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_4.8.3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.3-MacOSX-x86_64.sh#3fe6d972d40ee60f2e8496cf943ad852" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8-4.9.2000066400000000000000000000024171476513315000254400ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py38_4.9.2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-Linux-aarch64.sh#2359284ff562247fc2da4b68334ccac7" "miniconda" verify_py38 ;; "Linux-ppc64le" ) install_script "Miniconda3-py38_4.9.2-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-Linux-ppc64le.sh#b05f6c543ce0c593761bbfb4e6548ff6" "miniconda" verify_py38 ;; "Linux-s390x" ) install_script "Miniconda3-py38_4.9.2-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-Linux-s390x.sh#29a7a50a29954d26a64e1a651a9e6f83" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniconda3-py38_4.9.2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-Linux-x86_64.sh#122c8c9beb51e124ab32a0fa6426c656" "miniconda" verify_py38 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py38_4.9.2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-MacOSX-x86_64.sh#cb40e2c1a32dccd6cdd8d5e49977a635" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.8.3000066400000000000000000000016431476513315000251310ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.8.3-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.8.3-Linux-x86.sh#2345cf595864ee0a139f6dd1572070442445baace0dec7a4937267169708f929" "miniconda" verify_py34 ;; "Linux-x86_64" ) install_script "Miniconda3-3.8.3-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.8.3-Linux-x86_64.sh#26483a27b56d3567596b866076cb6de75c4b7e376fe359720ec27fca2c05ceec" "miniconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.8.3-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.8.3-MacOSX-x86_64.sh#86be2f1d55755670e0a21902584768b69732b31e87af22d1cca856f3d9e5c20d" "miniconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-22.11.1-1000066400000000000000000000033201476513315000257210ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_22.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_22.11.1-1-Linux-aarch64.sh#031b6c52060bb75e930846c0a66baa91db8196f0d97fd32f3822c54db6b7c76a" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_22.11.1-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_22.11.1-1-Linux-ppc64le.sh#16cc2d74644cf838d2761723c01172e0b704674317630480902ef429af29bd0b" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_22.11.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_22.11.1-1-Linux-s390x.sh#ed6176aa6b52e22d939ea5c0c38f9f3cf52d2519a5d0dcb414936287893a31f9" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_22.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_22.11.1-1-Linux-x86_64.sh#e685005710679914a909bfb9c52183b3ccc56ad7bb84acc861d596fcbe5d28bb" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_22.11.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_22.11.1-1-MacOSX-arm64.sh#eca5e241faea19d4b352aba819f99f42e2336fdbeecb04f5bc89c9ca786ea798" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_22.11.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_22.11.1-1-MacOSX-x86_64.sh#9a537f3a1b472098754c59a30b94822f1e9458405af831172aaa8f8124e9df88" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.1.0-1000066400000000000000000000033041476513315000256420ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.1.0-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.1.0-1-Linux-aarch64.sh#5e67416a574c49e19dc21d5b9ed586400863a685bc4e34b4d933ea8c7c1ed2da" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_23.1.0-1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.1.0-1-Linux-ppc64le.sh#cf5d7cad2b0eb260903b3661ee3fa822eecb25cf3c9b14bc9de10d72963d3d5a" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.1.0-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.1.0-1-Linux-s390x.sh#5159322f15d9e2b22b3cf90fe88b336d84f62189178c872a9288a339d86f5d20" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.1.0-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.1.0-1-Linux-x86_64.sh#5dc619babc1d19d6688617966251a38d245cb93d69066ccde9a013e1ebb5bf18" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.1.0-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.1.0-1-MacOSX-arm64.sh#a7133a703e41ea0b1738196fb03f72b22250327adea94521c9dd6100c304dc63" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.1.0-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.1.0-1-MacOSX-x86_64.sh#d78eaac94f85bacbc704f629bdfbc2cd42a72dc3a4fd383a3bfc80997495320e" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.10.0-1000066400000000000000000000033421476513315000257240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.10.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.10.0-1-Linux-aarch64.sh#e7558e2a628ce2f40e8ea792763b942ba587b01b33a677d2d22e7372ec50dbb7" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_23.10.0-1-Linux-ppc64le.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.10.0-1-Linux-ppc64le.sh#cd92b3272d85c94ef54b685d49fbbd9d36c6680e6b518f1806c039ddb34fc754" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.10.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.10.0-1-Linux-s390x.sh#1aa4b984316faa9917c0dce8656bf3b32941def86397815adbe124185b7d3cdb" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.10.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.10.0-1-Linux-x86_64.sh#3dbb87a74f80c84ae166a380bf51da8ef75699ce97c234e3e196afa20d1a9319" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.10.0-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.10.0-1-MacOSX-arm64.sh#adfac9e92405a6fdb60cc3b39018cb5084d096799be8f82fa88d26dadbe719b6" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.10.0-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.10.0-1-MacOSX-x86_64.sh#6d26cbe11e964bf573c459420154139d922ffa2e5c690c9c1e9bdb84f17f83af" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.11.0-1000066400000000000000000000027431476513315000257310ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.11.0-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-1-Linux-aarch64.sh#a8a9c37882209680d9258e57ce5d5ca0e186f0159e703736b9f5122e94864083" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.11.0-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-1-Linux-s390x.sh#719c653d7e4b724566c2a9fa365f7b6dbb830d279513ae62e02e11144722c1c9" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.11.0-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-1-Linux-x86_64.sh#d36c0f778b6b164223a174acafbe8556b841b67e53cb84b3eb24f1956b62121a" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.11.0-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-1-MacOSX-arm64.sh#1f345d26837e505713aa7b9332cc740c7f2319c7208dc6bd7b95b6a251a9b665" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.11.0-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-1-MacOSX-x86_64.sh#7b05aff168e441ec500e038bb3e252e5b01f3059a74f92fb7f3a7630eb6a6b13" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.11.0-2000066400000000000000000000027431476513315000257320ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.11.0-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-2-Linux-aarch64.sh#465f30688bae46f73b8497bb601face6b652092ace0e515c898e2a64f8c0f15f" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.11.0-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-2-Linux-s390x.sh#ff1de437a3f9110d8d7665c1f6d178bb797150689264bec5d0d8b36604e3823a" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.11.0-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-2-Linux-x86_64.sh#b911ff745c55db982078ac51ed4d848da0170f16ba642822a3bc7dd3fc8c61ba" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.11.0-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-2-MacOSX-arm64.sh#0234becafc167a475fbbcd9a59dda0eec288343695ff6b9645b34fcb9f124bb5" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.11.0-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-2-MacOSX-x86_64.sh#cc22270c81080d50e518f74d36a151fd3727e2cd6fccc4b1fd345f9a852d5762" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.3.1-0000066400000000000000000000033041476513315000256440ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.3.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-Linux-aarch64.sh#e93ccab720b57f821e0d758f54e9aee9bd2f0ea931ebb26b78d866704437a296" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_23.3.1-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-Linux-ppc64le.sh#d2bcef86812863adaf11fcda6df829aa508760cbde4a19174cf0fec03e8498f5" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.3.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-Linux-s390x.sh#d0b658566edd239dd50fc28ab1d3a57b8b0da707481b3b18c27d11273c4fdb5a" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.3.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-Linux-x86_64.sh#1564571a6a06a9999a75a6c65d63cb82911fc647e96ba5b729f904bf00c177d3" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.3.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-MacOSX-arm64.sh#c74474bab188b8b3dcaf0f0ca52f5e0743591dbe171766016023d052acf96502" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.3.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-MacOSX-x86_64.sh#54d739715feb0cd5c127865215cc9f50697709d71e9ee7da430576c5a1c8010d" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.5.0-3000066400000000000000000000033041476513315000256500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.5.0-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.0-3-Linux-aarch64.sh#f77868e96eee904cd137ebe463439258d76281830bb9e2bd330d23aea1ddd31a" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_23.5.0-3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.0-3-Linux-ppc64le.sh#4bbda8ba3b8d1d26f04a469bbe29b3ef626a8b10b823f64314719e132f7c3696" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.5.0-3-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.0-3-Linux-s390x.sh#7ef72ef1411b028788c81308238b604cba46315cb42e70a2d65511c05440ebca" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.5.0-3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.0-3-Linux-x86_64.sh#b7fc320922235ccbaacba7b5a61e34671e75f3a2c7110c63db0c6a9f98ecf8a8" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.5.0-3-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.0-3-MacOSX-arm64.sh#d006d99f86850510f9aed1a81e16a4213a4829e7ea6913f0c42054b4b0ac05a7" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.5.0-3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.0-3-MacOSX-x86_64.sh#86ae780b5c5a32c45bc0f2e146941afea6dd1ca48e8d5e1bf99a83df255a0a78" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.5.1-0000066400000000000000000000033041476513315000256460ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.1-0-Linux-aarch64.sh#ac438ca1a76d78622cc7768d94988e5673983f60f0302941ce05ea4e11e1376e" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_23.5.1-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.1-0-Linux-ppc64le.sh#a981947722decf258e4a21f06ab5ddd545c709ba959957121a3e3b89b3dd860a" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.5.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.1-0-Linux-s390x.sh#b3ea1e4ce80901b70b49d14bc4a008d910410ddd58dead9c4c220834f5aa46c2" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.5.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.1-0-Linux-x86_64.sh#960b7aa0294d6d828739ad5542fe1d8b81bb602be401ad00febdf9d29bf37514" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.5.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.1-0-MacOSX-arm64.sh#63aaa53c1f6139d667f8e308a2849632efeb575e6223d075ab8a8c15850478d6" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.5.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.1-0-MacOSX-x86_64.sh#056b43eb844aac487e5f6e0f748c528a34cd3d38c8409f239a75bf89ffede3b9" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.5.2-0000066400000000000000000000033041476513315000256470ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.5.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.2-0-Linux-aarch64.sh#ecc06a39bdf786ebb8325a2754690a808f873154719c97d10087ef0883b69e84" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_23.5.2-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.2-0-Linux-ppc64le.sh#dc5aee01ee36a154b8070e6948b9a43773b6942476a144bc89e6135ac5beac58" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.5.2-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.2-0-Linux-s390x.sh#40ece8784a9e7dd521ab354ffc816bb466842ae3eee681a93647945c5070c9b4" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.5.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.2-0-Linux-x86_64.sh#9829d95f639bd0053b2ed06d1204e60644617bf37dd5cc57523732e0e8d64516" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.5.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.2-0-MacOSX-arm64.sh#1b10164086354b39a46ff928eef5797ff57e0fa9706ccaf7d4e621b416541479" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.5.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.5.2-0-MacOSX-x86_64.sh#dcbbdf92dc2954c79002b64ed53d3451e191dbdde0b30c67334f41dc6ca46ac1" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-23.9.0-0000066400000000000000000000033041476513315000256510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_23.9.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.9.0-0-Linux-aarch64.sh#b3ae7a36e3adbe9f9ab152b645d8d20b09bd25b4f0a9be15bfb4d36aafdedd98" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_23.9.0-0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.9.0-0-Linux-ppc64le.sh#f7699ab404cbcba918e1977cc54ee8573902835d3272e3d80b5a107f8c5b5b38" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_23.9.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.9.0-0-Linux-s390x.sh#eab9add06fe3b0beb9b54b3ab3fc57b944dc370a3c9342216082f7747d6c74a7" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_23.9.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.9.0-0-Linux-x86_64.sh#9200a10c762186391c35709382ed7cfa6578a051c9c76ea58f998df62c5afab0" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_23.9.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.9.0-0-MacOSX-arm64.sh#3143f830fdff011a3d389fdb53b8021e90b662615a1ed62a0bcad099cef35c26" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_23.9.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_23.9.0-0-MacOSX-x86_64.sh#763c08ad5bdf159d32e406bd3b03394e1fba6923f1936271ca27c8073f744ac2" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-24.1.2-0000066400000000000000000000027171476513315000256530ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_24.1.2-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.1.2-0-Linux-aarch64.sh#b3e7d8ad4a4c9106594b268ab1cd9494ce982eaf7734bb2cd13a47e14e92a43e" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_24.1.2-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.1.2-0-Linux-s390x.sh#c1e5b7cee62b465a919b88a9c5658c426c6633f1fbcb568d2cff36a13aef6b97" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py312_24.1.2-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_24.1.2-0-Linux-x86_64.sh#b978856ec3c826eb495b60e3fffe621f670c101150ebcbdeede4f961f22dc438" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_24.1.2-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.1.2-0-MacOSX-arm64.sh#2a7e44373bdf47caae991ff8d7d275a2ded51ed0e8e457c7edc9ecd45e48cda4" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_24.1.2-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.1.2-0-MacOSX-x86_64.sh#d4e81df5beaa73dbbb9e1e91065e8f8222e9a9d44a2e7271aedd6e4a5054c541" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-24.11.1-0000066400000000000000000000027431476513315000257320ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_24.11.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.11.1-0-Linux-aarch64.sh#35411dc715549d0a95f4814c4f318a3d0addfafc3a25fa7e89e2ba47e8d87b4d" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_24.11.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.11.1-0-Linux-s390x.sh#c130a7064c5c513c42280ec41a5f8c93aaab522ecd6bd0f2138c8c9f78d4f522" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_24.11.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.11.1-0-Linux-x86_64.sh#3ea8373098d72140e08aac9217822b047ec094eb457e7f73945af7c6f68bf6f5" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_24.11.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.11.1-0-MacOSX-arm64.sh#a8a07c4255882de2f132ed2d4cfaa3bdf89370de71ba8cd3914e013f5bffcc68" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_24.11.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.11.1-0-MacOSX-x86_64.sh#5ca59fa5a4835587ba6ea73169a7e55862771cf9b0618d0549b7b484fe1a2e67" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-24.3.0-0000066400000000000000000000027121476513315000256460ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_24.3.0-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.3.0-0-Linux-aarch64.sh#860f532a33501cf0eccc2677048e21db4a12151938d181821af3e5d30e2dc390" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_24.3.0-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.3.0-0-Linux-s390x.sh#1570e27adba2dcc24b182c21cd4e793ab5719aa5b1f7f8e29c16ec74d6d9a16f" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_24.3.0-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.3.0-0-Linux-x86_64.sh#1c3d44e987dc56c7d8954419fa1a078be5ddbc293d8cb98b184a23f9a270faad" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_24.3.0-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.3.0-0-MacOSX-arm64.sh#f091e4e2d7c2521d40c8c2e561c344a401cf9900e4efa122bf1c93fd6ae5cc9c" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_24.3.0-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.3.0-0-MacOSX-x86_64.sh#ed7cfddd313f3ec568f95abae38b337ebf339cddd378ee2f91c86e5da53374e5" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-24.4.0-0000066400000000000000000000027311476513315000256500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_24.4.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.4.0-0-Linux-aarch64.sh#6f09fd08165a9fdccb2a2c64e9bbcf68ce58a9bfb571600306eb44d29718b13f" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_24.4.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.4.0-0-Linux-s390x.sh#8766e30b038087e7da2bb9a8bca4ca3f2ed621659f0ea8954ffab789f4a8f192" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_24.4.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.4.0-0-Linux-x86_64.sh#edd7610f2e2b25d15f6ffa81ca94de0748dd107096871459a7966dcf9a564ea9" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_24.4.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.4.0-0-MacOSX-arm64.sh#74f3de552d93712cc7c531f690b78d6acad8e3812da43fc3a1acbc5c39243480" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_24.4.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.4.0-0-MacOSX-x86_64.sh#d3ad5e0bf74aa1cb838df2f73e4be4e5d9a0f259a05b5223199ea1f6f6edf9f3" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-24.5.0-0000066400000000000000000000027311476513315000256510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_24.5.0-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.5.0-0-Linux-aarch64.sh#b716e3bc556e9ab7a4f206b04b53bd57c24e94956598d89fc78863b115cce9e8" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_24.5.0-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.5.0-0-Linux-s390x.sh#c2d6bec964a96130eb5f1c4ea46993cf10f7957d45ac31d9aa94c34b5ebfed32" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_24.5.0-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.5.0-0-Linux-x86_64.sh#07a2435123fd8f41e6528baa5f272ce754fd8acaef08ce7081afb00227b8754a" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_24.5.0-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.5.0-0-MacOSX-arm64.sh#f5f63a0de44b7b0872f3c00dca71b896933ccc844a93bf120aad6df66b6475b3" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_24.5.0-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.5.0-0-MacOSX-x86_64.sh#b65d7f01820bdfe1abb6b4dd84d48e6c62a6d72ee0cc400a4e8bb4ea89ff1c84" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-24.7.1-0000066400000000000000000000027311476513315000256540ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_24.7.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.7.1-0-Linux-aarch64.sh#dc6d508f463b19def014d34b61297df30cc15eeac9cf47eb372634812b6721e6" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_24.7.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.7.1-0-Linux-s390x.sh#31553ed04ff777deefbb76bb194a2212ccf1168f2757f36794a567f58bb94ae1" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_24.7.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.7.1-0-Linux-x86_64.sh#2006a61abc8b4fd04de5eb92620e1f72bada713cc84b5b4899463095e1210556" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_24.7.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.7.1-0-MacOSX-arm64.sh#f50fceaf2d42c898559adae1ee17c22c452824a909370fdec8d4fcf844696f06" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_24.7.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.7.1-0-MacOSX-x86_64.sh#f5035c0595f791a822fbf3bf5b555e8e68fe33437affa3811b125ebd39efbe81" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-24.9.2-0000066400000000000000000000027311476513315000256570ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_24.9.2-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.9.2-0-Linux-aarch64.sh#4607ec9145ad9c0413e6300dab3febe442e265efce486176ef1f8518ba8bfaeb" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_24.9.2-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.9.2-0-Linux-s390x.sh#5ccde79ed4c333f0e236f36338ed5db111a2fff50859235c4f8fffd2045a6655" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_24.9.2-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.9.2-0-Linux-x86_64.sh#4b540d78e5bdd770b39216c0563424ef6656504cbe24c67b2d0454c2eb7afe93" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_24.9.2-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.9.2-0-MacOSX-arm64.sh#4d5abecbb3264def02ad95ed6c888016f95631649b848da552a1066c52bcd1da" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_24.9.2-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_24.9.2-0-MacOSX-x86_64.sh#7535da558c8821d967e026288eaec75d9a159ec760d75c869fd10fa58d3986c3" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-25.1.1-0000066400000000000000000000027311476513315000256470ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-aarch64.sh#6813ed27242f8c6a000fcdc0b2bb93253411a22ef110eec915b7d1a4aab3587b" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-s390x.sh#8220e1e67cc73a51d90108f5bdf5451aefae0b00d400958ae7d42e21d9a32999" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-x86_64.sh#13a5870ab5b5c75f23a54eac2ba8dbff38bd4bd33d52aecbc6154ca0ff488e10" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-MacOSX-arm64.sh#6d60e9a8e0f531e09791f033529a6142ceb39ec7d23f8fc8231d287e39cdb30d" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-MacOSX-x86_64.sh#3752cbfae31526e53cae1b2976e183787fc98782c63bbd048853ed8860616051" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-25.1.1-1000066400000000000000000000027311476513315000256500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-aarch64.sh#ae55c260fd250154627f74d0ede010c99c20741698d7d687b2dfca0aa14ce2d5" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-s390x.sh#6957a17c17e86fe43ba3c2e18dcfc1415710410c4a36f7a1c46fbc64aab4fb27" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-x86_64.sh#c5ec876718798ccd6ce93ce38eb3253ef103244ea6efaa8c978df19047ba916a" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-MacOSX-arm64.sh#d717fb09b137a048d9b2f6ee9d3e7ef63ab841e35d80cb37f40d20ac949915c2" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-MacOSX-x86_64.sh#a01dd65f2463bdec15abc1f796847912c67caaf78ea1c67f038ec02aa8c3adaf" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-25.1.1-2000066400000000000000000000027311476513315000256510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-aarch64.sh#5afee04df06c923462341cfc87727100a67fa854550d0d7a2e6295005168e6b7" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-s390x.sh#94a10a8a43dfd0360ecad9df24ef768db1b776d1a76fc2df1928d76c0bbb5535" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-x86_64.sh#b40682cedf1e1755c02555f8d3d98aadb4607a68da7caf72a9bbe1fb9ae0b904" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-MacOSX-arm64.sh#b50b4c46b481d3c9cb4befdbcf18087748d85eee9148c56a35f199940d607933" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-MacOSX-x86_64.sh#92109afe5edcc06d3a3c61b0faf1edd3e3e2539eaad637d2711305ccd0065046" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-4.10.1000066400000000000000000000012321476513315000255020ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_4.10.1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.1-Linux-aarch64.sh#67fb85a56aa7fda6e2fc5cdeb2aafec0" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_4.10.1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.1-Linux-s390x.sh#089da98e758bbc4a0e784d75340ec5d0" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-4.10.3000066400000000000000000000024311476513315000255060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_4.10.3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-Linux-aarch64.sh#d4e7afa2783cd85532d59d7ccb9ec268" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_4.10.3-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-Linux-ppc64le.sh#07ea41c691bdcc7d9c71cae1a1a88151" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_4.10.3-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-Linux-s390x.sh#633ae4c5382ca883f1f38a7d8c472f85" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_4.10.3-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-Linux-x86_64.sh#8c69f65a4ae27fb41df0fe552b4a8a3b" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_4.10.3-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-MacOSX-x86_64.sh#09bb30a9204ced74ce3c06762cb442fc" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-4.11.0000066400000000000000000000027541476513315000255140ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_4.11.0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.11.0-Linux-aarch64.sh#f25b8ff2dbebe0285360ef1b4c883da6" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_4.11.0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.11.0-Linux-ppc64le.sh#305e55110a3ad9384230e5fe396ccd89" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_4.11.0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.11.0-Linux-s390x.sh#26e904d1f42bf8cece2b99a698c10a46" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_4.11.0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.11.0-Linux-x86_64.sh#4e2f31e0b2598634c80daa12e4981647" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_4.11.0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.11.0-MacOSX-arm64.sh#c19959eafcb84a26e00af5d9f55826eb" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_4.11.0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.11.0-MacOSX-x86_64.sh#d1303e5c7510b2ef444b9ba474551733" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-4.12.0000066400000000000000000000027541476513315000255150ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_4.12.0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-aarch64.sh#9baf936183f3479c97bff16fe62fb56c" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_4.12.0-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-ppc64le.sh#2244290b6c899106901bbefad21aa49d" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_4.12.0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-s390x.sh#f8d3b0ad1cf6a3a7175cd76d7e121820" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_4.12.0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh#7843dd7d0a2c53b0df37ca8189672992" "miniconda" verify_py39 ;; "MacOSX-arm64" ) install_script "Miniconda3-py39_4.12.0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-MacOSX-arm64.sh#f7448cfeb278f2a84ed903db02d5525c" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_4.12.0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-MacOSX-x86_64.sh#143b9bb03b6e4865be4ebbf40b108772" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9-4.9.2000066400000000000000000000024171476513315000254410ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniconda3-py39_4.9.2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-aarch64.sh#af1c16d821569ebf1bdaf549fcba7d27" "miniconda" verify_py39 ;; "Linux-ppc64le" ) install_script "Miniconda3-py39_4.9.2-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-ppc64le.sh#73b8d60454389905b1d209f1b0c211d9" "miniconda" verify_py39 ;; "Linux-s390x" ) install_script "Miniconda3-py39_4.9.2-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-s390x.sh#ae66aa46e565c97bf3485275b370c7e5" "miniconda" verify_py39 ;; "Linux-x86_64" ) install_script "Miniconda3-py39_4.9.2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh#b4e46fcc8029e2cfa731b788f25b1d36" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniconda3-py39_4.9.2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-MacOSX-x86_64.sh#0658832393a50f5a578bcad825304886" "miniconda" verify_py39 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-3.9.1000066400000000000000000000016431476513315000251300ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-3.9.1-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-3.9.1-Linux-x86.sh#1a9f8abfc63080c2d764039335a24465388533cca86472224c994ed8d32c4d48" "miniconda" verify_py34 ;; "Linux-x86_64" ) install_script "Miniconda3-3.9.1-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.9.1-Linux-x86_64.sh#6c6b44acdd0bc4229377ee10d52c8ac6160c336d9cdd669db7371aa9344e1ac3" "miniconda" verify_py34 ;; "MacOSX-x86_64" ) install_script "Miniconda3-3.9.1-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-3.9.1-MacOSX-x86_64.sh#e32523e3fdf0addab008e816c54eb6ae6eb6d62b1122d1e0dc4f4313a97b0591" "miniconda" verify_py34 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.0.5000066400000000000000000000016431476513315000251240ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.0.5-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.0.5-Linux-x86.sh#3c06b31b0f70d21f4f62021b8db98929faa3a99ebe6b5b1a2999576d16c30e35" "miniconda" verify_py35 ;; "Linux-x86_64" ) install_script "Miniconda3-4.0.5-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.0.5-Linux-x86_64.sh#a7bcd0425d8b6688753946b59681572f63c2241aed77bf0ec6de4c5edc5ceeac" "miniconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.0.5-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.0.5-MacOSX-x86_64.sh#5673d23ed00515dbb7d236bc0db239c875db54ba1cd0976d907d0552dc58928f" "miniconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.1.11000066400000000000000000000016511476513315000252010ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.1.11-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.1.11-Linux-x86.sh#4e89584027016060ce4e1dc40b8cb9e1c2dfd0d9f99335fca48d419ec90753c5" "miniconda" verify_py35 ;; "Linux-x86_64" ) install_script "Miniconda3-4.1.11-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.1.11-Linux-x86_64.sh#efd6a9362fc6b4085f599a881d20e57de628da8c1a898c08ec82874f3bad41bf" "miniconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.1.11-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.1.11-MacOSX-x86_64.sh#c4e3ba528721278f74e68ef070493a27d920ba10432dd2c2d563774799eda79c" "miniconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.2.12000066400000000000000000000016511476513315000252030ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.2.12-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.2.12-Linux-x86.sh#64dae61d366ada1d5c6baf345a466c95b68eb6df574ee454fc234a7a99943702" "miniconda" verify_py35 ;; "Linux-x86_64" ) install_script "Miniconda3-4.2.12-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.2.12-Linux-x86_64.sh#c59b3dd3cad550ac7596e0d599b91e75d88826db132e4146030ef471bb434e9a" "miniconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.2.12-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.2.12-MacOSX-x86_64.sh#da15fd52352dcefc944a32cd54c8ec3cfc68cfbbadcb86dbea72fe681c7a7a70" "miniconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.3.11000066400000000000000000000016511476513315000252030ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.3.11-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.3.11-Linux-x86.sh#ebda072999dd24bbede7cf3d99fb781187aa9148f71826edadbac0a55ce278cb" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.3.11-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.11-Linux-x86_64.sh#b9fe70ce7b6fa8df05abfb56995959b897d0365299f5046063bc236843474fb8" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.3.11-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.11-MacOSX-x86_64.sh#81f127e36249064d0f87b5d5dfa4d6094c6d5998f36a7bc80cb5028b4e32b7a2" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.3.14000066400000000000000000000016511476513315000252060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.3.14-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-x86.sh#4e3bf0348537770b2768de1e013ebccf2b4d66ce6e7a2942b254a53d3486c394" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.3.14-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-x86_64.sh#902f31a46b4a05477a9862485be5f84af761a444f8813345ff8dad8f6d3bccb2" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.3.14-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.14-MacOSX-x86_64.sh#fa5bf41893336138e262ada14ae7a67824df62c6c87351bb250bde203c253d67" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.3.21000066400000000000000000000016511476513315000252040ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.3.21-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.3.21-Linux-x86.sh#f6a3190b1ada3f7d7a0eb8080cc927216d6c910f2adb5ffdc21817cb71a4fe68" "miniconda" verify_py35 ;; "Linux-x86_64" ) install_script "Miniconda3-4.3.21-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.21-Linux-x86_64.sh#e9089c735b4ae53cb1035b1a97cec9febe6decf76868383292af589218304a90" "miniconda" verify_py35 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.3.21-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.21-MacOSX-x86_64.sh#0f12382bbcd89c4141b0ace621813876723b569daa270b77d9c61323d2d5a881" "miniconda" verify_py35 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.3.27000066400000000000000000000016611476513315000252130ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.3.27.1-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.3.27.1-Linux-x86.sh#15fb3364174544d16f452f50eedc32a8a90e27d2fccddff7313654259322105b" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.3.27.1-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.27.1-Linux-x86_64.sh#640f505f06f87d75bebc629e4a677ebb185ea9a34eb6d7c199db0753ffc42f62" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.3.27-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.27-MacOSX-x86_64.sh#768651bc018eba0e698659dae94fc858b21081334c483c80a069883820208f18" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.3.30000066400000000000000000000016551476513315000252100ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.3.30-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-4.3.30-Linux-x86.sh#5d0c59c3d93b56dea90af1be96a9f36aa7f35605d9f821e8b86c1aa31d3b4e4b" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.3.30-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.30-Linux-x86_64.sh#66c822dfe76636b4cc2ae5604816e0e723aa01620f50087f06410ecf5bfdf38c" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.3.30.1-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-4.3.30.1-MacOSX-x86_64.sh#43d05d914139e6249498fe24cf97390a16eb95b56fc05b7f39470ff8b176d1af" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.3.31000066400000000000000000000015111476513315000252000ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.3.31-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda3-4.3.31-Linux-x86.sh#df2f9770d83df8269f3f43f1e60285e6" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.3.31-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.3.31-Linux-x86_64.sh#7fe70b214bee1143e3e3f0467b71453c" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.3.31-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.3.31-MacOSX-x86_64.sh#03c2dedc466886459e968157c63197f3" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.4.10000066400000000000000000000020251476513315000251770ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-4.4.10-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.4.10-Linux-ppc64le.sh#57ca0b05eb96868b83aa69e4567b86ae" "miniconda" verify_py36 ;; "Linux-x86" ) install_script "Miniconda3-4.4.10-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda3-4.4.10-Linux-x86.sh#e770b4e45ac596c35f6393db988c5c33" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.4.10-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.4.10-Linux-x86_64.sh#bec6203dbb2f53011e974e9bf4d46e93" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.4.10-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.4.10-MacOSX-x86_64.sh#268ec716435aa19212901510f00815fd" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.5.1000066400000000000000000000020151476513315000251170ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-4.5.1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.1-Linux-ppc64le.sh#454e3b786937eeaa50fb7bee991ac19e" "miniconda" verify_py36 ;; "Linux-x86" ) install_script "Miniconda3-4.5.1-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.1-Linux-x86.sh#5d6627bfad03b87f1ad4173ebbeb933d" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.5.1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.1-Linux-x86_64.sh#0c28787e3126238df24c5d4858bd0744" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.5.1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.1-MacOSX-x86_64.sh#ac87d2074bd50103468b8681084236f6" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.5.11000066400000000000000000000020251476513315000252010ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-4.5.11-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-ppc64le.sh#4b1ac3b4b70bfa710c9f1c5c6d3f3166" "miniconda" verify_py36 ;; "Linux-x86" ) install_script "Miniconda3-4.5.11-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-x86.sh#d8c3ea1bd25cf02c4ea92df4d31ef652" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.5.11-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-x86_64.sh#e1045ee415162f944b6aebfe560b8fee" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.5.11-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-MacOSX-x86_64.sh#7f7613bf98023f7d6ffe5df53c3a00a0" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.5.12000066400000000000000000000015111476513315000252010ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-4.5.12-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.12-Linux-x86.sh#38f586a269ac74f5f10195867c4f96ae" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.5.12-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.12-Linux-x86_64.sh#866ae9dff53ad0874e1d1a60b1ad1ef8" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.5.12-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.12-MacOSX-x86_64.sh#a583d1e174e1dc960e87fb4b026a9370" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.5.4000066400000000000000000000020151476513315000251220ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-4.5.4-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.4-Linux-ppc64le.sh#05c1e073f262105179cf57920dfc4d43" "miniconda" verify_py36 ;; "Linux-x86" ) install_script "Miniconda3-4.5.4-Linux-x86" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.4-Linux-x86.sh#0fcc79d640d82b7d36ea39654a82dd9d" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.5.4-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh#a946ea1d0c4a642ddf0c3a26a18bb16d" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.5.4-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.5.4-MacOSX-x86_64.sh#164ec263c4070db642ce31bb45d68813" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.6.14000066400000000000000000000015251476513315000252110ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-4.6.14-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-Linux-ppc64le.sh#6d3bd64dfc436f38755cde1a3ad40799" "miniconda" verify_py36 ;; "Linux-x86_64" ) install_script "Miniconda3-4.6.14-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh#718259965f234088d785cad1fbd7de03" "miniconda" verify_py36 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.6.14-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-MacOSX-x86_64.sh#ffa5f0eead5576fb26b7e6902f5eed09" "miniconda" verify_py36 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.7.10000066400000000000000000000015251476513315000252060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-4.7.10-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.10-Linux-ppc64le.sh#f406a65d6362b33b22520186555c8d88" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-4.7.10-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.10-Linux-x86_64.sh#1c945f2b3335c7b2b15130b1b2dc5cf4" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.7.10-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.10-MacOSX-x86_64.sh#9cc5819a400a3fd5c7363792483fef1e" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-4.7.12000066400000000000000000000027021476513315000252060ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniconda3-4.7.12-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.12-Linux-ppc64le.sh#bd5c2331edcbe87391465e6acf2d3f10" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-4.7.12-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.12-Linux-x86_64.sh#0dba759b8ecfc8948f626fa18785e3d8" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.7.12-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.12-MacOSX-x86_64.sh#677f38d5ab7e1ce4fef134068e3bd76a" "miniconda" verify_py37 ;; "Linux-ppc64le" ) install_script "Miniconda3-4.7.12.1-Linux-ppc64le" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.12.1-Linux-ppc64le.sh#9de38932ed6a8865562e6057b578694f" "miniconda" verify_py37 ;; "Linux-x86_64" ) install_script "Miniconda3-4.7.12.1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.12.1-Linux-x86_64.sh#81c773ff87af5cfac79ab862942ab6b3" "miniconda" verify_py37 ;; "MacOSX-x86_64" ) install_script "Miniconda3-4.7.12.1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-4.7.12.1-MacOSX-x86_64.sh#621daddf9de519014c6c38e8923583b8" "miniconda" verify_py37 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniconda3-latest000066400000000000000000000021371476513315000257530ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-x86" ) install_script "Miniconda3-latest-Linux-x86" "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86.sh" "miniconda" verify_py3_latest ;; "Linux-x86_64" ) install_script "Miniconda3-latest-Linux-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" "miniconda" verify_py3_latest ;; "Linux-aarch64" ) install_script "Miniconda3-latest-Linux-aarch64" "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-aarch64.sh" "miniconda" verify_py3_latest ;; "MacOSX-x86_64" ) install_script "Miniconda3-latest-MacOSX-x86_64" "https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh" "miniconda" verify_py3_latest ;; "MacOSX-arm64" ) install_script "Miniconda3-latest-MacOSX-arm64" "https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-arm64.sh" "miniconda" verify_py3_latest ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniconda3-latest is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge-pypy3000066400000000000000000000020511476513315000254710ustar00rootroot00000000000000 case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge-pypy3-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-Linux-ppc64le.sh" "miniconda" verify_py3_latest ;; "Linux-x86_64" ) install_script "Miniforge-pypy3-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-Linux-x86_64.sh" "miniconda" verify_py3_latest ;; "Linux-aarch64" ) install_script "Miniforge-pypy3-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-Linux-aarch64.sh" "miniconda" verify_py3_latest ;; "MacOSX-x86_64" ) install_script "Miniforge-pypy3-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge-pypy3-MacOSX-x86_64.sh" "miniconda" verify_py3_latest ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge with PyPy3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-22.11.1-3000066400000000000000000000031411476513315000254330ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-22.11.1-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Miniforge3-22.11.1-3-Linux-aarch64.sh#6ee6fbbaaf900f090e9786b093ad829f0d3e6224d8c50ee37d5fc2c1317b2521" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-22.11.1-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Miniforge3-22.11.1-3-Linux-ppc64le.sh#bfccb07a65500c7ed2a7eb363c720caf69dc6baaa36ef52b1224df270c215c2c" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-22.11.1-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Miniforge3-22.11.1-3-Linux-x86_64.sh#b96991615834e66a34f3653f12597b5938425bb00a0ce47dc493ea03ecf6f339" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-22.11.1-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Miniforge3-22.11.1-3-MacOSX-arm64.sh#f416cc5ceb8420d12d078254f161f7c59fd41ca4dfcd86ce6a67c9c34069a15e" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-22.11.1-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-3/Miniforge3-22.11.1-3-MacOSX-x86_64.sh#9e590b6635d97a81fcb8b5366384317db544629b290f34423f3710a6917d2d58" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-22.11.1-4000066400000000000000000000031411476513315000254340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-22.11.1-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Miniforge3-22.11.1-4-Linux-aarch64.sh#2beb7624679016dcd4758ffb9b18efe4ba79af95e2357a606a4945f8ee64dbe6" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-22.11.1-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Miniforge3-22.11.1-4-Linux-ppc64le.sh#d689249d97e170d4dedd54291eb6680243ef83b39900ecb1d6df0679c70434d4" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-22.11.1-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Miniforge3-22.11.1-4-Linux-x86_64.sh#737d1b2666528416706a916b355c43ff58deeaebf5ca906bc1a551e96c73ab8e" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-22.11.1-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Miniforge3-22.11.1-4-MacOSX-arm64.sh#7be6b8b25eb328d6df048a7b533514097a6d30ff348d0f28671059c98c4c31aa" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-22.11.1-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Miniforge3-22.11.1-4-MacOSX-x86_64.sh#d3bd39dc391552a037a95230786c026165c042499fa365aae0da4002d9530731" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-22.9.0-0000066400000000000000000000031221476513315000253550ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-22.9.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Miniforge3-22.9.0-0-Linux-aarch64.sh#e3d8d8a2ca641a70f3aee492fff22f67ced642bded34a260827a1fa82437a999" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-22.9.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Miniforge3-22.9.0-0-Linux-ppc64le.sh#7db5858e7de6d730b92c3a6d1138f21ada88396876fa9fec65115d15e2f922e2" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-22.9.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Miniforge3-22.9.0-0-Linux-x86_64.sh#24b704203a4cdabd99362f52a9836c55219579814eb904188675e077b488be38" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-22.9.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Miniforge3-22.9.0-0-MacOSX-arm64.sh#e9eb55f8409e5f227c5ecc5f5d0024e4d81148454a763b95b612447a1585cc2c" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-22.9.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-0/Miniforge3-22.9.0-0-MacOSX-x86_64.sh#c6e4fc3e9dca2375e91a3bc2f27c01634bb1841ab4d284a3a83b4181ae79b16d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-22.9.0-1000066400000000000000000000031221476513315000253560ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-22.9.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Miniforge3-22.9.0-1-Linux-aarch64.sh#786777d47b27f490701ecb42c61b245bd945c34bc9ce8d7e90f4b87f430297a1" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-22.9.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Miniforge3-22.9.0-1-Linux-ppc64le.sh#f51ea2fe47b2481a42e67747573690e13cac796c6f18ba1af1d198850c35c23a" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-22.9.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Miniforge3-22.9.0-1-Linux-x86_64.sh#47f4b8ef9c5e2ba28eb3c17d27c4d0709f59ea3ab78d7d87c2d34e0c7ad439d5" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-22.9.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Miniforge3-22.9.0-1-MacOSX-arm64.sh#8631692804809f14ac9da0c2d277bcede715854da6b1a3fa81822ba961dc546b" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-22.9.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-1/Miniforge3-22.9.0-1-MacOSX-x86_64.sh#0b56334b4ed62076fbf6973fd3ced9d41190b73ab27432c8db224ca42e614207" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-22.9.0-2000066400000000000000000000031221476513315000253570ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-22.9.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Miniforge3-22.9.0-2-Linux-aarch64.sh#3d75758c4d98181946b29d391323209752c5a111530738b5e36eba77e8e026aa" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-22.9.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Miniforge3-22.9.0-2-Linux-ppc64le.sh#e84ffc9f018d5b23601106f299fefd25a75afb6fdd3416037ce4b561781156fc" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-22.9.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Miniforge3-22.9.0-2-Linux-x86_64.sh#180aefcbcf8a9f24123adb9e64e16c9bb16bc3f129bd79a5912ff44f295cc405" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-22.9.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Miniforge3-22.9.0-2-MacOSX-arm64.sh#6ac610dabf9a64574ec83b158b2eb6023bc3de0de9a0c528d4fa876df2a27d13" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-22.9.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-2/Miniforge3-22.9.0-2-MacOSX-x86_64.sh#d7f50abd340f63515b2059ed462548f5d395e2f9d7847a98c5428998504f5bff" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-22.9.0-3000066400000000000000000000031221476513315000253600ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-22.9.0-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Miniforge3-22.9.0-3-Linux-aarch64.sh#3862fd31ed24d9254cecd8b080dc741b556a6e371b4615880173a782c7cf3b27" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-22.9.0-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Miniforge3-22.9.0-3-Linux-ppc64le.sh#914e0ae86d5ce473379841041e52c7891aa65e46be7892c2258cb439a83dd301" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-22.9.0-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Miniforge3-22.9.0-3-Linux-x86_64.sh#0df76d7a8e66c4f96478ff71b90b7a8df04c19474f3d36dd77ace53e75aa47e4" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-22.9.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Miniforge3-22.9.0-3-MacOSX-arm64.sh#c3065cbfaef72966599fc658a2724f5109b0315f7b9ffc6078fd061b084942f4" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-22.9.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/22.9.0-3/Miniforge3-22.9.0-3-MacOSX-x86_64.sh#45a1314dad30baececc43b4ecef839a17e43860a6a9c77e87ab1d4297796fa9d" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.1.0-0000066400000000000000000000031221476513315000253460ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.1.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Miniforge3-23.1.0-0-Linux-aarch64.sh#4972174d7bc88c636f50257fd2dc718abfd648b227dacbde4c8db716d05bb08b" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.1.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Miniforge3-23.1.0-0-Linux-ppc64le.sh#21ccc195bdee24caf9eef5e8fdd250d3fba9147a68e1cd114c2375cb03ba6043" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.1.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Miniforge3-23.1.0-0-Linux-x86_64.sh#9bbcc29e8e43151bd4634fbe086e3d7914aba3963ac6b1e8d59c530435bd33d9" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.1.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Miniforge3-23.1.0-0-MacOSX-arm64.sh#0aece610f84e023d062e1c88bfc6033dd60101ec9b79819f87fc1b009263989b" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.1.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-0/Miniforge3-23.1.0-0-MacOSX-x86_64.sh#a9665fec3c8c1abd572666d4c49d512b3c27082324a1713ca2fde6efb8ce7856" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.1.0-1000066400000000000000000000031221476513315000253470ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.1.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Miniforge3-23.1.0-1-Linux-aarch64.sh#9083f5aa0a125bfbc1a8e8d5eb57812a2761b884e0806a75ebc3c95be894791e" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.1.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Miniforge3-23.1.0-1-Linux-ppc64le.sh#6b9d4af128f6378ec688ce412fb1a4fe8ce298df9d05bb7092637c8047faeb26" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.1.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Miniforge3-23.1.0-1-Linux-x86_64.sh#7a5859e873ed36fc9a141fff0ac60e133b971b3413aed49a4c82693d4f4a2ad2" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.1.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Miniforge3-23.1.0-1-MacOSX-arm64.sh#147ee54acc6ebd5148d712945fed29c4e01a247528f28fd958615f63bfc75687" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.1.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-1/Miniforge3-23.1.0-1-MacOSX-x86_64.sh#7c737a78918164c5a07a6489b8429f9788aadb58536434c0d34316e7686dc424" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.1.0-2000066400000000000000000000031221476513315000253500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.1.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Miniforge3-23.1.0-2-Linux-aarch64.sh#ca662b0c5620cc4f70afe75a674b212a424bb16da103251d07afe8cfa268983c" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.1.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Miniforge3-23.1.0-2-Linux-ppc64le.sh#34e7db7d071b15abb07603108d5a74c4878aa25be30005163ed9bdbafe8ecf79" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.1.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Miniforge3-23.1.0-2-Linux-x86_64.sh#ee75d00832ef4aeb1ae04ac62ffb1dc917409696cfbe50f5f93125ab9b165278" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.1.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Miniforge3-23.1.0-2-MacOSX-arm64.sh#05891e572dedd62c128c51ed7cdcceba191155779f5ea1abdf0e57e3fba8a982" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.1.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-2/Miniforge3-23.1.0-2-MacOSX-x86_64.sh#1d837379b50b57bf009b6a6956a7cff10dc25ca52a940a35b7090f2e9b6c5482" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.1.0-3000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.1.0-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Miniforge3-23.1.0-3-Linux-aarch64.sh#2e180aa558ff38481ec5147b7f06060c3c8cfbd12894abe31b5f75fc23f7d09a" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.1.0-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Miniforge3-23.1.0-3-Linux-ppc64le.sh#00722f3dd257143816d94d8fc97a3c43ccc3046e31956240d14c210268ccc64e" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.1.0-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Miniforge3-23.1.0-3-Linux-x86_64.sh#d4e4750ac95508512c52ff33fa71834e7839e8c51224694a544aecdd655ce29c" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.1.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Miniforge3-23.1.0-3-MacOSX-arm64.sh#85f4f38d3502871c09d94ab2fd43fe221284eb33c361c486c2b420a726328a7e" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.1.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-3/Miniforge3-23.1.0-3-MacOSX-x86_64.sh#846df715e78ef3b875d1cbf17ed124e261f5ece2dd0e2556310cf4dfbc1238f6" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.1.0-4000066400000000000000000000031221476513315000253520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.1.0-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Miniforge3-23.1.0-4-Linux-aarch64.sh#bf6a4b9d3e0195b9c64b58f0e28738edc259a214f362edbc23884e82ad59cb8c" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.1.0-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Miniforge3-23.1.0-4-Linux-ppc64le.sh#0e49480e6a3429d9578bdbdc154d623375273b3e8c205353c1cc9d6e0cce1f59" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.1.0-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Miniforge3-23.1.0-4-Linux-x86_64.sh#35c531207d2a8d212215bdb7f998c926f24bc8686e1cf46a693a3ea375613a7f" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.1.0-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Miniforge3-23.1.0-4-MacOSX-arm64.sh#de48052b85900a3878cedbb25add7e17b14d5bdfba8ba523791851a10a6b84fe" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.1.0-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.1.0-4/Miniforge3-23.1.0-4-MacOSX-x86_64.sh#a43f4e34aa27b5cb849027b01b03931df52f768fc8b82b1f72f40ff064abb6f3" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.10.0-0000066400000000000000000000031411476513315000254270ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.10.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Miniforge3-23.10.0-0-Linux-aarch64.sh#3760323416d2ce48ca8445386a8c12b453a92f111614dd1870f0ea684d6d32a8" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.10.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Miniforge3-23.10.0-0-Linux-ppc64le.sh#d1a5287138cc4bcc70dad3d1dcf770d8ec13f93c82aeea481bb727860b0f4b5c" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.10.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Miniforge3-23.10.0-0-Linux-x86_64.sh#da66ba24d5ffdf4c339ec8923de9e207f682f2027f9f382103080dea4407ef33" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.10.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Miniforge3-23.10.0-0-MacOSX-arm64.sh#057b6ba35d5872b33b6342183546bd0d5e838460bb019a2fe4db2208eb042135" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.10.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.10.0-0/Miniforge3-23.10.0-0-MacOSX-x86_64.sh#a1785d943daba4f23dac64fc389b4e5929aee6d20eb8ba245671887249238df9" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.11.0-0000066400000000000000000000031411476513315000254300ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.11.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Miniforge3-23.11.0-0-Linux-aarch64.sh#775968746d062a14bd84db3ae72f18f60f4acf229bd840625805e87668486bf4" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.11.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Miniforge3-23.11.0-0-Linux-ppc64le.sh#a77f1293dbc2a70c5b58f495f70dfc143f3455ca9da9edbc1afa66157c1c722a" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.11.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Miniforge3-23.11.0-0-Linux-x86_64.sh#73576b96409ed38a7ca596bece058e8c77c6ef3eab42af7cfdf2ae975e8f3928" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.11.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Miniforge3-23.11.0-0-MacOSX-arm64.sh#9382007611d4ad7201976a33cd65aaf2b3de582285b76c894d8c71eac544bfe1" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.11.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Miniforge3-23.11.0-0-MacOSX-x86_64.sh#6e586a93cc8c6d21deb543d46740806795eae4ff16a76bc5f8a57673e3044c73" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.3.0-0000066400000000000000000000031221476513315000253500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.3.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Miniforge3-23.3.0-0-Linux-aarch64.sh#ca3ccf3006d7923b91157c434c4a9ba58b99812a00cf48aa83f2835ea3f7d167" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.3.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Miniforge3-23.3.0-0-Linux-ppc64le.sh#4b12965a0c0746110480c61440ba836022db72cdfed69616de3dfa66ba7c92df" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.3.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Miniforge3-23.3.0-0-Linux-x86_64.sh#17484f59cbe983abb953cc33e7a4c0ee0b33153de61d5465bb1aaf176e43d038" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.3.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Miniforge3-23.3.0-0-MacOSX-arm64.sh#37ca7c33fefcfb45deef58eaa690970c7392a87f01a076f932dd7f3f684888d7" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.3.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.0-0/Miniforge3-23.3.0-0-MacOSX-x86_64.sh#32f797ba073ae153bd1fd36a556833c0082c3cd44ac25f13fc5228258aadf7a5" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.3.1-0000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.3.1-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Miniforge3-23.3.1-0-Linux-aarch64.sh#b71277b8b40a6817d923fde0b858f56a4504f4e9b659d343dd8eae9d9473ab7f" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.3.1-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Miniforge3-23.3.1-0-Linux-ppc64le.sh#434b461d309110bfeb72198541a541985aa197e3b605de27978c15f31d1520ef" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.3.1-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Miniforge3-23.3.1-0-Linux-x86_64.sh#9be723d231609919fa3e3bb06f899a9a9c22e92e570bada8129a1bf50fee8d73" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.3.1-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Miniforge3-23.3.1-0-MacOSX-arm64.sh#32632039d6f457e56589591bd893f62cba85e31379ec8b663f8b06f35b0860e7" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.3.1-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-0/Miniforge3-23.3.1-0-MacOSX-x86_64.sh#e9447f308499d99821c48293fe258bb47595f238140cd9c834f57321d3839cd0" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-23.3.1-1000066400000000000000000000031221476513315000253520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-23.3.1-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Miniforge3-23.3.1-1-Linux-aarch64.sh#dc5d94b83251621f088bd82df896ea45e63597293ece7ccd923b2346aed34b89" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-23.3.1-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Miniforge3-23.3.1-1-Linux-ppc64le.sh#2eafa28fee5f1dfffb01feaca70de000f8e8335e1f659603ef0b9a40b9d1f213" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-23.3.1-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Miniforge3-23.3.1-1-Linux-x86_64.sh#b3e14bd70f99bc8959445fad3532128a6af36c5e77bc62226db0e80d1df0e9e9" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-23.3.1-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Miniforge3-23.3.1-1-MacOSX-arm64.sh#51d15ed1471ef8633f99574dc0c43fc972ce1981ebf08eade4d9b249bb7640e4" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-23.3.1-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/23.3.1-1/Miniforge3-23.3.1-1-MacOSX-x86_64.sh#d8eef4816b28f1bfc099d8fc2cdac4fb0ebbe1ddd27f4acb66d83d66c260cb63" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.1.2-0000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.1.2-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Miniforge3-24.1.2-0-Linux-aarch64.sh#f881e2fa24aa898c25fac3250ccb213e8b892fdd95851f000dce93c419e8f89a" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.1.2-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Miniforge3-24.1.2-0-Linux-ppc64le.sh#858b9acbcca1e3f67298a56095f547f2c540d79e1020918cf0d8d6a8af407542" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-24.1.2-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Miniforge3-24.1.2-0-Linux-x86_64.sh#dbadb808edf4da00af35d888d3eeebbfdce71972b60bf4b16dbacaee2ab57f28" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.1.2-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Miniforge3-24.1.2-0-MacOSX-arm64.sh#b372d2189e5752e92a4b4bbc4a91b8a08a4f0612d39c0762111c8dd60914b1c7" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.1.2-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.1.2-0/Miniforge3-24.1.2-0-MacOSX-x86_64.sh#e447e7e0173e94ea8725a4c6675c29bcd3082f8fff7948b47e05af72b12d1261" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.11.0-0000066400000000000000000000031411476513315000254310ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.11.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Miniforge3-24.11.0-0-Linux-aarch64.sh#47cfd3caf3a0a6f56ebbfc7da775306fe076b8e49b14d3fd88b5463ab324c185" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.11.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Miniforge3-24.11.0-0-Linux-ppc64le.sh#877e3992041e36f49ce16681e5b24e23617ad044d1a077cf21b5cce90896e244" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.11.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Miniforge3-24.11.0-0-Linux-x86_64.sh#5fa69e4294be07229a94a1c1e8073fbf63894c757c2136f98c87b48f9d458793" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.11.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Miniforge3-24.11.0-0-MacOSX-arm64.sh#3c7c115de0ed6103b7d2e5c1fe969c2c9fd3aec4a454c1d5aa9b5721414413e0" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.11.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-0/Miniforge3-24.11.0-0-MacOSX-x86_64.sh#1f0527ec14784de0766d8405a674868e51afb869ea16c915fb2672256209ecfd" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.11.0-1000066400000000000000000000031411476513315000254320ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.11.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Miniforge3-24.11.0-1-Linux-aarch64.sh#21e5af2d961a19535e1ba8d67d8ce46c522b6e616dea826c6987ff4db8499b73" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.11.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Miniforge3-24.11.0-1-Linux-ppc64le.sh#20847d0978fbf301da2f9d66ae47dc9da8c080cc1e3f70acb2264e3b6ff99ceb" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.11.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Miniforge3-24.11.0-1-Linux-x86_64.sh#936836bb2dd546a7ab5999bed2a2d1ce8416c5359e28199df8b384529a85dcac" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.11.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Miniforge3-24.11.0-1-MacOSX-arm64.sh#6c2ff0b7cf1b6300a3dc6125da8e78407d3ffd3a7359742957fcca0cd7cd7604" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.11.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.0-1/Miniforge3-24.11.0-1-MacOSX-x86_64.sh#5f42fb48c528b2f60a659d0cc19adb74a4098d8a1519ac7fe0724273eae050c5" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.11.2-0000066400000000000000000000031411476513315000254330ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.11.2-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-0/Miniforge3-24.11.2-0-Linux-aarch64.sh#4f182710a6394f81eda2a6f8578c63d4b52842ad8a9c6b54c7a4cf43513cf118" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.11.2-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-0/Miniforge3-24.11.2-0-Linux-ppc64le.sh#6fb5e999d256eeb79c0ce793145966b995b22ff1001ec0fd662be2ba4a4fb538" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.11.2-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-0/Miniforge3-24.11.2-0-Linux-x86_64.sh#e6ac45dc94bbc93a31802ed8b74f41b653a132e9f5d4d6b028ae00c5a9c563ba" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.11.2-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-0/Miniforge3-24.11.2-0-MacOSX-arm64.sh#f62f38d92e4ae015d82d1aa4aad392747f4e1a61d75deece3a68bdaf472e3ca7" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.11.2-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-0/Miniforge3-24.11.2-0-MacOSX-x86_64.sh#9dd0058e927986bc53d0685f6ac995267f7d8edbd178b4a47692bf08bfd7b11c" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.11.2-1000066400000000000000000000031411476513315000254340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.11.2-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-1/Miniforge3-24.11.2-1-Linux-aarch64.sh#ef4e191fc6843f343d51b31310d36eacbc1de2899ea233190ff63188ffe30894" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.11.2-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-1/Miniforge3-24.11.2-1-Linux-ppc64le.sh#ddda150ca836abaa03e718945687614f9b8fd9694dffd7f3d73d416ba2027e0d" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.11.2-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-1/Miniforge3-24.11.2-1-Linux-x86_64.sh#c79c7326a846d6df9ec824e19ccc99454d8f5009e37888df301b23eef11280ca" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.11.2-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-1/Miniforge3-24.11.2-1-MacOSX-arm64.sh#8bde418e8f5030b887535940cad3b531adf128a38b99e58ba6a26e68e9d5ad06" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.11.2-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.2-1/Miniforge3-24.11.2-1-MacOSX-x86_64.sh#50a00997a0f08737d076e93f964dffcb51bc4792fd9371344fd244ab97bcf61c" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.11.3-0000066400000000000000000000031411476513315000254340ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.11.3-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.3-0/Miniforge3-24.11.3-0-Linux-aarch64.sh#d3f2b771857009ec804faeeef191352186194cb5737a831e55c6347a5f47cb8f" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.11.3-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.3-0/Miniforge3-24.11.3-0-Linux-ppc64le.sh#8f8a2eadc773e4c9a3d4587a08b24646e0b2374e0ea0ac538a499303c2527fd2" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.11.3-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.3-0/Miniforge3-24.11.3-0-Linux-x86_64.sh#2e1ad2188fe69fcdd522c2b20c08c800a5c7411b775eca768318b1540ed32e53" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.11.3-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.3-0/Miniforge3-24.11.3-0-MacOSX-arm64.sh#dbead9822b1932ecc1b3238311a843400462b38e302bbd067ef373aa39dedd4f" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.11.3-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.11.3-0/Miniforge3-24.11.3-0-MacOSX-x86_64.sh#1f8e16f2f8e7538c2ef1d08cbb8f2feadc75907e31dbcde75a10ca788fc03abb" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.3.0-0000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.3.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Miniforge3-24.3.0-0-Linux-aarch64.sh#6c879fe354d3e26b8d960cff6b1f3cb9d2e58c79c5c07f23fff62469dc5c1480" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.3.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Miniforge3-24.3.0-0-Linux-ppc64le.sh#b7710f5dbab9a49995e027cc72cc729ad54506fbba7b936b56737d1437aa6504" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-24.3.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Miniforge3-24.3.0-0-Linux-x86_64.sh#23367676b610de826f50f7ddc91139a816d4b59bd4c69cc9b6082d9b2e7fe8a3" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.3.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Miniforge3-24.3.0-0-MacOSX-arm64.sh#9b3c3d9fa30437592e680390f2b27d45c5d5cfcbfad9a1af233f70a6d8be71a1" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.3.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Miniforge3-24.3.0-0-MacOSX-x86_64.sh#26a80621b146d60e5ae0d896b83ec138416653b951286361b1f93a804cb6a8d9" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.5.0-0000066400000000000000000000031221476513315000253530ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.5.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Miniforge3-24.5.0-0-Linux-aarch64.sh#848f2d6917c473b1091e31a51241a7626d4dac4b90809a9b2ed937e0cea18d87" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.5.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Miniforge3-24.5.0-0-Linux-ppc64le.sh#1a947af7d68e8a06c2057c9a01ec03a5f7e26133fe42ad531f0a4b898b91dc86" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.5.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Miniforge3-24.5.0-0-Linux-x86_64.sh#a754b435830e1c038dada434873ad69a99970a4ea17a68d3bbcade0a37c8c8fb" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.5.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Miniforge3-24.5.0-0-MacOSX-arm64.sh#9c423bb8c9b80709f9682eac9d2a8f5cdecb54601fd4ec1ec6bb98349cf54a92" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.5.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.5.0-0/Miniforge3-24.5.0-0-MacOSX-x86_64.sh#31ad3bbd4114021cdd1bf14a641bcf0f38b4dc71f0931be2720528c2555a587e" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.7.1-0000066400000000000000000000031221476513315000253560ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.7.1-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Miniforge3-24.7.1-0-Linux-aarch64.sh#7a3372268b45679584043b4ba1e0318ee5027384a8d330f2d991b14d815d6a6d" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.7.1-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Miniforge3-24.7.1-0-Linux-ppc64le.sh#af1015e0531f4ff5e19001c476b720609609401d9cb80fc8a02c5e5d50e02ed5" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.7.1-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Miniforge3-24.7.1-0-Linux-x86_64.sh#b64f77042cf8eafd31ced64f9253a74fb85db63545fe167ba5756aea0e8125be" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.7.1-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Miniforge3-24.7.1-0-MacOSX-arm64.sh#2de2a2a31964be19ae157b5f93429cb50f8bf3983c580c8b14acefaf3d7e7c5b" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.7.1-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Miniforge3-24.7.1-0-MacOSX-x86_64.sh#03b73291d46199a40cb694a400010de9d737e6397d3eed676f28828fe2df5025" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.7.1-1000066400000000000000000000031221476513315000253570ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.7.1-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Miniforge3-24.7.1-1-Linux-aarch64.sh#9ed15a4d030928c6e537cb673538803ca5f07adb89957b9cfc24ebdc00ba4bf9" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.7.1-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Miniforge3-24.7.1-1-Linux-ppc64le.sh#9b05977d9fdadcc9cd9aeb9199a302139b9a77f708e39e83bfc0b1a1f4a7d4b8" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.7.1-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Miniforge3-24.7.1-1-Linux-x86_64.sh#6ae27b78c8cd5ce19987970dc734648ca0bf7ce7a7b3c0e41ab514cfe92add1d" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.7.1-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Miniforge3-24.7.1-1-MacOSX-arm64.sh#4effe540ea3abe9b2b5c1dad897f6186f343c4d6c8c234f8a5a4cb544ed14ec9" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.7.1-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-1/Miniforge3-24.7.1-1-MacOSX-x86_64.sh#8c880fdb3cb80e1a2ebbfd82cc84b2ab7409aa515843423e8aaa77cd08149053" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.7.1-2000066400000000000000000000031221476513315000253600ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.7.1-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Miniforge3-24.7.1-2-Linux-aarch64.sh#7bf60bce50f57af7ea4500b45eeb401d9350011ab34c9c45f736647d8dba9021" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.7.1-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Miniforge3-24.7.1-2-Linux-ppc64le.sh#bb5d14dac73b85da8fbe386cdd3c94022a468563a0c55e6b20a58d82b55a9737" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.7.1-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Miniforge3-24.7.1-2-Linux-x86_64.sh#636f7faca2d51ee42b4640ce160c751a46d57621ef4bf14378704c87c5db4fe3" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.7.1-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Miniforge3-24.7.1-2-MacOSX-arm64.sh#cafa7cc6d7baef6ea292880ae46c6c9d28bc1156394a418ceada30118d8b6b9a" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.7.1-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.7.1-2/Miniforge3-24.7.1-2-MacOSX-x86_64.sh#ec6150160703ee622e6520863f68c5130473b69558aed822c4e369e90ef42aad" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.9.0-0000066400000000000000000000031221476513315000253570ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.9.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Miniforge3-24.9.0-0-Linux-aarch64.sh#7fae81c0df8545175a647e09b1372dcbf32a1b7fcc194d0d5ffc9a13be4e4269" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.9.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Miniforge3-24.9.0-0-Linux-ppc64le.sh#d442c75fd69359dd8ef444e3ba16a83d88ff437c92669661e2450b0d81575305" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.9.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Miniforge3-24.9.0-0-Linux-x86_64.sh#a75b489adb52effd81d15f0e700c0803992fe6a2357e8eb80685a529df7daa48" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.9.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Miniforge3-24.9.0-0-MacOSX-arm64.sh#ac903e9babc2067add5a6619a1e37bbd4ddb9177ba633ecfa63c8e68df6e1fca" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.9.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.0-0/Miniforge3-24.9.0-0-MacOSX-x86_64.sh#0b32751fe373819f813490b640c7e83baecf208727fae34a7495d3127f983663" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-24.9.2-0000066400000000000000000000031221476513315000253610ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-24.9.2-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Miniforge3-24.9.2-0-Linux-aarch64.sh#f33ec46c6c9dbcdc9d1101b04dcddff17f4ca54524a9575992e743bbc051d61c" "miniconda" verify_py312 ;; "Linux-ppc64le" ) install_script "Miniforge3-24.9.2-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Miniforge3-24.9.2-0-Linux-ppc64le.sh#0b24b38611b486e3d1615aa778a6252430d54ae6e1210cd2874a3d8e8efd7abe" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-24.9.2-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Miniforge3-24.9.2-0-Linux-x86_64.sh#ca8c544254c40ae5192eb7db4e133ff4eb9f942a1fec737dba8205ac3f626322" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-24.9.2-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Miniforge3-24.9.2-0-MacOSX-arm64.sh#b2ee4415bce51895b74b99de6e83ac0f737fd968052b5b49f79e05b292220084" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-24.9.2-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Miniforge3-24.9.2-0-MacOSX-x86_64.sh#22b9eab7508d464c7d270883e733496beef25520d96c8383b4683f0122ae0222" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-25.1.1-0000066400000000000000000000024761476513315000253640ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-25.1.1-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/25.1.1-0/Miniforge3-25.1.1-0-Linux-aarch64.sh#4183d312c6a42edd5bc06be21e92b0d8b9afb720efc37df44f3e5002b35f9d2e" "miniconda" verify_py312 ;; "Linux-x86_64" ) install_script "Miniforge3-25.1.1-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/25.1.1-0/Miniforge3-25.1.1-0-Linux-x86_64.sh#a37495662f55746d92344b309b8b594d6b1a83d7acdd742adaca93ed2e10d32b" "miniconda" verify_py312 ;; "MacOSX-arm64" ) install_script "Miniforge3-25.1.1-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/25.1.1-0/Miniforge3-25.1.1-0-MacOSX-arm64.sh#0f82fec65b7900cbffbda22a1d7a64c278569be241f6f2b87eded9a0f4c54008" "miniconda" verify_py312 ;; "MacOSX-x86_64" ) install_script "Miniforge3-25.1.1-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/25.1.1-0/Miniforge3-25.1.1-0-MacOSX-x86_64.sh#6b0e0e1901d121292edc52acc948d92a473218c1c4d621df9403805fc19f0dff" "miniconda" verify_py312 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10000066400000000000000000000026361476513315000250630ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge3-4.10.0-0-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/download/4.10.0-0/Miniforge3-4.10.0-0-Linux-ppc64le.sh#cb72e16906f025bbc979b5e72b494722" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.0-0-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.0-0/Miniforge3-4.10.0-0-Linux-x86_64.sh#3db11e33e22a78e2d3371acc883625df" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Miniforge3-4.10.0-0-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.0-0/Miniforge3-4.10.0-0-Linux-aarch64.sh#64ec2e626c1c71332a73081fe482d08e" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.0-0-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.0-0/Miniforge3-4.10.0-0-MacOSX-arm64.sh#a44e4306922989e49a888c4dd2ad6263" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.0-0-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.0-0/Miniforge3-4.10.0-0-MacOSX-x86_64.sh#76a212a23d14e3f027d44fe6837e4a7d" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.1-1000066400000000000000000000026361476513315000253600ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge3-4.10.1-1-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-1/Miniforge3-4.10.1-1-Linux-ppc64le.sh#37743c08b9394c6345d538f3952a1640" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.1-1-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-1/Miniforge3-4.10.1-1-Linux-x86_64.sh#e1f2f1f0fe54d3aab5585238e5517ac5" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Miniforge3-4.10.1-1-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-1/Miniforge3-4.10.1-1-Linux-aarch64.sh#64ec2e626c1c71332a73081fe482d08e" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.1-1-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-1/Miniforge3-4.10.1-1-MacOSX-arm64.sh#888fac13d06ae4c4a79eaa9c6ab79473" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.1-1-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-1/Miniforge3-4.10.1-1-MacOSX-x86_64.sh#792fa7d76d0fa02304ec0b4fa2786352" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.1-3000066400000000000000000000030761476513315000253610ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge3-4.10.1-3-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-3/Miniforge3-4.10.1-3-Linux-ppc64le.sh#650083e39c5b3910600debfce07a3644b5906621be72d16847d1ca05f4f5b4f8" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.1-3-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-3/Miniforge3-4.10.1-3-Linux-x86_64.sh#0ab2d494557ce8dfb4344bd960eb98c92d02f25d174c77029a459b20884e0e26" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Miniforge3-4.10.1-3-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-3/Miniforge3-4.10.1-3-Linux-aarch64.sh#8bb5e5885c4b4e9bed0621740a40ceb428c4894b339050227b25690181da2794" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.1-3-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-3/Miniforge3-4.10.1-3-MacOSX-arm64.sh#ea7fd5565debe13f484f15236651da88f0137e99b27c36d9001373f13621e393" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.1-3-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-3/Miniforge3-4.10.1-3-MacOSX-x86_64.sh#1b85ece22e2d35565db90dfc9121e15fcd4eb179e948983662157e7a9fad2201" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.1-5000066400000000000000000000030761476513315000253630ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge3-4.10.1-5-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Miniforge3-4.10.1-5-Linux-ppc64le.sh#0b23d9c25582dbd2cf8171366f5fb0ef5d5e7f8262eb670094f33400e88f3726" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.1-5-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Miniforge3-4.10.1-5-Linux-x86_64.sh#f47637e899258d4fa568aa866c37ecf19a2dacc50fa64a5ebc65443ccdf73243" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Miniforge3-4.10.1-5-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Miniforge3-4.10.1-5-Linux-aarch64.sh#d582c3bf289dc5c2f86dde9182b27e49b095d00da40842f3e379a113b12ce7cb" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.1-5-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Miniforge3-4.10.1-5-MacOSX-arm64.sh#29fee39691dfe84cf3222c61fce0c8357d933eefcc0d49041b48153efe91f345" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.1-5-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.1-5/Miniforge3-4.10.1-5-MacOSX-x86_64.sh#f67dfc4d5e3dea173e31267eb0890733098f0fd2d42944282d17f27a1bc3f8cc" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.2-0000066400000000000000000000031221476513315000253470ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.2-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Miniforge3-4.10.2-0-Linux-aarch64.sh#eb0a303e716d795b64a4ab056e3c03dae7760c3a3275312419051d272f5d0307" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.2-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Miniforge3-4.10.2-0-Linux-ppc64le.sh#1a55c5f9ee8c49ce0368b77acb4964a8b060ca57d951f68adb98b28c3ed5c145" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.2-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Miniforge3-4.10.2-0-Linux-x86_64.sh#d2d66f09811c0d846ffb2f04c1827854aa4333624a0dc841389230291d944c30" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.2-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Miniforge3-4.10.2-0-MacOSX-arm64.sh#36d4a12254c90bdacd3c2a757c8c257dffe3c67754c44372d446c2a54e03cebc" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.2-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.2-0/Miniforge3-4.10.2-0-MacOSX-x86_64.sh#60aaecd1681633e84bad0520479e938a0a0c671fa7d78d2aa607d4807c670975" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-0000066400000000000000000000031221476513315000253500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Miniforge3-4.10.3-0-Linux-aarch64.sh#4aff1bfe62b2974a418937bd4687316acef46e461908332159b2f68cb95f6d67" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Miniforge3-4.10.3-0-Linux-ppc64le.sh#b854e26db0635846ad4065c54de9d8cef7a97050d7e1303923c5ba18ea9b4dd1" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Miniforge3-4.10.3-0-Linux-x86_64.sh#c22bd3f494ac12f3ef2f146d7625ab140272670f7b4d606af8ff50aac3a0dae2" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Miniforge3-4.10.3-0-MacOSX-arm64.sh#14e0ce6a16c7de8372d0d59cdf279b53601f62b14a073d0824c5ee7384005a2f" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-0/Miniforge3-4.10.3-0-MacOSX-x86_64.sh#e405b2a2be60b6b408569e4b7f6e39c87c3b579235e92dd58615fe708f18d036" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-1000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Miniforge3-4.10.3-1-Linux-aarch64.sh#ebb7b2548f3908ccc1b3c39bc41e2a3dbe19b4d266e844bc929147c39c8a14d3" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Miniforge3-4.10.3-1-Linux-ppc64le.sh#cf20609570a5a716e7370a836ee895cbc4e7ca2683a598d32cc0573fddd65e66" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Miniforge3-4.10.3-1-Linux-x86_64.sh#303d65289f600fa4c85fe2b0fef9bb0848ec544a75a9c3079607d847918f7023" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Miniforge3-4.10.3-1-MacOSX-arm64.sh#823f61563947fd9ff92970f4e2323f2f0b61fe5f3cfb75cc7579a1c6169f8853" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-1/Miniforge3-4.10.3-1-MacOSX-x86_64.sh#8ed6871bbd0b24f66b2d87fd88cbcd0854142e5cf1447de5f5f246884ef9c846" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-10000066400000000000000000000031151476513315000254330ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-10-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Miniforge3-4.10.3-10-Linux-ppc64le.sh#8df85d4af3d2d24f86bb6784d4c196b770b7b9c0be8917d79aec9e08f517d0e9" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-10-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Miniforge3-4.10.3-10-Linux-x86_64.sh#8ed8cd582d16cd58e0ccd87e692fbe71de6365a51678b579b2f40d8d6f6e5771" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Miniforge3-4.10.3-10-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Miniforge3-4.10.3-10-Linux-aarch64.sh#b2d510c6cd0aac3964a7a7838a7f7376b804fbdd0ba04909ece53f883f624233" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-10-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Miniforge3-4.10.3-10-MacOSX-arm64.sh#bd4d59ead779a6e2d9af69fd8cdcaac8e1446191c59ab446ae8547a1aecd75b7" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-10-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-10/Miniforge3-4.10.3-10-MacOSX-x86_64.sh#7d325a5370664ec2fe1c09c3066c22fd905431f338c7eed31ad7e14c7ce4bd83" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-2000066400000000000000000000031221476513315000253520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Miniforge3-4.10.3-2-Linux-aarch64.sh#11705546b6e6f7052a83992b7505f74e7cb51b5a519ddccbd9eabfad9451bfee" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Miniforge3-4.10.3-2-Linux-ppc64le.sh#da8c5a43f941155aa937bb00068e4ecc5651fe3a9ea0eddd9c40e339eb5fa6d7" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Miniforge3-4.10.3-2-Linux-x86_64.sh#8af640a77047b493d37b4e21302387abb6a62e0b3f942416c525e60dde019c7e" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Miniforge3-4.10.3-2-MacOSX-arm64.sh#74fdfc71022af33ef671c9fe08f917f0e5d4ff5e69b1ef1a02b72f12df146d45" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-2/Miniforge3-4.10.3-2-MacOSX-x86_64.sh#ac68224f726bc2dc38502d6aaf605af976d29cc3fbaaca3c948b1fd5271e8235" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-3000066400000000000000000000031221476513315000253530ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Miniforge3-4.10.3-3-Linux-aarch64.sh#ca6aa614c217c923bbb6fb48246f356b013697629bcf7d4d3b71c8813910ff94" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Miniforge3-4.10.3-3-Linux-ppc64le.sh#84572443a08a640a0308f3f80a3a98431241eed646c26398144b2c8042524006" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Miniforge3-4.10.3-3-Linux-x86_64.sh#12c83e744bf52564445cae0281bc7870b24c77257ac9c72986cbb1443e9b6d0a" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Miniforge3-4.10.3-3-MacOSX-arm64.sh#5f5906dec9ba56fe4cbf1a50b9a573629f4af8f3f166785d114a8af65b9c78a3" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-3/Miniforge3-4.10.3-3-MacOSX-x86_64.sh#3242d65bae12edf2d7cd29ed466fc72cb66f3f031f621ac360ab8968e4d29974" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-4000066400000000000000000000031221476513315000253540ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Miniforge3-4.10.3-4-Linux-aarch64.sh#1237209ed8145efc05dcc4e97e367811d569154609fffcc22ebcb08b0e0392d2" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Miniforge3-4.10.3-4-Linux-ppc64le.sh#591825a5b5f690bb74759c0f93c347f0ae1f9b30057609d8205a11b2b7c21902" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Miniforge3-4.10.3-4-Linux-x86_64.sh#13626e6d43546d0b8c47be37b34d2c2ba5e0a518066b0659addb4afcc30a70be" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Miniforge3-4.10.3-4-MacOSX-arm64.sh#0079a2172ff9cc92d6a0f30d4269d7e27ef77f5074525c31fb46db57f9ccaefe" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-4/Miniforge3-4.10.3-4-MacOSX-x86_64.sh#21be593ec3a3d917862bf452a78bf4c9dddb9b360346562b3c19c21efd892d77" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-5000066400000000000000000000031221476513315000253550ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-5-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Miniforge3-4.10.3-5-Linux-aarch64.sh#acd5f31fd2bdd9ebd996a6d5b36fcc6a8ab5d0b3820cbc47d660afa2cf0bd3ba" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-5-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Miniforge3-4.10.3-5-Linux-ppc64le.sh#e018e8a7c41e1871b456bc27efbc0e3a4093d3e6ba84cb5ea94f6d0601b3e27a" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-5-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Miniforge3-4.10.3-5-Linux-x86_64.sh#5f143112b6c9533c550b447cc01f7313a86b6b88b92632791bcb4320e57f9af6" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-5-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Miniforge3-4.10.3-5-MacOSX-arm64.sh#77989d3186c21ec8de9ff22ef076e815c465c026cef087601b2bec5d02cfd889" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-5-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-5/Miniforge3-4.10.3-5-MacOSX-x86_64.sh#6f324566af60279518c2d03ffd69f605b335f87f72e6e7e4c2f383808e41e212" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-6000066400000000000000000000031221476513315000253560ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-6-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Miniforge3-4.10.3-6-Linux-aarch64.sh#a79cd78324bb42cde5150d2194744205b9ebae1ebab06c50c3205e4846efb9e0" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-6-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Miniforge3-4.10.3-6-Linux-ppc64le.sh#d3624b1d7a715a6089c309b9a593a5c241a1d959d00b037c074d3080be587b27" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-6-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Miniforge3-4.10.3-6-Linux-x86_64.sh#8e76a21311e4fcc9ee8497b72717b276bb960e0151c5b27816502f14bac6303f" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-6-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Miniforge3-4.10.3-6-MacOSX-arm64.sh#4ba889103eb119e9d12e45b5fba3bcdef45877d9a886657f14f1ebe71a9b5a63" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-6-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-6/Miniforge3-4.10.3-6-MacOSX-x86_64.sh#eabb50e2594d55eeb2a74fa05a919be876ec364e8064e1623ab096f39d6b6dd1" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-7000066400000000000000000000031221476513315000253570ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-7-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Miniforge3-4.10.3-7-Linux-aarch64.sh#d597961defe8c7889f3e924d0dc7624fab2c8845abccdd8ffa8da8018ff3dc6e" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-7-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Miniforge3-4.10.3-7-Linux-ppc64le.sh#8825827240c0d06413876055bf3a04d8704f0e5ac773692a352502862dce7aa5" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-7-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Miniforge3-4.10.3-7-Linux-x86_64.sh#4de9b7dcc9b2761136f4a7a42a8b2ea06ae2ebc61d865c9fca0db3d6c90b569d" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-7-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Miniforge3-4.10.3-7-MacOSX-arm64.sh#3cd1f11743f936ba522709eb7a173930c299ac681671a909b664222329a56290" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-7-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-7/Miniforge3-4.10.3-7-MacOSX-x86_64.sh#a25c1b381b20873ed856ce675a7a2ccf48f1d6782a5cdce9f06496e6ffa7883f" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-8000066400000000000000000000014311476513315000253610ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-8-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-8/Miniforge3-4.10.3-8-MacOSX-arm64.sh#ed1f245d8effb463c9bd5d1cde034e7e291684e0668885a87deb34303dafced5" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-8-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-8/Miniforge3-4.10.3-8-MacOSX-x86_64.sh#9c123f45da81878b3b3f221dcb7595f6420cac0310235316a7deba93cf12bbe3" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.10.3-9000066400000000000000000000031221476513315000253610ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.10.3-9-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Miniforge3-4.10.3-9-Linux-aarch64.sh#33850a3806c61c2f0c27a4619a49a2ab7c27691b65b64ea764b57b3cc572efa1" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.10.3-9-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Miniforge3-4.10.3-9-Linux-ppc64le.sh#7192460dcf7d309ebe0c2e53f0034c86b097de4f1ebf669f677d57886b9b48de" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.10.3-9-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Miniforge3-4.10.3-9-Linux-x86_64.sh#387ed0e31a0e16def1f4b602c8a3633f707c53fff7cbf2ff56175953d0c6f7e7" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.10.3-9-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Miniforge3-4.10.3-9-MacOSX-arm64.sh#68196959ddc966046935ab80fb0fda73675914e55e96764e0358f7eb4a4e7714" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.10.3-9-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.10.3-9/Miniforge3-4.10.3-9-MacOSX-x86_64.sh#86ba79bba787ea943d11810b8f7b393a3ce5d421cd31528436c3ffa17eb062ed" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.11.0-0000066400000000000000000000031221476513315000253460ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.11.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Miniforge3-4.11.0-0-Linux-aarch64.sh#3c4728ece94f005a0edfcb45f930bf2fd4acdaafdee2692006b0322ca6c44ca7" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.11.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Miniforge3-4.11.0-0-Linux-ppc64le.sh#cfaedc8ff54703b91ef0a1f27232ac4f85dad2725d65a19624e63674aca19bd0" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.11.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Miniforge3-4.11.0-0-Linux-x86_64.sh#4c24b38969ac413efa3a984290296f72578340d06004f2c7ba5efcbf828ec86b" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.11.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Miniforge3-4.11.0-0-MacOSX-arm64.sh#d37c13f42f6d8e1b5786da5c73735eb4584a100c8b3572e5413dffe943a6a38b" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.11.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-0/Miniforge3-4.11.0-0-MacOSX-x86_64.sh#037da3c64fd8f8179ce99909784cfdaa2326b7ea832e747de8ea9e396c1583e7" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.11.0-1000066400000000000000000000031221476513315000253470ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.11.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Miniforge3-4.11.0-1-Linux-aarch64.sh#5032a44b9a6c11a2ef46c02707c9c21adc276e2acd40305d615a6b923b7acd26" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.11.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Miniforge3-4.11.0-1-Linux-ppc64le.sh#38ea90c2aa8c380a50f8fadf329981b0ad8c05064a928212a234e9101d23a81f" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.11.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Miniforge3-4.11.0-1-Linux-x86_64.sh#83ed76dcc907c9d9fc553a8a33278f06e80a27ac47c0db78e73f2b14f0bfbad1" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.11.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Miniforge3-4.11.0-1-MacOSX-arm64.sh#67f6c7bec83f04d8fe3a8083c6a13084b9dd0bb33e5bb8975a9a6531f7360875" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.11.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-1/Miniforge3-4.11.0-1-MacOSX-x86_64.sh#9795921a6836f0d1e0abc10e4a724dcddaba8fbcf9740b2764c6d64f1378b835" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.11.0-2000066400000000000000000000031221476513315000253500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.11.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Miniforge3-4.11.0-2-Linux-aarch64.sh#6497f1e696c4f2931acecdc341242f3b2d1acfdb1360c6dd86dbd5a4000a970d" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.11.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Miniforge3-4.11.0-2-Linux-ppc64le.sh#7661deb911b2210d619a60c4f63275680c003ec83898fd80af4025d30e722a44" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.11.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Miniforge3-4.11.0-2-Linux-x86_64.sh#f671f3a225ce5517021f0eb430ffa9110eebad8e0a0549d36c778e7769cb4970" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.11.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Miniforge3-4.11.0-2-MacOSX-arm64.sh#eba035fb0f2f0d7a095713e93fd3848c847e18e8dbbef7173653f57a0518abe8" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.11.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-2/Miniforge3-4.11.0-2-MacOSX-x86_64.sh#379323b33054730c7d06004f9a0cc7eb8283e45ae6d44814bb0b283d5eda2f03" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.11.0-3000066400000000000000000000014311476513315000253520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "MacOSX-arm64" ) install_script "Miniforge3-4.11.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-3/Miniforge3-4.11.0-3-MacOSX-arm64.sh#e74e4acfcc2bdf662746172b684855790d018f3b9c1d2630e65b2c4e316f3eb5" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.11.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-3/Miniforge3-4.11.0-3-MacOSX-x86_64.sh#f7a5e379135a7f2454a6cfe7d81fa7f6a082793c60d6c88648b4035ca1c83d24" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.11.0-4000066400000000000000000000031221476513315000253520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.11.0-4-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Miniforge3-4.11.0-4-Linux-aarch64.sh#7b88645381840589aeaa8a2a9a3a077a0909541ecfd6752b44eef53af83786b5" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.11.0-4-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Miniforge3-4.11.0-4-Linux-ppc64le.sh#adfe136cef5dd92bf54ec8e71656714ec485a140b18cfb3319837828d4a5ede0" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.11.0-4-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Miniforge3-4.11.0-4-Linux-x86_64.sh#b8560aaab6edce86e690cdf096427dde0fa2c4f1bb083b20b642e6b2b4543ed1" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.11.0-4-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Miniforge3-4.11.0-4-MacOSX-arm64.sh#7b3e3c29f8cc4a6a13e53f20e155f7bd30216e071c6028f699582b23bff06e60" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.11.0-4-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.11.0-4/Miniforge3-4.11.0-4-MacOSX-x86_64.sh#5f0019f6f671f3a41352b53ee7001dfbc6d7806a62d3691159c60d493ed82ea2" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.12.0-0000066400000000000000000000031221476513315000253470ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.12.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Miniforge3-4.12.0-0-Linux-aarch64.sh#09b0ec8cefd3d94327ce12185af8164c8890bff00351b3f64bf280e22e947d21" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.12.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Miniforge3-4.12.0-0-Linux-ppc64le.sh#29e3969b82538c78a13e684f53c0a0cd2eba7b500e7e187e4d6bddacc3eb66e1" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.12.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Miniforge3-4.12.0-0-Linux-x86_64.sh#ccb6c87f42355e2e0b652dd35a980b7c60ca5e53643237f6a070748ef0dd23ff" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.12.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Miniforge3-4.12.0-0-MacOSX-arm64.sh#e52cb92d620c5a408afef9ac8b5d2e964e2c72211c69cc41a2bb4d6af0a26001" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.12.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Miniforge3-4.12.0-0-MacOSX-x86_64.sh#3bfcd52dd1acafc712b6fb042d4b019c6f09ea3ba62710f722f4e9ebcde7f67c" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.12.0-1000066400000000000000000000031221476513315000253500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.12.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Miniforge3-4.12.0-1-Linux-aarch64.sh#b1fb77baffdc187f1ccf34db781aa849f8c057b31fdb7394788fe6c8ffb99916" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.12.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Miniforge3-4.12.0-1-Linux-ppc64le.sh#3b4bd33274e02ef7a19ffacd0e7eafe9275f08fc188a77f3a75ddf877772bf35" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.12.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Miniforge3-4.12.0-1-Linux-x86_64.sh#fe0c49f6af64668006b87174a7dcddd3ea59fe2d0f05c7db3de057e2fbc8a6e9" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.12.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Miniforge3-4.12.0-1-MacOSX-arm64.sh#622fc4220a90a80ff7f6ae40883d2d37eb09e9168aa74b9516de81c302490527" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.12.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-1/Miniforge3-4.12.0-1-MacOSX-x86_64.sh#4456a11cc99ac9a671b83f3ecf1d670e93dc88c1e5ecd3f038e041e658104b05" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.12.0-2000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.12.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Miniforge3-4.12.0-2-Linux-aarch64.sh#507c9763942821d7541b5a1b1130545e4c19416cc0473054faa10fee435aa9fa" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.12.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Miniforge3-4.12.0-2-Linux-ppc64le.sh#447d1729353189ba732e951b598d5b9ea4ab46296db4523ac34a775150a60199" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.12.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Miniforge3-4.12.0-2-Linux-x86_64.sh#e8bd60572d1bdcd9fc16114f423653c95e02f0be1393383f77fba17cf8acb10e" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.12.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Miniforge3-4.12.0-2-MacOSX-arm64.sh#24181b1a42c6bb9704e28ac4ecb234f3c86d882a7db408948692bc5792a2f713" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.12.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-2/Miniforge3-4.12.0-2-MacOSX-x86_64.sh#37007407ab504fb8bd3af68ff821c0819ad2f016087b9c45f1e95a910c92531e" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.12.0-3000066400000000000000000000031221476513315000253520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.12.0-3-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Miniforge3-4.12.0-3-Linux-aarch64.sh#8ddc79ffaa40dfc7e3d93c8c02e268c6d3958c4ef662bc2194c36aa7d50820a3" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.12.0-3-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Miniforge3-4.12.0-3-Linux-ppc64le.sh#2892b96723bb8aec33275ce033c209cd0ee53a9208afce7138c79438bd533fbb" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.12.0-3-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Miniforge3-4.12.0-3-Linux-x86_64.sh#680f8549374474bad903ebb2985a2c264f592fecae1544700bcc4e0d41e1ba17" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.12.0-3-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Miniforge3-4.12.0-3-MacOSX-arm64.sh#9088b27744512960b4834d318204f2bdbaeb44c13dd21b4740de357cea270d44" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.12.0-3-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.12.0-3/Miniforge3-4.12.0-3-MacOSX-x86_64.sh#76b6cf644e74c2c2df9ff7a315259a1cf82170bcb9fea0038069616fe25d1d14" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.13.0-0000066400000000000000000000031221476513315000253500ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.13.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-0/Miniforge3-4.13.0-0-Linux-aarch64.sh#930ea585fa30047ada7bc892aa96bb4b521f082469b0594e3fbbbb6ac17dcda5" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.13.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-0/Miniforge3-4.13.0-0-Linux-ppc64le.sh#ce3c506f2dc939b368e91521355a68653aa40541371ffe12aa0cbe43e264f26c" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.13.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-0/Miniforge3-4.13.0-0-Linux-x86_64.sh#e810f2e2a36bec232ed8f00e68be1b75590b51b4e3f3de39aab3212e596bf7a8" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.13.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-0/Miniforge3-4.13.0-0-MacOSX-arm64.sh#b00587bfd44d259d28d376497d0fc68bd150eb74b4a96771220917699bd26340" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.13.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-0/Miniforge3-4.13.0-0-MacOSX-x86_64.sh#f29457257d01f06569f342723d58d4c6b526c9404dbb579ab72548d933b5b547" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.13.0-1000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.13.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Miniforge3-4.13.0-1-Linux-aarch64.sh#e0d671d18ef578700dce1796f1a8796a74c8e5e4e5d6ee9f33cf6a1159f570c8" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.13.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Miniforge3-4.13.0-1-Linux-ppc64le.sh#2981ba22334a73f3bd8c0bcb9ad2510c411ab454280f460ca461977e5c0c43a6" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.13.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Miniforge3-4.13.0-1-Linux-x86_64.sh#6e0a33060c525909fa0e8ae74cb511480e8191cef88e3c297619f31574804184" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.13.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Miniforge3-4.13.0-1-MacOSX-arm64.sh#57bef67a4c80bfef04223eb76ee1b49b1bdfd5eeb46ebcf49e65d6c308c84a98" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.13.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.13.0-1/Miniforge3-4.13.0-1-MacOSX-x86_64.sh#9996677f0ca0bfa6399e9a5688556bfaff544389ea123e2ac6e6252d3a1d0658" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.14.0-0000066400000000000000000000031221476513315000253510ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.14.0-0-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Miniforge3-4.14.0-0-Linux-aarch64.sh#8e2de8657e0ff7315daf22df1874d5a57ff8295bc9489d43d61f2d9fac49e42b" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.14.0-0-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Miniforge3-4.14.0-0-Linux-ppc64le.sh#a1614873842aec1703ea4509554998663d5a774976c30bf89c76410a5f82aaa0" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.14.0-0-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Miniforge3-4.14.0-0-Linux-x86_64.sh#643dd45d9a9dd362508e8edd8cd535a87b002bd7716b12fb956247c8c7494908" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.14.0-0-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Miniforge3-4.14.0-0-MacOSX-arm64.sh#91b7cadb5986af1c38555cfb4214dcb353212492a89d5e7f4c32204829ed1829" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.14.0-0-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-0/Miniforge3-4.14.0-0-MacOSX-x86_64.sh#80ee5ce53a1f4edb21677dd6794a043ad7d1db6e3d5ffe7a994937923a50a2c9" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.14.0-1000066400000000000000000000031221476513315000253520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.14.0-1-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Miniforge3-4.14.0-1-Linux-aarch64.sh#79bb1694aee2cd4bc7ee412f267f6b06ccd011cd7be6686970599bff9ab5ae0b" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.14.0-1-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Miniforge3-4.14.0-1-Linux-ppc64le.sh#d82789f644759b21cbfcfb3de96b6a9879c38d6c3aa90394ee8b0916e0c5c45b" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.14.0-1-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Miniforge3-4.14.0-1-Linux-x86_64.sh#8a83e4a7440157d57631b9cb4958591b41547263a30f02046767271695a242ad" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.14.0-1-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Miniforge3-4.14.0-1-MacOSX-arm64.sh#d2dc25e5c73e420ae22a30abfebd24b51cb1d66d369594085ee42ba0e3e3d4d9" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.14.0-1-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-1/Miniforge3-4.14.0-1-MacOSX-x86_64.sh#4b956674c1c5f312bfc04f8f4d1a47bfe5cc7b9ca6a011cdd044c7152a8309d7" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.14.0-2000066400000000000000000000031221476513315000253530ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-aarch64" ) install_script "Miniforge3-4.14.0-2-Linux-aarch64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Miniforge3-4.14.0-2-Linux-aarch64.sh#52e44682aecbfb1c41e9f07b0f2f08ab22369e236893768be3c85ad6c039090f" "miniconda" verify_py310 ;; "Linux-ppc64le" ) install_script "Miniforge3-4.14.0-2-Linux-ppc64le.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Miniforge3-4.14.0-2-Linux-ppc64le.sh#60d37536a07fbf9278308a8601fa125b5d643fb36e6b8e12faad45455aae3119" "miniconda" verify_py310 ;; "Linux-x86_64" ) install_script "Miniforge3-4.14.0-2-Linux-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Miniforge3-4.14.0-2-Linux-x86_64.sh#ff0b9f78a51a4d9851e8fd3cdb6ff0b233f4f49d82c0690a12560e57075690bd" "miniconda" verify_py310 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.14.0-2-MacOSX-arm64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Miniforge3-4.14.0-2-MacOSX-arm64.sh#5089a254923acb6221cf7c3c5138cf68664684e18d4223e53482948c21975d7e" "miniconda" verify_py310 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.14.0-2-MacOSX-x86_64.sh" "https://github.com/conda-forge/miniforge/releases/download/4.14.0-2/Miniforge3-4.14.0-2-MacOSX-x86_64.sh#ac3c2a283f6ebf24d6072d39f9bf9297c64a752315353f666260f72b02daf6d1" "miniconda" verify_py310 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-4.9.2000066400000000000000000000026171476513315000251520ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge3-4.9.2-7-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/download/4.9.2-7/Miniforge3-4.9.2-7-Linux-ppc64le.sh#fb18f348f35328aff5dd7edbd83ea2e2" "miniconda" verify_py38 ;; "Linux-x86_64" ) install_script "Miniforge3-4.9.2-7-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.9.2-7/Miniforge3-4.9.2-7-Linux-x86_64.sh#d96baf1a0559a1f642528c0e38aad984" "miniconda" verify_py38 ;; "Linux-aarch64" ) install_script "Miniforge3-4.9.2-7-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/download/4.9.2-7/Miniforge3-4.9.2-7-Linux-aarch64.sh#c5bceb970dcff512f35f444397b5ce11" "miniconda" verify_py38 ;; "MacOSX-arm64" ) install_script "Miniforge3-4.9.2-7-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/download/4.9.2-7/Miniforge3-4.9.2-7-MacOSX-arm64.sh#cca7e2cbbf5734eda475a72e81fe8031" "miniconda" verify_py39 ;; "MacOSX-x86_64" ) install_script "Miniforge3-4.9.2-7-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/download/4.9.2-7/Miniforge3-4.9.2-7-MacOSX-x86_64.sh#f270b7bfd721899cb175c10f0b6cfa01" "miniconda" verify_py38 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/miniforge3-latest000066400000000000000000000022641476513315000257720ustar00rootroot00000000000000case "$(anaconda_architecture 2>/dev/null || true)" in "Linux-ppc64le" ) install_script "Miniforge3-Linux-ppc64le" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-ppc64le.sh" "miniconda" verify_py3_latest ;; "Linux-x86_64" ) install_script "Miniforge3-Linux-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh" "miniconda" verify_py3_latest ;; "Linux-aarch64" ) install_script "Miniforge3-Linux-aarch64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh" "miniconda" verify_py3_latest ;; "MacOSX-arm64" ) install_script "Miniforge3-MacOSX-arm64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh" "miniconda" verify_py3_latest ;; "MacOSX-x86_64" ) install_script "Miniforge3-MacOSX-x86_64" "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-x86_64.sh" "miniconda" verify_py3_latest ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of Miniforge3 is not available for $(anaconda_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/nogil-3.9.10000066400000000000000000000012351476513315000242710ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1l" "https://www.openssl.org/source/openssl-1.1.1l.tar.gz#0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1" 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 "nogil-3.9.10" "https://github.com/colesbury/nogil/archive/refs/tags/v3.9.10-nogil.tar.gz#5058c0ec07f0444673b86977c18e786183ca35617d9e6ada2329f7a87a4a0993" standard verify_py39 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/nogil-3.9.10-1000066400000000000000000000012521476513315000244260ustar00rootroot00000000000000prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.1l" "https://www.openssl.org/source/openssl-1.1.1l.tar.gz#0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1" 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 "nogil-3.9.10-1" "https://github.com/colesbury/nogil/archive/refs/tags/v3.9.10-nogil-2023-01-22.tar.gz#cbda308c7586745573d665cd53d71b50707fd6f85c1c5d7a9f5b092e869cc757" standard verify_py39 copy_python_gdb ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/patches/000077500000000000000000000000001476513315000241365ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.1.3/000077500000000000000000000000001476513315000245775ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.1.3/Python-2.1.3/000077500000000000000000000000001476513315000265175ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000046131476513315000325410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.1.3/Python-2.1.3--- setup.py.orig 2014-06-22 01:56:56.614802000 -0700 +++ setup.py 2014-06-22 01:55:54.555149273 -0700 @@ -12,10 +12,18 @@ from distutils.errors import * from distutils.core import Extension, setup from distutils.command.build_ext import build_ext +from distutils.spawn import find_executable # This global variable is used to hold the list of modules to be disabled. disabled_module_list = [] +def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if + 1) 'dir' is not already in 'dirlist' + 2) 'dir' actually exists, and is a directory.""" + if dir is not None and os.path.isdir(dir) and dir not in dirlist: + dirlist.insert(0, dir) + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -144,12 +152,36 @@ return 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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 if '/usr/local/lib' not in self.compiler.library_dirs: self.compiler.library_dirs.insert(0, '/usr/local/lib') if '/usr/local/include' not in self.compiler.include_dirs: self.compiler.include_dirs.insert(0, '/usr/local/include' ) + self.add_multiarch_paths() # lib_dirs and inc_dirs are used to search for files; # if a file is found in one of those directories, it can pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.2.3/000077500000000000000000000000001476513315000246005ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.2.3/Python-2.2.3/000077500000000000000000000000001476513315000265215ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000045131476513315000325420ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.2.3/Python-2.2.3--- setup.py.orig 2014-06-22 01:49:02.521459238 -0700 +++ setup.py 2014-06-22 01:53:59.607792944 -0700 @@ -10,10 +10,18 @@ from distutils.core import Extension, setup from distutils.command.build_ext import build_ext from distutils.command.install import install +from distutils.spawn import find_executable # This global variable is used to hold the list of modules to be disabled. disabled_module_list = [] +def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if + 1) 'dir' is not already in 'dirlist' + 2) 'dir' actually exists, and is a directory.""" + if dir is not None and os.path.isdir(dir) and dir not in dirlist: + dirlist.insert(0, dir) + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -209,12 +217,36 @@ return 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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 if '/usr/local/lib' not in self.compiler.library_dirs: self.compiler.library_dirs.insert(0, '/usr/local/lib') if '/usr/local/include' not in self.compiler.include_dirs: self.compiler.include_dirs.insert(0, '/usr/local/include' ) + self.add_multiarch_paths() try: have_unicode = unicode pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.3.7/000077500000000000000000000000001476513315000246055ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.3.7/Python-2.3.7/000077500000000000000000000000001476513315000265335ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000034611476513315000325550ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.3.7/Python-2.3.7--- setup.py.orig 2005-01-17 13:07:52.000000000 -0800 +++ setup.py 2014-06-22 02:03:46.888499800 -0700 @@ -13,6 +13,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 = [] @@ -239,10 +240,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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() # fink installs lots of goodies in /sw/... - make sure we # check there 001_fortify_crash_workaround.diff000066400000000000000000000025651476513315000350130ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.3.7/Python-2.3.7Author: Dwayne Litzenberger Date: Sun Jun 22 01:15:05 2014 -0700 Patch configure to handle Ubuntu Bug#286334 Fixes this crash: *** buffer overflow detected ***: ./python terminated ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x2b08765c9007] diff --git configure configure index 4838393..654de3f 100755 --- configure +++ configure @@ -20798,6 +20798,15 @@ done echo "$as_me:$LINENO: result: done" >&5 echo "${ECHO_T}done" >&6 +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files ac_config_files="$ac_config_files Makefile.pre Modules/Setup.config" diff --git configure.in configure.in index ba7a011..060a73f 100644 --- configure.in +++ configure.in @@ -3072,6 +3072,15 @@ for dir in $SRCDIRS; do done AC_MSG_RESULT(done) +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files AC_CONFIG_FILES(Makefile.pre Modules/Setup.config) AC_OUTPUT pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.0/000077500000000000000000000000001476513315000245775ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.0/Python-2.4/000077500000000000000000000000001476513315000263615ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.0/Python-2.4/000_patch-setup.py.diff000066400000000000000000000035211476513315000324570ustar00rootroot00000000000000--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_fortify_crash_workaround.diff000066400000000000000000000025651476513315000346410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.0/Python-2.4Author: Dwayne Litzenberger Date: Sun Jun 22 01:15:05 2014 -0700 Patch configure to handle Ubuntu Bug#286334 Fixes this crash: *** buffer overflow detected ***: ./python terminated ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x2b08765c9007] diff --git configure configure index 4838393..654de3f 100755 --- configure +++ configure @@ -20798,6 +20798,15 @@ done echo "$as_me:$LINENO: result: done" >&5 echo "${ECHO_T}done" >&6 +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files ac_config_files="$ac_config_files Makefile.pre Modules/Setup.config" diff --git configure.in configure.in index ba7a011..060a73f 100644 --- configure.in +++ configure.in @@ -3072,6 +3072,15 @@ for dir in $SRCDIRS; do done AC_MSG_RESULT(done) +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files AC_CONFIG_FILES(Makefile.pre Modules/Setup.config) AC_OUTPUT 002_patch-posixmodule.diff000066400000000000000000000015201476513315000331600ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.0/Python-2.4--- Modules/posixmodule.c.orig 2019-04-04 20:27:41.000000000 +0200 +++ Modules/posixmodule.c 2019-04-04 20:28:07.000000000 +0200 @@ -5300,7 +5300,7 @@ Close a file descriptor (for low level IO)."); static PyObject * -posix_close(PyObject *self, PyObject *args) +posix_closex(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -7554,7 +7554,7 @@ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_closex, METH_VARARGS, posix_close__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.1/000077500000000000000000000000001476513315000246005ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.1/Python-2.4.1/000077500000000000000000000000001476513315000265215ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325400ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.1/Python-2.4.1--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_fortify_crash_workaround.diff000066400000000000000000000025651476513315000350010ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.1/Python-2.4.1Author: Dwayne Litzenberger Date: Sun Jun 22 01:15:05 2014 -0700 Patch configure to handle Ubuntu Bug#286334 Fixes this crash: *** buffer overflow detected ***: ./python terminated ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x2b08765c9007] diff --git configure configure index 4838393..654de3f 100755 --- configure +++ configure @@ -20798,6 +20798,15 @@ done echo "$as_me:$LINENO: result: done" >&5 echo "${ECHO_T}done" >&6 +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files ac_config_files="$ac_config_files Makefile.pre Modules/Setup.config" diff --git configure.in configure.in index ba7a011..060a73f 100644 --- configure.in +++ configure.in @@ -3072,6 +3072,15 @@ for dir in $SRCDIRS; do done AC_MSG_RESULT(done) +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files AC_CONFIG_FILES(Makefile.pre Modules/Setup.config) AC_OUTPUT 002_patch-posixmodule.diff000066400000000000000000000015201476513315000333200ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.1/Python-2.4.1--- Modules/posixmodule.c.orig 2019-04-04 20:27:41.000000000 +0200 +++ Modules/posixmodule.c 2019-04-04 20:28:07.000000000 +0200 @@ -5300,7 +5300,7 @@ Close a file descriptor (for low level IO)."); static PyObject * -posix_close(PyObject *self, PyObject *args) +posix_closex(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -7554,7 +7554,7 @@ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_closex, METH_VARARGS, posix_close__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.2/000077500000000000000000000000001476513315000246015ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.2/Python-2.4.2/000077500000000000000000000000001476513315000265235ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325420ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.2/Python-2.4.2--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_fortify_crash_workaround.diff000066400000000000000000000025651476513315000350030ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.2/Python-2.4.2Author: Dwayne Litzenberger Date: Sun Jun 22 01:15:05 2014 -0700 Patch configure to handle Ubuntu Bug#286334 Fixes this crash: *** buffer overflow detected ***: ./python terminated ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x2b08765c9007] diff --git configure configure index 4838393..654de3f 100755 --- configure +++ configure @@ -20798,6 +20798,15 @@ done echo "$as_me:$LINENO: result: done" >&5 echo "${ECHO_T}done" >&6 +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files ac_config_files="$ac_config_files Makefile.pre Modules/Setup.config" diff --git configure.in configure.in index ba7a011..060a73f 100644 --- configure.in +++ configure.in @@ -3072,6 +3072,15 @@ for dir in $SRCDIRS; do done AC_MSG_RESULT(done) +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files AC_CONFIG_FILES(Makefile.pre Modules/Setup.config) AC_OUTPUT 002_patch-posixmodule.diff000066400000000000000000000015201476513315000333220ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.2/Python-2.4.2--- Modules/posixmodule.c.orig 2019-04-04 20:27:41.000000000 +0200 +++ Modules/posixmodule.c 2019-04-04 20:28:07.000000000 +0200 @@ -5300,7 +5300,7 @@ Close a file descriptor (for low level IO)."); static PyObject * -posix_close(PyObject *self, PyObject *args) +posix_closex(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -7554,7 +7554,7 @@ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_closex, METH_VARARGS, posix_close__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.3/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.3/Python-2.4.3/000077500000000000000000000000001476513315000265255ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325440ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.3/Python-2.4.3--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_fortify_crash_workaround.diff000066400000000000000000000025651476513315000350050ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.3/Python-2.4.3Author: Dwayne Litzenberger Date: Sun Jun 22 01:15:05 2014 -0700 Patch configure to handle Ubuntu Bug#286334 Fixes this crash: *** buffer overflow detected ***: ./python terminated ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x2b08765c9007] diff --git configure configure index 4838393..654de3f 100755 --- configure +++ configure @@ -20798,6 +20798,15 @@ done echo "$as_me:$LINENO: result: done" >&5 echo "${ECHO_T}done" >&6 +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files ac_config_files="$ac_config_files Makefile.pre Modules/Setup.config" diff --git configure.in configure.in index ba7a011..060a73f 100644 --- configure.in +++ configure.in @@ -3072,6 +3072,15 @@ for dir in $SRCDIRS; do done AC_MSG_RESULT(done) +case $ac_sys_system in +Linux*) +# Workaround for bug in Ubuntu 10.10 amd64 gcc-4.4 +# See http://orip.org/2008/10/building-python-235-on-ubuntu-intrepid.html +# and Ubuntu Bug #286334 +BASECFLAGS="$BASECFLAGS -U_FORTIFY_SOURCE" +;; +esac + # generate output files AC_CONFIG_FILES(Makefile.pre Modules/Setup.config) AC_OUTPUT 002_patch-posixmodule.diff000066400000000000000000000015201476513315000333240ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.3/Python-2.4.3--- Modules/posixmodule.c.orig 2019-04-04 20:27:41.000000000 +0200 +++ Modules/posixmodule.c 2019-04-04 20:28:07.000000000 +0200 @@ -5300,7 +5300,7 @@ Close a file descriptor (for low level IO)."); static PyObject * -posix_close(PyObject *self, PyObject *args) +posix_closex(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -7554,7 +7554,7 @@ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_closex, METH_VARARGS, posix_close__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.4/000077500000000000000000000000001476513315000246035ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.4/Python-2.4.4/000077500000000000000000000000001476513315000265275ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325460ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.4/Python-2.4.4--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-posixmodule.diff000066400000000000000000000015201476513315000333250ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.4/Python-2.4.4--- Modules/posixmodule.c.orig 2019-04-04 20:27:41.000000000 +0200 +++ Modules/posixmodule.c 2019-04-04 20:28:07.000000000 +0200 @@ -5300,7 +5300,7 @@ Close a file descriptor (for low level IO)."); static PyObject * -posix_close(PyObject *self, PyObject *args) +posix_closex(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -7554,7 +7554,7 @@ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_closex, METH_VARARGS, posix_close__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.5/000077500000000000000000000000001476513315000246045ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.5/Python-2.4.5/000077500000000000000000000000001476513315000265315ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.5/Python-2.4.5--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-posixmodule.diff000066400000000000000000000015201476513315000333270ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.5/Python-2.4.5--- Modules/posixmodule.c.orig 2019-04-04 20:27:41.000000000 +0200 +++ Modules/posixmodule.c 2019-04-04 20:28:07.000000000 +0200 @@ -5300,7 +5300,7 @@ Close a file descriptor (for low level IO)."); static PyObject * -posix_close(PyObject *self, PyObject *args) +posix_closex(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -7554,7 +7554,7 @@ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_closex, METH_VARARGS, posix_close__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.6/000077500000000000000000000000001476513315000246055ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.6/Python-2.4.6/000077500000000000000000000000001476513315000265335ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325520ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.6/Python-2.4.6--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-posixmodule.diff000066400000000000000000000015201476513315000333310ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.4.6/Python-2.4.6--- Modules/posixmodule.c.orig 2019-04-04 20:27:41.000000000 +0200 +++ Modules/posixmodule.c 2019-04-04 20:28:07.000000000 +0200 @@ -5300,7 +5300,7 @@ Close a file descriptor (for low level IO)."); static PyObject * -posix_close(PyObject *self, PyObject *args) +posix_closex(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -7554,7 +7554,7 @@ {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_closex, METH_VARARGS, posix_close__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, {"lseek", posix_lseek, METH_VARARGS, posix_lseek__doc__},pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/000077500000000000000000000000001476513315000246005ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/Python-2.5/000077500000000000000000000000001476513315000263635ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/Python-2.5/000_patch-setup.py.diff000066400000000000000000000035211476513315000324610ustar00rootroot00000000000000--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-svnversion.patch000066400000000000000000000033061476513315000332200ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/Python-2.5diff -r -u ./Makefile.pre.in ../Python-2.5/Makefile.pre.in --- ./Makefile.pre.in 2006-07-31 01:20:10.000000000 +0900 +++ ../Python-2.5/Makefile.pre.in 2013-05-08 19:19:27.000000000 +0900 @@ -455,7 +455,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LANG=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LANG=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ diff -r -u ./Modules/getbuildinfo.c ../Python-2.5/Modules/getbuildinfo.c --- ./Modules/getbuildinfo.c 2006-01-18 18:13:51.000000000 +0900 +++ ../Python-2.5/Modules/getbuildinfo.c 2013-05-08 19:19:40.000000000 +0900 @@ -43,6 +43,6 @@ #ifdef SVNVERSION return SVNVERSION; #else - return "exported"; + return "Unversioned directory"; #endif } diff -r -u ./Python/sysmodule.c ../Python-2.5/Python/sysmodule.c --- ./Python/sysmodule.c 2006-07-21 14:32:28.000000000 +0900 +++ ../Python-2.5/Python/sysmodule.c 2013-05-08 19:19:55.000000000 +0900 @@ -1009,7 +1009,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); diff -r -u ./configure.in ../Python-2.5/configure.in --- ./configure.in 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure.in 2013-05-08 19:20:05.000000000 +0900 @@ -686,7 +686,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in 002_darwin_c_source.patch000066400000000000000000000132671476513315000330650ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/Python-2.5diff -r -u ./configure ../Python-2.5/configure --- ./configure 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure 2013-07-19 15:27:46.000000000 +0900 @@ -1396,6 +1396,16 @@ _ACEOF +# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable +# them. + +cat >>confdefs.h <<\_ACEOF +#define _DARWIN_C_SOURCE 1 +_ACEOF + + + define_xopen_source=yes # Arguments passed to configure. @@ -3885,11 +3895,110 @@ ;; # is there any other compiler on Darwin besides gcc? Darwin*) - BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" + # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd + # used to be here, but non-Apple gcc doesn't accept them. + if test "${CC}" = gcc + then + { echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +echo -n "checking which compiler should be used... " >&6; } + case "${UNIVERSALSDK}" in + */MacOSX10.4u.sdk) + # Build using 10.4 SDK, force usage of gcc when the + # compiler is gcc, otherwise the user will get very + # confusing error messages when building on OSX 10.6 + CC=gcc-4.0 + CPP=cpp-4.0 + ;; + esac + { echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +echo "$CC" >&6; } + fi + + if test "${enable_universalsdk}"; then - BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + UNIVERSAL_ARCH_FLAGS="" + if test "$UNIVERSAL_ARCHS" = "32-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" + ARCH_RUN_32BIT="" + LIPO_32BIT_FLAGS="" + elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + + elif test "$UNIVERSAL_ARCHS" = "all" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + elif test "$UNIVERSAL_ARCHS" = "intel" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386" + + elif test "$UNIVERSAL_ARCHS" = "3-way" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + else + as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + + fi + + + CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}" + if test "${UNIVERSALSDK}" != "/" + then + CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}" + LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}" + CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}" + fi fi + # Calculate the right deployment target for this build. + # + cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` + if test ${cur_target} '>' 10.2 && \ + test ${cur_target} '<' 10.6 + then + cur_target=10.3 + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "3-way"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "intel"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then + cur_target='10.5' + fi + else + if test `/usr/bin/arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi + fi + CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} + + # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the + # environment with a value that is the same as what we'll use + # in the Makefile to ensure that we'll get the same compiler + # environment during configure and build time. + MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" + export MACOSX_DEPLOYMENT_TARGET + EXPORT_MACOSX_DEPLOYMENT_TARGET='' + ;; OSF*) BASECFLAGS="$BASECFLAGS -mieee" @@ -10851,7 +10960,7 @@ if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -10863,7 +10972,7 @@ else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac diff -r -u ./pyconfig.h.in ../Python-2.5/pyconfig.h.in --- ./pyconfig.h.in 2006-07-30 23:09:47.000000000 +0900 +++ ../Python-2.5/pyconfig.h.in 2013-07-17 23:12:31.000000000 +0900 @@ -912,6 +912,11 @@ /* Define on Irix to enable u_int */ #undef _BSD_TYPES +/* Define on Darwin to activate all library features */ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE +#endif + /* This must be set to 64 on some systems to enable large file support. */ #undef _FILE_OFFSET_BITS pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/Python-2.5/003_osx_lp64.patch000066400000000000000000000215441476513315000314520ustar00rootroot00000000000000diff -r -u ./Include/pymactoolbox.h ../Python-2.5/Include/pymactoolbox.h --- ./Include/pymactoolbox.h 2004-11-05 16:02:59.000000000 +0900 +++ ../Python-2.5/Include/pymactoolbox.h 2013-07-17 23:38:51.000000000 +0900 @@ -8,7 +8,10 @@ #endif #include + +#ifndef __LP64__ #include +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +21,11 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* __LP64__ */ + /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,8 +89,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +109,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +169,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +178,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); diff -r -u ./Mac/Modules/res/_Resmodule.c ../Python-2.5/Mac/Modules/res/_Resmodule.c --- ./Mac/Modules/res/_Resmodule.c 2005-07-04 05:59:44.000000000 +0900 +++ ../Python-2.5/Mac/Modules/res/_Resmodule.c 2013-07-17 23:38:51.000000000 +0900 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -1152,6 +1154,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1290,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1331,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1418,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1444,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1541,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* __LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1645,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1656,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1670,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* __LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* __LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, diff -r -u ./Modules/_ctypes/libffi/src/darwin/ffitarget.h ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h --- ./Modules/_ctypes/libffi/src/darwin/ffitarget.h 2006-05-26 06:58:05.000000000 +0900 +++ ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h 2013-07-17 23:38:51.000000000 +0900 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN diff -r -u ./Python/mactoolboxglue.c ../Python-2.5/Python/mactoolboxglue.c --- ./Python/mactoolboxglue.c 2006-07-12 01:44:25.000000000 +0900 +++ ../Python-2.5/Python/mactoolboxglue.c 2013-07-17 23:39:09.000000000 +0900 @@ -106,6 +106,7 @@ } +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +154,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +419,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +432,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/Python-2.5/004_osx_libffi.patch000066400000000000000000005661361476513315000321340ustar00rootroot00000000000000diff -r -u ./Modules/_ctypes/libffi_osx/LICENSE ./Modules/_ctypes/libffi_osx/LICENSE new file mode 100644 index 0000000..f591795 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/LICENSE @@ -0,0 +1,20 @@ +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff -r -u ./Modules/_ctypes/libffi_osx/README ./Modules/_ctypes/libffi_osx/README new file mode 100644 index 0000000..1fc2747 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README @@ -0,0 +1,500 @@ +This directory contains the libffi package, which is not part of GCC but +shipped with GCC as convenience. + +Status +====== + +libffi-2.00 has not been released yet! This is a development snapshot! + +libffi-1.20 was released on October 5, 1998. Check the libffi web +page for updates: . + + +What is libffi? +=============== + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. Libffi can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The libffi library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + +Ffi stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +libffi library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above libffi that handles type conversions for values passed +between the two languages. + + +Supported Platforms and Prerequisites +===================================== + +Libffi has been ported to: + + SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) + + Irix 5.3 & 6.2 (System V/o32 & n32) + + Intel x86 - Linux (System V ABI) + + Alpha - Linux and OSF/1 + + m68k - Linux (System V ABI) + + PowerPC - Linux (System V ABI, Darwin, AIX) + + ARM - Linux (System V ABI) + +Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are +that other versions will work. Libffi has also been built and tested +with the SGI compiler tools. + +On PowerPC, the tests failed (see the note below). + +You must use GNU make to build libffi. SGI's make will not work. +Sun's probably won't either. + +If you port libffi to another platform, please let me know! I assume +that some will be easy (x86 NetBSD), and others will be more difficult +(HP). + + +Installing libffi +================= + +[Note: before actually performing any of these installation steps, + you may wish to read the "Platform Specific Notes" below.] + +First you must configure the distribution for your particular +system. Go to the directory you wish to build libffi in and run the +"configure" program found in the root directory of the libffi source +distribution. + +You may want to tell configure where to install the libffi library and +header files. To do that, use the --prefix configure switch. Libffi +will install under /usr/local by default. + +If you want to enable extra run-time debugging checks use the the +--enable-debug configure switch. This is useful when your program dies +mysteriously while using libffi. + +Another useful configure switch is --enable-purify-safety. Using this +will add some extra code which will suppress certain warnings when you +are using Purify with libffi. Only use this switch when using +Purify, as it will slow down the library. + +Configure has many other options. Use "configure --help" to see them all. + +Once configure has finished, type "make". Note that you must be using +GNU make. SGI's make will not work. Sun's probably won't either. +You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. + +To ensure that libffi is working as advertised, type "make test". + +To install the library and header files, type "make install". + + +Using libffi +============ + + The Basics + ---------- + +Libffi assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, +as well as the return type of the function. + +The first thing you must do is create an ffi_cif object that matches +the signature of the function you wish to call. The cif in ffi_cif +stands for Call InterFace. To prepare a call interface object, use the +following function: + +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, ffi_type **atypes); + + CIF is a pointer to the call interface object you wish + to initialize. + + ABI is an enum that specifies the calling convention + to use for the call. FFI_DEFAULT_ABI defaults + to the system's native calling convention. Other + ABI's may be used with care. They are system + specific. + + NARGS is the number of arguments this function accepts. + libffi does not yet support vararg functions. + + RTYPE is a pointer to an ffi_type structure that represents + the return type of the function. Ffi_type objects + describe the types of values. libffi provides + ffi_type objects for many of the native C types: + signed int, unsigned int, signed char, unsigned char, + etc. There is also a pointer ffi_type object and + a void ffi_type. Use &ffi_type_void for functions that + don't return values. + + ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. + If NARGS is 0, this is ignored. + + +ffi_prep_cif will return a status code that you are responsible +for checking. It will be one of the following: + + FFI_OK - All is good. + + FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif + came across is bad. + + +Before making the call, the VALUES vector should be initialized +with pointers to the appropriate argument values. + +To call the function using the initialized ffi_cif, use the +ffi_call function: + +void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); + + CIF is a pointer to the ffi_cif initialized specifically + for this function. + + FN is a pointer to the function you want to call. + + RVALUE is a pointer to a chunk of memory that is to hold the + result of the function call. Currently, it must be + at least one word in size (except for the n32 version + under Irix 6.x, which must be a pointer to an 8 byte + aligned value (a long long). It must also be at least + word aligned (depending on the return type, and the + system's alignment requirements). If RTYPE is + &ffi_type_void, this is ignored. If RVALUE is NULL, + the return value is discarded. + + AVALUES is a vector of void* that point to the memory locations + holding the argument values for a call. + If NARGS is 0, this is ignored. + + +If you are expecting a return value from FN it will have been stored +at RVALUE. + + + + An Example + ---------- + +Here is a trivial example that calls puts() a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_uint; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + + + Aggregate Types + --------------- + +Although libffi has no special support for unions or bit-fields, it is +perfectly happy passing structures back and forth. You must first +describe the structure to libffi by creating a new ffi_type object +for it. Here is the definition of ffi_type: + + typedef struct _ffi_type + { + unsigned size; + short alignment; + short type; + struct _ffi_type **elements; + } ffi_type; + +All structures must have type set to FFI_TYPE_STRUCT. You may set +size and alignment to 0. These will be calculated and reset to the +appropriate values by ffi_prep_cif(). + +elements is a NULL terminated array of pointers to ffi_type objects +that describe the type of the structure elements. These may, in turn, +be structure elements. + +The following example initializes a ffi_type object representing the +tm struct from Linux's time.h: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + + +Platform Specific Notes +======================= + + Intel x86 + --------- + +There are no known problems with the x86 port. + + Sun SPARC - SunOS 4.1.3 & Solaris 2.x + ------------------------------------- + +You must use GNU Make to build libffi on Sun platforms. + + MIPS - Irix 5.3 & 6.x + --------------------- + +Irix 6.2 and better supports three different calling conventions: o32, +n32 and n64. Currently, libffi only supports both o32 and n32 under +Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be +configured for whichever calling convention it was built for. + +By default, the configure script will try to build libffi with the GNU +development tools. To build libffi with the SGI development tools, set +the environment variable CC to either "cc -32" or "cc -n32" before +running configure under Irix 6.x (depending on whether you want an o32 +or n32 library), or just "cc" for Irix 5.3. + +With the n32 calling convention, when returning structures smaller +than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. +Here's one way of forcing this: + + double struct_storage[2]; + my_small_struct *s = (my_small_struct *) struct_storage; + /* Use s for RVALUE */ + +If you don't do this you are liable to get spurious bus errors. + +"long long" values are not supported yet. + +You must use GNU Make to build libffi on SGI platforms. + + ARM - System V ABI + ------------------ + +The ARM port was performed on a NetWinder running ARM Linux ELF +(2.0.31) and gcc 2.8.1. + + + + PowerPC System V ABI + -------------------- + +There are two `System V ABI's which libffi implements for PowerPC. +They differ only in how small structures are returned from functions. + +In the FFI_SYSV version, structures that are 8 bytes or smaller are +returned in registers. This is what GCC does when it is configured +for solaris, and is what the System V ABI I have (dated September +1995) says. + +In the FFI_GCC_SYSV version, all structures are returned the same way: +by passing a pointer as the first argument to the function. This is +what GCC does when it is configured for linux or a generic sysv +target. + +EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a +inconsistency with the SysV ABI: When a procedure is called with many +floating-point arguments, some of them get put on the stack. They are +all supposed to be stored in double-precision format, even if they are +only single-precision, but EGCS stores single-precision arguments as +single-precision anyway. This causes one test to fail (the `many +arguments' test). + + +What's With The Crazy Comments? +=============================== + +You might notice a number of cryptic comments in the code, delimited +by /*@ and @*/. These are annotations read by the program LCLint, a +tool for statically checking C programs. You can read all about it at +. + + +History +======= + +1.20 Oct-5-98 + Raffaele Sena produces ARM port. + +1.19 Oct-5-98 + Fixed x86 long double and long long return support. + m68k bug fixes from Andreas Schwab. + Patch for DU assembler compatibility for the Alpha from Richard + Henderson. + +1.18 Apr-17-98 + Bug fixes and MIPS configuration changes. + +1.17 Feb-24-98 + Bug fixes and m68k port from Andreas Schwab. PowerPC port from + Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + +1.16 Feb-11-98 + Richard Henderson produces Alpha port. + +1.15 Dec-4-97 + Fixed an n32 ABI bug. New libtool, auto* support. + +1.14 May-13-97 + libtool is now used to generate shared and static libraries. + Fixed a minor portability problem reported by Russ McManus + . + +1.13 Dec-2-96 + Added --enable-purify-safety to keep Purify from complaining + about certain low level code. + Sparc fix for calling functions with < 6 args. + Linux x86 a.out fix. + +1.12 Nov-22-96 + Added missing ffi_type_void, needed for supporting void return + types. Fixed test case for non MIPS machines. Cygnus Support + is now Cygnus Solutions. + +1.11 Oct-30-96 + Added notes about GNU make. + +1.10 Oct-29-96 + Added configuration fix for non GNU compilers. + +1.09 Oct-29-96 + Added --enable-debug configure switch. Clean-ups based on LCLint + feedback. ffi_mips.h is always installed. Many configuration + fixes. Fixed ffitest.c for sparc builds. + +1.08 Oct-15-96 + Fixed n32 problem. Many clean-ups. + +1.07 Oct-14-96 + Gordon Irlam rewrites v8.S again. Bug fixes. + +1.06 Oct-14-96 + Gordon Irlam improved the sparc port. + +1.05 Oct-14-96 + Interface changes based on feedback. + +1.04 Oct-11-96 + Sparc port complete (modulo struct passing bug). + +1.03 Oct-10-96 + Passing struct args, and returning struct values works for + all architectures/calling conventions. Expanded tests. + +1.02 Oct-9-96 + Added SGI n32 support. Fixed bugs in both o32 and Linux support. + Added "make test". + +1.01 Oct-8-96 + Fixed float passing bug in mips version. Restructured some + of the code. Builds cleanly with SGI tools. + +1.00 Oct-7-96 + First release. No public announcement. + + +Authors & Credits +================= + +libffi was written by Anthony Green . + +Portions of libffi were derived from Gianni Mariani's free gencall +library for Silicon Graphics machines. + +The closure mechanism was designed and implemented by Kresten Krab +Thorup. + +The Sparc port was derived from code contributed by the fine folks at +Visible Decisions Inc . Further enhancements were +made by Gordon Irlam at Cygnus Solutions . + +The Alpha port was written by Richard Henderson at Cygnus Solutions. + +Andreas Schwab ported libffi to m68k Linux and provided a number of +bug fixes. + +Geoffrey Keating ported libffi to the PowerPC. + +Raffaele Sena ported libffi to the ARM. + +Jesper Skov and Andrew Haley both did more than their fair share of +stepping through the code and tracking down bugs. + +Thanks also to Tom Tromey for bug fixes and configuration help. + +Thanks to Jim Blandy, who provided some useful feedback on the libffi +interface. + +If you have a problem, or have found a bug, please send a note to +green@cygnus.com. diff -r -u ./Modules/_ctypes/libffi_osx/README.pyobjc ./Modules/_ctypes/libffi_osx/README.pyobjc new file mode 100644 index 0000000..405d85f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README.pyobjc @@ -0,0 +1,5 @@ +This directory contains a slightly modified version of libffi, extracted from +the GCC source-tree. + +The only modifications are those that are necessary to compile libffi using +the Apple provided compiler and outside of the GCC source tree. diff -r -u ./Modules/_ctypes/libffi_osx/ffi.c ./Modules/_ctypes/libffi_osx/ffi.c new file mode 100644 index 0000000..bf42093 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/ffi.c @@ -0,0 +1,226 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +/* Round up to FFI_SIZEOF_ARG. */ +#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + +/* Perform machine independent initialization of aggregate type + specifications. */ + +static ffi_status +initialize_aggregate( +/*@out@*/ ffi_type* arg) +{ +/*@-usedef@*/ + + if (arg == NULL || arg->elements == NULL || + arg->size != 0 || arg->alignment != 0) + return FFI_BAD_TYPEDEF; + + ffi_type** ptr = &(arg->elements[0]); + + while ((*ptr) != NULL) + { + if (((*ptr)->size == 0) && (initialize_aggregate(*ptr) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#ifdef POWERPC_DARWIN + int curalign = (*ptr)->alignment; + + if (ptr != &(arg->elements[0])) + { + if (curalign > 4 && curalign != 16) + curalign = 4; + } + + arg->size = ALIGN(arg->size, curalign); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > curalign) ? + arg->alignment : curalign; +#else + arg->size = ALIGN(arg->size, (*ptr)->alignment); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > (*ptr)->alignment) ? + arg->alignment : (*ptr)->alignment; +#endif + + ptr++; + } + + /* Structure size includes tail padding. This is important for + structures that fit in one register on ABIs like the PowerPC64 + Linux ABI that right justify small structs in a register. + It's also needed for nested structure layout, for example + struct A { long a; char b; }; struct B { struct A x; char y; }; + should find y at an offset of 2*sizeof(long) and result in a + total size of 3*sizeof(long). */ + arg->size = ALIGN(arg->size, arg->alignment); + + if (arg->size == 0) + return FFI_BAD_TYPEDEF; + + return FFI_OK; + +/*@=usedef@*/ +} + +#ifndef __CRIS__ +/* The CRIS ABI specifies structure elements to have byte + alignment only, so it completely overrides this functions, + which assumes "natural" alignment and padding. */ + +/* Perform machine independent ffi_cif preparation, then call + machine dependent routine. */ + +#if defined(X86_DARWIN) + +static inline bool +struct_on_stack( + int size) +{ + if (size > 8) + return true; + + /* This is not what the ABI says, but is what is really implemented */ + switch (size) + { + case 1: + case 2: + case 4: + case 8: + return false; + + default: + return true; + } +} + +#endif // defined(X86_DARWIN) + +// Arguments' ffi_type->alignment must be nonzero. +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes) +{ + if (cif == NULL) + return FFI_BAD_TYPEDEF; + + if (abi <= FFI_FIRST_ABI || abi > FFI_DEFAULT_ABI) + return FFI_BAD_ABI; + + unsigned int bytes = 0; + unsigned int i; + ffi_type** ptr; + + cif->abi = abi; + cif->arg_types = atypes; + cif->nargs = nargs; + cif->rtype = rtype; + cif->flags = 0; + + /* Initialize the return type if necessary */ + /*@-usedef@*/ + if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) + return FFI_BAD_TYPEDEF; + /*@=usedef@*/ + + /* Perform a sanity check on the return type */ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT +#ifdef SPARC + && (cif->abi != FFI_V9 || cif->rtype->size > 32) +#endif +#ifdef X86_DARWIN + && (struct_on_stack(cif->rtype->size)) +#endif + ) + bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + /* Initialize any uninitialized aggregate type definitions */ + if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + if ((*ptr)->alignment == 0) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type, do this + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#if defined(X86_DARWIN) + { + int align = (*ptr)->alignment; + + if (align > 4) + align = 4; + + if ((align - 1) & bytes) + bytes = ALIGN(bytes, align); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#elif !defined __x86_64__ && !defined S390 && !defined PA +#ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) + || ((*ptr)->type == FFI_TYPE_LONGDOUBLE + && cif->abi != FFI_V9)) + bytes += sizeof(void*); + else +#endif + { + /* Add any padding if necessary */ + if (((*ptr)->alignment - 1) & bytes) + bytes = ALIGN(bytes, (*ptr)->alignment); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#endif + } + + cif->bytes = bytes; + + /* Perform machine dependent cif processing */ + return ffi_prep_cif_machdep(cif); +} +#endif /* not __CRIS__ */ diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi.h ./Modules/_ctypes/libffi_osx/include/ffi.h new file mode 100644 index 0000000..c104a5c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi.h @@ -0,0 +1,355 @@ +/* -----------------------------------------------------------------*-C-*- + libffi PyOBJC - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and closure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifdef MACOSX +# if defined(__i386__) || defined(__x86_64__) +# define X86_DARWIN +# elif defined(__ppc__) || defined(__ppc64__) +# define POWERPC_DARWIN +# else +# error "Unsupported MacOS X CPU type" +# endif +#else +#error "Unsupported OS type" +#endif + +/* ---- System configuration information --------------------------------- */ + +#include "ffitarget.h" +#include "fficonfig.h" + +#ifndef LIBFFI_ASM + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# endif +#endif + +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +#error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +#error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +#error "int size not supported" +#endif + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != 9223372036854775807 +# error "no 64-bit data type supported" +# endif +#elif LONG_MAX != 9223372036854775807 +#error "long size not supported" +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t + can hold a pointer. */ + +typedef struct _ffi_type { + size_t size; + unsigned short alignment; + unsigned short type; +/*@null@*/ struct _ffi_type** elements; +} ffi_type; + +/* These are defined in types.c */ +extern ffi_type ffi_type_void; +extern ffi_type ffi_type_uint8; +extern ffi_type ffi_type_sint8; +extern ffi_type ffi_type_uint16; +extern ffi_type ffi_type_sint16; +extern ffi_type ffi_type_uint32; +extern ffi_type ffi_type_sint32; +extern ffi_type ffi_type_uint64; +extern ffi_type ffi_type_sint64; +extern ffi_type ffi_type_float; +extern ffi_type ffi_type_double; +extern ffi_type ffi_type_longdouble; +extern ffi_type ffi_type_pointer; + +typedef enum ffi_status { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct ffi_cif { + ffi_abi abi; + unsigned nargs; +/*@dependent@*/ ffi_type** arg_types; +/*@dependent@*/ ffi_type* rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +void +ffi_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_raw_size( + ffi_cif* cif); + +/* This is analogous to the raw API, except it uses Java parameter + packing, even on 64-bit machines. I.e. on 64-bit machines + longs and doubles are followed by an empty 64-bit word. */ +void +ffi_java_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_java_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_java_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_java_raw_size( + ffi_cif* cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +typedef struct ffi_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void* user_data; +} ffi_closure; + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void* user_data); + +void ffi_closure_free(void *); +void *ffi_closure_alloc (size_t size, void **code); + +typedef struct ffi_raw_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + +#if !FFI_NATIVE_RAW_API + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + void (*translate_args)(ffi_cif*,void*,void**,void*); + void* this_closure; +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void* user_data; +} ffi_raw_closure; + +ffi_status +ffi_prep_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +ffi_status +ffi_prep_java_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +#endif // FFI_CLOSURES + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes); + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +#endif // #ifndef LIBFFI_ASM +/* ---- Definitions shared with assembly code ---------------------------- */ + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 + +#ifdef HAVE_LONG_DOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#else +# define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif + +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_POINTER + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef LIBFFI_H diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi_common.h ./Modules/_ctypes/libffi_osx/include/ffi_common.h new file mode 100644 index 0000000..685a358 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi_common.h @@ -0,0 +1,102 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fficonfig.h" + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char* alloca(); +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy((s), (d), (n)) +# endif +#endif + +/*#if defined(FFI_DEBUG) +#include +#endif*/ + +#ifdef FFI_DEBUG +#include + +/*@exits@*/ void +ffi_assert( +/*@temp@*/ char* expr, +/*@temp@*/ char* file, + int line); +void +ffi_stop_here(void); +void +ffi_type_test( +/*@temp@*/ /*@out@*/ ffi_type* a, +/*@temp@*/ char* file, + int line); + +# define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +# define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +# define FFI_ASSERT_VALID_TYPE(x) ffi_type_test(x, __FILE__, __LINE__) +#else +# define FFI_ASSERT(x) +# define FFI_ASSERT_AT(x, f, l) +# define FFI_ASSERT_VALID_TYPE(x) +#endif // #ifdef FFI_DEBUG + +#define ALIGN(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) + +/* Perform machine dependent cif processing */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif); + +/* Extended cif, used in callback from assembly routine */ +typedef struct extended_cif { +/*@dependent@*/ ffi_cif* cif; +/*@dependent@*/ void* rvalue; +/*@dependent@*/ void** avalue; +} extended_cif; + +/* Terse sized type definitions. */ +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +typedef float FLOAT32; + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef FFI_COMMON_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/fficonfig.h ./Modules/_ctypes/libffi_osx/include/fficonfig.h new file mode 100644 index 0000000..2172490 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/fficonfig.h @@ -0,0 +1,150 @@ +/* Manually created fficonfig.h for Darwin on PowerPC or Intel + + This file is manually generated to do away with the need for autoconf and + therefore make it easier to cross-compile and build fat binaries. + + NOTE: This file was added by PyObjC. +*/ + +#ifndef MACOSX +#error "This file is only supported on Mac OS X" +#endif + +#if defined(__i386__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__x86_64__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__ppc__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# if __GNUC__ >= 4 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 +# else +# undef HAVE_LONG_DOUBLE +# define SIZEOF_LONG_DOUBLE 8 +# endif + +#elif defined(__ppc64__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#else +#error "Unknown CPU type" +#endif + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "aw" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Define this is you do not want support for the raw API. */ +#define FFI_NO_RAW_API 1 + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +/* #undef HAVE_MMAP_DEV_ZERO */ + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +/* #undef HAVE_RO_EH_FRAME */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://gcc.gnu.org/bugs.html" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.1" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if you are using Purify and want to suppress spurious messages. */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "2.1-pyobjc" + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) .hidden name +# else +# define FFI_HIDDEN __attribute__((visibility ("hidden"))) +# endif +#else +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) +# else +# define FFI_HIDDEN +# endif +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ffitarget.h ./Modules/_ctypes/libffi_osx/include/ffitarget.h new file mode 100644 index 0000000..faaa30d --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffitarget.h @@ -0,0 +1,13 @@ +/* Dispatch to the right ffitarget file. This file is PyObjC specific; in a + normal build, the build environment copies the file to the right location or + sets up the right include flags. We want to do neither because that would + make building fat binaries harder. +*/ + +#if defined(__i386__) || defined(__x86_64__) +#include "x86-ffitarget.h" +#elif defined(__ppc__) || defined(__ppc64__) +#include "ppc-ffitarget.h" +#else +#error "Unsupported CPU type" +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h new file mode 100644 index 0000000..2318421 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h @@ -0,0 +1,104 @@ +/* -----------------------------------------------------------------*-C-*- + ppc-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if (defined(POWERPC) && defined(__powerpc64__)) || \ + (defined(POWERPC_DARWIN) && defined(__ppc64__)) +#define POWERPC64 +#endif + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef POWERPC + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, +# ifdef POWERPC64 + FFI_DEFAULT_ABI = FFI_LINUX64, +# else + FFI_DEFAULT_ABI = FFI_GCC_SYSV, +# endif +#endif + +#ifdef POWERPC_AIX + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_AIX, +#endif + +#ifdef POWERPC_DARWIN + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_DARWIN, +#endif + +#ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_NATIVE_RAW_API 0 + +/* Needed for FFI_SYSV small structure returns. */ +#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + +#if defined(POWERPC64) /*|| defined(POWERPC_AIX)*/ +# define FFI_TRAMPOLINE_SIZE 48 +#elif defined(POWERPC_AIX) +# define FFI_TRAMPOLINE_SIZE 24 +#else +# define FFI_TRAMPOLINE_SIZE 40 +#endif + +#ifndef LIBFFI_ASM +# if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) +typedef struct ffi_aix_trampoline_struct { + void* code_pointer; /* Pointer to ffi_closure_ASM */ + void* toc; /* TOC */ + void* static_chain; /* Pointer to closure */ +} ffi_aix_trampoline_struct; +# endif +#endif // #ifndef LIBFFI_ASM + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h new file mode 100644 index 0000000..55c2b6c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h @@ -0,0 +1,88 @@ +/* -----------------------------------------------------------------*-C-*- + x86-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if defined(X86_64) && defined(__i386__) +# undef X86_64 +# define X86 +#endif + +#if defined(__x86_64__) +# ifndef X86_64 +# define X86_64 +# endif +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + + /* ---- Intel x86 Win32 ---------- */ +#ifdef X86_WIN32 + FFI_SYSV, + FFI_STDCALL, + /* TODO: Add fastcall support for the sake of completeness */ + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + /* ---- Intel x86 and AMD x86-64 - */ +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) + FFI_SYSV, + FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ +# ifdef __i386__ + FFI_DEFAULT_ABI = FFI_SYSV, +# else + FFI_DEFAULT_ABI = FFI_UNIX64, +# endif +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 + +#if defined(X86_64) || (defined(__x86_64__) && defined(X86_DARWIN)) +# define FFI_TRAMPOLINE_SIZE 24 +# define FFI_NATIVE_RAW_API 0 +#else +# define FFI_TRAMPOLINE_SIZE 10 +# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S new file mode 100644 index 0000000..f143dbd --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S @@ -0,0 +1,365 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc-darwin.S - Copyright (c) 2000 John Hornkvist + Copyright (c) 2004 Free Software Foundation, Inc. + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include +#include +#include + +.text + .align 2 +.globl _ffi_prep_args + +.text + .align 2 +.globl _ffi_call_DARWIN + +.text + .align 2 +_ffi_call_DARWIN: +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved. */ + +LFB1: + /* Save the old stack pointer as AP. */ + mr r8,r1 + +LCFI0: +#if defined(__ppc64__) + /* Allocate the stack space we need. + r4 (size of input data) + 48 bytes (linkage area) + 40 bytes (saved registers) + 8 bytes (extra FPR) + r4 + 96 bytes total + */ + + addi r4,r4,-96 // Add our overhead. + li r0,-32 // Align to 32 bytes. + and r4,r4,r0 +#endif + stgux r1,r1,r4 // Grow the stack. + mflr r9 + + /* Save registers we use. */ +#if defined(__ppc64__) + std r27,-40(r8) +#endif + stg r28,MODE_CHOICE(-16,-32)(r8) + stg r29,MODE_CHOICE(-12,-24)(r8) + stg r30,MODE_CHOICE(-8,-16)(r8) + stg r31,MODE_CHOICE(-4,-8)(r8) + stg r9,SF_RETURN(r8) /* return address */ +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + stg r2,MODE_CHOICE(20,40)(r1) +#endif + +LCFI1: +#if defined(__ppc64__) + mr r27,r3 // our extended_cif +#endif + /* Save arguments over call. */ + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ + +LCFI2: + /* Call ffi_prep_args. */ + mr r4,r1 + li r9,0 + mtctr r12 /* r12 holds address of _ffi_prep_args. */ + bctrl +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + lg r2,MODE_CHOICE(20,40)(r1) +#endif + + /* Now do the call. + Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40,r31 + + /* Load all those argument registers. + We have set up a nice stack frame, just load it into registers. */ + lg r3,SF_ARG1(r1) + lg r4,SF_ARG2(r1) + lg r5,SF_ARG3(r1) + lg r6,SF_ARG4(r1) + nop + lg r7,SF_ARG5(r1) + lg r8,SF_ARG6(r1) + lg r9,SF_ARG7(r1) + lg r10,SF_ARG8(r1) + + /* Load all the FP registers. */ + bf 6,L2 /* No floats to load. */ +#if defined(__ppc64__) + lfd f1,MODE_CHOICE(-16,-40)-(14*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(11*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(10*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(7*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(6*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(3*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(2*8)(r28) + lfd f14,MODE_CHOICE(-16,-40)-(1*8)(r28) +#elif defined(__ppc__) + lfd f1,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(11*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(10*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(7*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(6*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(3*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(2*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(1*8)(r28) +#else +#error undefined architecture +#endif + +L2: + mr r12,r29 // Put the target address in r12 as specified. + mtctr r12 // Get the address to call into CTR. + nop + nop + bctrl // Make the call. + + // Deal with the return value. +#if defined(__ppc64__) + mtcrf 0x3,r31 // flags in cr6 and cr7 + bt 27,L(st_return_value) +#elif defined(__ppc__) + mtcrf 0x1,r31 // flags in cr7 +#else +#error undefined architecture +#endif + + bt 30,L(done_return_value) + bt 29,L(fp_return_value) + stg r3,0(r30) +#if defined(__ppc__) + bf 28,L(done_return_value) // Store the second long if necessary. + stg r4,4(r30) +#endif + // Fall through + +L(done_return_value): + lg r1,0(r1) // Restore stack pointer. + // Restore the registers we used. + lg r9,SF_RETURN(r1) // return address + lg r31,MODE_CHOICE(-4,-8)(r1) + mtlr r9 + lg r30,MODE_CHOICE(-8,-16)(r1) + lg r29,MODE_CHOICE(-12,-24)(r1) + lg r28,MODE_CHOICE(-16,-32)(r1) +#if defined(__ppc64__) + ld r27,-40(r1) +#endif + blr + +#if defined(__ppc64__) +L(st_return_value): + // Grow the stack enough to fit the registers. Leave room for 8 args + // to trample the 1st 8 slots in param area. + stgu r1,-SF_ROUND(280)(r1) // 64 + 104 + 48 + 64 + + // Store GPRs + std r3,SF_ARG9(r1) + std r4,SF_ARG10(r1) + std r5,SF_ARG11(r1) + std r6,SF_ARG12(r1) + nop + std r7,SF_ARG13(r1) + std r8,SF_ARG14(r1) + std r9,SF_ARG15(r1) + std r10,SF_ARG16(r1) + + // Store FPRs + nop + bf 26,L(call_struct_to_ram_form) + stfd f1,SF_ARG17(r1) + stfd f2,SF_ARG18(r1) + stfd f3,SF_ARG19(r1) + stfd f4,SF_ARG20(r1) + nop + stfd f5,SF_ARG21(r1) + stfd f6,SF_ARG22(r1) + stfd f7,SF_ARG23(r1) + stfd f8,SF_ARG24(r1) + nop + stfd f9,SF_ARG25(r1) + stfd f10,SF_ARG26(r1) + stfd f11,SF_ARG27(r1) + stfd f12,SF_ARG28(r1) + nop + stfd f13,SF_ARG29(r1) + +L(call_struct_to_ram_form): + ld r3,0(r27) // extended_cif->cif* + ld r3,16(r3) // ffi_cif->rtype* + addi r4,r1,SF_ARG9 // stored GPRs + addi r6,r1,SF_ARG17 // stored FPRs + li r5,0 // GPR size ptr (NULL) + li r7,0 // FPR size ptr (NULL) + li r8,0 // FPR count ptr (NULL) + li r10,0 // struct offset (NULL) + mr r9,r30 // return area + bl Lffi64_struct_to_ram_form$stub + lg r1,0(r1) // Restore stack pointer. + b L(done_return_value) +#endif + +L(fp_return_value): + /* Do we have long double to store? */ + bf 31,L(fd_return_value) + stfd f1,0(r30) + stfd f2,8(r30) + b L(done_return_value) + +L(fd_return_value): + /* Do we have double to store? */ + bf 28,L(float_return_value) + stfd f1,0(r30) + b L(done_return_value) + +L(float_return_value): + /* We only have a float to store. */ + stfs f1,0(r30) + b L(done_return_value) + +LFE1: +/* END(_ffi_call_DARWIN) */ + +/* Provide a null definition of _ffi_call_AIX. */ +.text + .align 2 +.globl _ffi_call_AIX +.text + .align 2 +_ffi_call_AIX: + blr +/* END(_ffi_call_AIX) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_call_DARWIN.eh +_ffi_call_DARWIN.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align LOG2_GPR_BYTES +LEFDE1: + +#if defined(__ppc64__) +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_ram_form$stub: + .indirect_symbol _ffi64_struct_to_ram_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_ram_form + +LO$ffi64_struct_to_ram_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_ram_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_ram_form + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ +#endif // __ppc__ || __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h new file mode 100644 index 0000000..cf4bd50 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h @@ -0,0 +1,85 @@ +/* ----------------------------------------------------------------------- + ppc-darwin.h - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define L(x) x + +#define SF_ARG9 MODE_CHOICE(56,112) +#define SF_ARG10 MODE_CHOICE(60,120) +#define SF_ARG11 MODE_CHOICE(64,128) +#define SF_ARG12 MODE_CHOICE(68,136) +#define SF_ARG13 MODE_CHOICE(72,144) +#define SF_ARG14 MODE_CHOICE(76,152) +#define SF_ARG15 MODE_CHOICE(80,160) +#define SF_ARG16 MODE_CHOICE(84,168) +#define SF_ARG17 MODE_CHOICE(88,176) +#define SF_ARG18 MODE_CHOICE(92,184) +#define SF_ARG19 MODE_CHOICE(96,192) +#define SF_ARG20 MODE_CHOICE(100,200) +#define SF_ARG21 MODE_CHOICE(104,208) +#define SF_ARG22 MODE_CHOICE(108,216) +#define SF_ARG23 MODE_CHOICE(112,224) +#define SF_ARG24 MODE_CHOICE(116,232) +#define SF_ARG25 MODE_CHOICE(120,240) +#define SF_ARG26 MODE_CHOICE(124,248) +#define SF_ARG27 MODE_CHOICE(128,256) +#define SF_ARG28 MODE_CHOICE(132,264) +#define SF_ARG29 MODE_CHOICE(136,272) + +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 +#define NUM_FPR_ARG_REGISTERS 13 + +#define FFI_TYPE_1_BYTE(x) ((x) == FFI_TYPE_UINT8 || (x) == FFI_TYPE_SINT8) +#define FFI_TYPE_2_BYTE(x) ((x) == FFI_TYPE_UINT16 || (x) == FFI_TYPE_SINT16) +#define FFI_TYPE_4_BYTE(x) \ + ((x) == FFI_TYPE_UINT32 || (x) == FFI_TYPE_SINT32 ||\ + (x) == FFI_TYPE_INT || (x) == FFI_TYPE_FLOAT) + +#if !defined(LIBFFI_ASM) + +enum { + FLAG_RETURNS_NOTHING = 1 << (31 - 30), // cr7 + FLAG_RETURNS_FP = 1 << (31 - 29), + FLAG_RETURNS_64BITS = 1 << (31 - 28), + FLAG_RETURNS_128BITS = 1 << (31 - 31), + + FLAG_RETURNS_STRUCT = 1 << (31 - 27), // cr6 + FLAG_STRUCT_CONTAINS_FP = 1 << (31 - 26), + + FLAG_ARG_NEEDS_COPY = 1 << (31 - 7), + FLAG_FP_ARGUMENTS = 1 << (31 - 6), // cr1.eq; specified by ABI + FLAG_4_GPR_ARGUMENTS = 1 << (31 - 5), + FLAG_RETVAL_REFERENCE = 1 << (31 - 4) +}; + +#if defined(__ppc64__) +void ffi64_struct_to_ram_form(const ffi_type*, const char*, unsigned int*, + const char*, unsigned int*, unsigned int*, char*, unsigned int*); +void ffi64_struct_to_reg_form(const ffi_type*, const char*, unsigned int*, + unsigned int*, char*, unsigned int*, char*, unsigned int*); +bool ffi64_stret_needs_ptr(const ffi_type* inType, + unsigned short*, unsigned short*); +#endif + +#endif // !defined(LIBFFI_ASM) \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S new file mode 100644 index 0000000..c3d30c2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S @@ -0,0 +1,308 @@ +#if defined(__ppc__) + +/* ----------------------------------------------------------------------- + ppc-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 // Save return address + stg r0,SF_RETURN(r1) + +LCFI0: + /* 24/48 bytes (Linkage Area) + 32/64 bytes (outgoing parameter area, always reserved) + 104 bytes (13*8 from FPR) + 16/32 bytes (result) + 176/232 total bytes */ + + /* skip over caller save area and keep stack aligned to 16/32. */ + stgu r1,-SF_ROUND(176)(r1) + +LCFI1: + /* We want to build up an area for the parameters passed + in registers. (both floating point and integer) */ + + /* 176/256 bytes (callee stack frame aligned to 16/32) + 24/48 bytes (caller linkage area) + 200/304 (start of caller parameter area aligned to 4/8) + */ + + /* Save GPRs 3 - 10 (aligned to 4/8) + in the parents outgoing area. */ + stg r3,200(r1) + stg r4,204(r1) + stg r5,208(r1) + stg r6,212(r1) + stg r7,216(r1) + stg r8,220(r1) + stg r9,224(r1) + stg r10,228(r1) + + /* Save FPRs 1 - 13. (aligned to 8) */ + stfd f1,56(r1) + stfd f2,64(r1) + stfd f3,72(r1) + stfd f4,80(r1) + stfd f5,88(r1) + stfd f6,96(r1) + stfd f7,104(r1) + stfd f8,112(r1) + stfd f9,120(r1) + stfd f10,128(r1) + stfd f11,136(r1) + stfd f12,144(r1) + stfd f13,152(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,160 // result storage + addi r5,r1,200 // saved GPRs + addi r6,r1,56 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + /* Now r3 contains the return type. Use it to look up in a table + so we know how to deal with each type. */ + addi r5,r1,160 // Copy result storage pointer. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: +/* Each of the ret_typeX code fragments has to be exactly 16 bytes long + (4 instructions). For cache effectiveness we align to a 16 byte boundary + first. */ + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +/* case FFI_TYPE_VOID */ +Lret_type0: + b Lfinish + nop + nop + nop + +/* case FFI_TYPE_INT */ +Lret_type1: + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_FLOAT */ +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_DOUBLE */ +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_LONGDOUBLE */ +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +/* case FFI_TYPE_UINT8 */ +Lret_type5: + lbz r3,3(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT8 */ +Lret_type6: + lbz r3,3(r5) + extsb r3,r3 + b Lfinish + nop + +/* case FFI_TYPE_UINT16 */ +Lret_type7: + lhz r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT16 */ +Lret_type8: + lha r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT32 */ +Lret_type9: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT32 */ +Lret_type10: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT64 */ +Lret_type11: + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_SINT64 */ +Lret_type12: // same as Lret_type11 + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_STRUCT */ +Lret_type13: + b Lfinish + nop + nop + nop + +/* End 16-byte aligned cases */ +/* case FFI_TYPE_POINTER */ +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + // fall through + +/* case done */ +Lfinish: + addi r1,r1,SF_ROUND(176) // Restore stack pointer. + lg r0,SF_RETURN(r1) // Restore return address. + mtlr r0 // Restore link register. + blr + +/* END(ffi_closure_ASM) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + + +#endif // __ppc__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c new file mode 100644 index 0000000..8953d5f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c @@ -0,0 +1,1776 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1998 Geoffrey Keating + + PowerPC Foreign Function Interface + + Darwin ABI support (c) 2001 John Hornkvist + AIX ABI support (c) 2002 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include +#include +#include +#include + +#if 0 +#if defined(POWERPC_DARWIN) +#include // for sys_icache_invalidate() +#endif + +#else + +#pragma weak sys_icache_invalidate +extern void sys_icache_invalidate(void *start, size_t len); + +#endif + + +extern void ffi_closure_ASM(void); + +// The layout of a function descriptor. A C function pointer really +// points to one of these. +typedef struct aix_fd_struct { + void* code_pointer; + void* toc; +} aix_fd; + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments. + + The stack layout we want looks like this: + + | Return address from ffi_call_DARWIN | higher addresses + |--------------------------------------------| + | Previous backchain pointer 4/8 | stack pointer here + |--------------------------------------------|-\ <<< on entry to + | Saved r28-r31 (4/8)*4 | | ffi_call_DARWIN + |--------------------------------------------| | + | Parameters (at least 8*(4/8)=32/64) | | (176) +112 - +288 + |--------------------------------------------| | + | Space for GPR2 4/8 | | + |--------------------------------------------| | stack | + | Reserved (4/8)*2 | | grows | + |--------------------------------------------| | down V + | Space for callee's LR 4/8 | | + |--------------------------------------------| | lower addresses + | Saved CR 4/8 | | + |--------------------------------------------| | stack pointer here + | Current backchain pointer 4/8 | | during + |--------------------------------------------|-/ <<< ffi_call_DARWIN + + Note: ppc64 CR is saved in the low word of a long on the stack. +*/ + +/*@-exportheader@*/ +void +ffi_prep_args( + extended_cif* inEcif, + unsigned *const stack) +/*@=exportheader@*/ +{ + /* Copy the ecif to a local var so we can trample the arg. + BC note: test this with GP later for possible problems... */ + volatile extended_cif* ecif = inEcif; + + const unsigned bytes = ecif->cif->bytes; + const unsigned flags = ecif->cif->flags; + + /* Cast the stack arg from int* to long*. sizeof(long) == 4 in 32-bit mode + and 8 in 64-bit mode. */ + unsigned long *const longStack = (unsigned long *const)stack; + + /* 'stacktop' points at the previous backchain pointer. */ +#if defined(__ppc64__) + // In ppc-darwin.s, an extra 96 bytes is reserved for the linkage area, + // saved registers, and an extra FPR. + unsigned long *const stacktop = + (unsigned long *)(unsigned long)((char*)longStack + bytes + 96); +#elif defined(__ppc__) + unsigned long *const stacktop = longStack + (bytes / sizeof(long)); +#else +#error undefined architecture +#endif + + /* 'fpr_base' points at the space for fpr1, and grows upwards as + we use FPR registers. */ + double* fpr_base = (double*)(stacktop - ASM_NEEDS_REGISTERS) - + NUM_FPR_ARG_REGISTERS; + +#if defined(__ppc64__) + // 64-bit saves an extra register, and uses an extra FPR. Knock fpr_base + // down a couple pegs. + fpr_base -= 2; +#endif + + unsigned int fparg_count = 0; + + /* 'next_arg' grows up as we put parameters in it. */ + unsigned long* next_arg = longStack + 6; /* 6 reserved positions. */ + + int i; + double double_tmp; + void** p_argv = ecif->avalue; + unsigned long gprvalue; + ffi_type** ptr = ecif->cif->arg_types; + + /* Check that everything starts aligned properly. */ + FFI_ASSERT(stack == SF_ROUND(stack)); + FFI_ASSERT(stacktop == SF_ROUND(stacktop)); + FFI_ASSERT(bytes == SF_ROUND(bytes)); + + /* Deal with return values that are actually pass-by-reference. + Rule: + Return values are referenced by r3, so r4 is the first parameter. */ + + if (flags & FLAG_RETVAL_REFERENCE) + *next_arg++ = (unsigned long)(char*)ecif->rvalue; + + /* Now for the arguments. */ + for (i = ecif->cif->nargs; i > 0; i--, ptr++, p_argv++) + { + switch ((*ptr)->type) + { + /* If a floating-point parameter appears before all of the general- + purpose registers are filled, the corresponding GPRs that match + the size of the floating-point parameter are shadowed for the + benefit of vararg and pre-ANSI functions. */ + case FFI_TYPE_FLOAT: + double_tmp = *(float*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg++; + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + + case FFI_TYPE_DOUBLE: + double_tmp = *(double*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg += MODE_CHOICE(2,1); + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double*)fpr_base = *(long double*)*p_argv; +#elif defined(__ppc__) + if (fparg_count < NUM_FPR_ARG_REGISTERS - 1) + *(long double*)fpr_base = *(long double*)*p_argv; + else if (fparg_count == NUM_FPR_ARG_REGISTERS - 1) + *(double*)fpr_base = *(double*)*p_argv; +#else +#error undefined architecture +#endif + + *(long double*)next_arg = *(long double*)*p_argv; + fparg_count += 2; + fpr_base += 2; + next_arg += MODE_CHOICE(4,2); + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: +#if defined(__ppc64__) + gprvalue = *(long long*)*p_argv; + goto putgpr; +#elif defined(__ppc__) + *(long long*)next_arg = *(long long*)*p_argv; + next_arg += 2; + break; +#else +#error undefined architecture +#endif + + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT8: + gprvalue = *(unsigned char*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT8: + gprvalue = *(signed char*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT16: + gprvalue = *(unsigned short*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT16: + gprvalue = *(signed short*)*p_argv; + goto putgpr; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + + ffi64_struct_to_reg_form(*ptr, (char*)*p_argv, NULL, &fparg_count, + (char*)next_arg, &gprSize, (char*)fpr_base, &fprSize); + next_arg += gprSize / sizeof(long); + fpr_base += fprSize / sizeof(double); + +#elif defined(__ppc__) + char* dest_cpy = (char*)next_arg; + + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. + Structures with 3 byte in size are padded upwards. */ + unsigned size_al = (*ptr)->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + + if (ecif->cif->abi == FFI_DARWIN) + { + if (size_al < 3) + dest_cpy += 4 - size_al; + } + + memcpy((char*)dest_cpy, (char*)*p_argv, size_al); + next_arg += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + gprvalue = *(unsigned*)*p_argv; + +putgpr: + *next_arg++ = gprvalue; + break; + + default: + break; + } + } + + /* Check that we didn't overrun the stack... */ + //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); + //FFI_ASSERT((unsigned *)fpr_base + // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); + //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); +} + +#if defined(__ppc64__) + +bool +ffi64_struct_contains_fp( + const ffi_type* inType) +{ + bool containsFP = false; + unsigned int i; + + for (i = 0; inType->elements[i] != NULL && !containsFP; i++) + { + if (inType->elements[i]->type == FFI_TYPE_FLOAT || + inType->elements[i]->type == FFI_TYPE_DOUBLE || + inType->elements[i]->type == FFI_TYPE_LONGDOUBLE) + containsFP = true; + else if (inType->elements[i]->type == FFI_TYPE_STRUCT) + containsFP = ffi64_struct_contains_fp(inType->elements[i]); + } + + return containsFP; +} + +#endif // defined(__ppc64__) + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + /* All this is for the DARWIN ABI. */ + int i; + ffi_type** ptr; + int intarg_count = 0; + int fparg_count = 0; + unsigned int flags = 0; + unsigned int size_al = 0; + + /* All the machine-independent calculation of cif->bytes will be wrong. + Redo the calculation for DARWIN. */ + + /* Space for the frame pointer, callee's LR, CR, etc, and for + the asm's temp regs. */ + unsigned int bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long); + + /* Return value handling. The rules are as follows: + - 32-bit (or less) integer values are returned in gpr3; + - Structures of size <= 4 bytes also returned in gpr3; + - 64-bit integer values and structures between 5 and 8 bytes are + returned in gpr3 and gpr4; + - Single/double FP values are returned in fpr1; + - Long double FP (if not equivalent to double) values are returned in + fpr1 and fpr2; + - Larger structures values are allocated space and a pointer is passed + as the first argument. */ + switch (cif->rtype->type) + { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_DOUBLE: + flags |= FLAG_RETURNS_64BITS; + /* Fall through. */ + case FFI_TYPE_FLOAT: + flags |= FLAG_RETURNS_FP; + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + flags |= FLAG_RETURNS_64BITS; + break; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + + if (ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) + { + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + } + else + { + flags |= FLAG_RETURNS_STRUCT; + + if (ffi64_struct_contains_fp(cif->rtype)) + flags |= FLAG_STRUCT_CONTAINS_FP; + } + +#elif defined(__ppc__) + + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_VOID: + flags |= FLAG_RETURNS_NOTHING; + break; + + default: + /* Returns 32-bit integer, or similar. Nothing to do here. */ + break; + } + + /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the + first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest + goes on the stack. Structures are passed as a pointer to a copy of + the structure. Stuff on the stack needs to keep proper alignment. */ + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + switch ((*ptr)->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + fparg_count++; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + if (fparg_count > NUM_FPR_ARG_REGISTERS + && intarg_count % 2 != 0) + intarg_count++; + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + fparg_count += 2; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + + if ( +#if defined(__ppc64__) + fparg_count > NUM_FPR_ARG_REGISTERS + 1 +#elif defined(__ppc__) + fparg_count > NUM_FPR_ARG_REGISTERS +#else +#error undefined architecture +#endif + && intarg_count % 2 != 0) + intarg_count++; + + intarg_count += 2; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + /* 'long long' arguments are passed as two words, but + either both words must fit in registers or both go + on the stack. If they go on the stack, they must + be 8-byte-aligned. */ + if (intarg_count == NUM_GPR_ARG_REGISTERS - 1 + || (intarg_count >= NUM_GPR_ARG_REGISTERS + && intarg_count % 2 != 0)) + intarg_count++; + + intarg_count += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_STRUCT: + size_al = (*ptr)->size; + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + +#if defined(__ppc64__) + // Look for FP struct members. + unsigned int j; + + for (j = 0; (*ptr)->elements[j] != NULL; j++) + { + if ((*ptr)->elements[j]->type == FFI_TYPE_FLOAT || + (*ptr)->elements[j]->type == FFI_TYPE_DOUBLE) + { + fparg_count++; + + if (fparg_count > NUM_FPR_ARG_REGISTERS) + intarg_count++; + } + else if ((*ptr)->elements[j]->type == FFI_TYPE_LONGDOUBLE) + { + fparg_count += 2; + + if (fparg_count > NUM_FPR_ARG_REGISTERS + 1) + intarg_count += 2; + } + else + intarg_count++; + } +#elif defined(__ppc__) + intarg_count += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + + break; + + default: + /* Everything else is passed as a 4/8-byte word in a GPR, either + the object itself or a pointer to it. */ + intarg_count++; + break; + } + } + + /* Space for the FPR registers, if needed. */ + if (fparg_count != 0) + { + flags |= FLAG_FP_ARGUMENTS; +#if defined(__ppc64__) + bytes += (NUM_FPR_ARG_REGISTERS + 1) * sizeof(double); +#elif defined(__ppc__) + bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); +#else +#error undefined architecture +#endif + } + + /* Stack space. */ +#if defined(__ppc64__) + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#elif defined(__ppc__) + if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#else +#error undefined architecture +#endif + else + bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); + + /* The stack space allocated needs to be a multiple of 16/32 bytes. */ + bytes = SF_ROUND(bytes); + + cif->flags = flags; + cif->bytes = bytes; + + return FFI_OK; +} + +/*@-declundef@*/ +/*@-exportheader@*/ +extern void +ffi_call_AIX( +/*@out@*/ extended_cif*, + unsigned, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); + +extern void +ffi_call_DARWIN( +/*@out@*/ extended_cif*, + unsigned long, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); +/*@=declundef@*/ +/*@=exportheader@*/ + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return + value address then we need to make one. */ + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + /*@-sysunrecog@*/ + ecif.rvalue = alloca(cif->rtype->size); + /*@=sysunrecog@*/ + } + else + ecif.rvalue = rvalue; + + switch (cif->abi) + { + case FFI_AIX: + /*@-usedef@*/ + ffi_call_AIX(&ecif, -cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + case FFI_DARWIN: + /*@-usedef@*/ + ffi_call_DARWIN(&ecif, -(long)cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + default: + FFI_ASSERT(0); + break; + } +} + +/* here I'd like to add the stack frame layout we use in darwin_closure.S + and aix_clsoure.S + + SP previous -> +---------------------------------------+ <--- child frame + | back chain to caller 4 | + +---------------------------------------+ 4 + | saved CR 4 | + +---------------------------------------+ 8 + | saved LR 4 | + +---------------------------------------+ 12 + | reserved for compilers 4 | + +---------------------------------------+ 16 + | reserved for binders 4 | + +---------------------------------------+ 20 + | saved TOC pointer 4 | + +---------------------------------------+ 24 + | always reserved 8*4=32 (previous GPRs)| + | according to the linkage convention | + | from AIX | + +---------------------------------------+ 56 + | our FPR area 13*8=104 | + | f1 | + | . | + | f13 | + +---------------------------------------+ 160 + | result area 8 | + +---------------------------------------+ 168 + | alignement to the next multiple of 16 | +SP current --> +---------------------------------------+ 176 <- parent frame + | back chain to caller 4 | + +---------------------------------------+ 180 + | saved CR 4 | + +---------------------------------------+ 184 + | saved LR 4 | + +---------------------------------------+ 188 + | reserved for compilers 4 | + +---------------------------------------+ 192 + | reserved for binders 4 | + +---------------------------------------+ 196 + | saved TOC pointer 4 | + +---------------------------------------+ 200 + | always reserved 8*4=32 we store our | + | GPRs here | + | r3 | + | . | + | r10 | + +---------------------------------------+ 232 + | overflow part | + +---------------------------------------+ xxx + | ???? | + +---------------------------------------+ xxx +*/ + +#if !defined(POWERPC_DARWIN) + +#define MIN_LINE_SIZE 32 + +static void +flush_icache( + char* addr) +{ +#ifndef _AIX + __asm__ volatile ( + "dcbf 0,%0\n" + "sync\n" + "icbi 0,%0\n" + "sync\n" + "isync" + : : "r" (addr) : "memory"); +#endif +} + +static void +flush_range( + char* addr, + int size) +{ + int i; + + for (i = 0; i < size; i += MIN_LINE_SIZE) + flush_icache(addr + i); + + flush_icache(addr + size - 1); +} + +#endif // !defined(POWERPC_DARWIN) + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + switch (cif->abi) + { + case FFI_DARWIN: + { + FFI_ASSERT (cif->abi == FFI_DARWIN); + + unsigned int* tramp = (unsigned int*)&closure->tramp[0]; + +#if defined(__ppc64__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0xe98b0018; // ld r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0xe96b0020; // ld r11,32(r11) + tramp[7] = 0x4e800420; // bctr + *(unsigned long*)&tramp[8] = (unsigned long)ffi_closure_ASM; + *(unsigned long*)&tramp[10] = (unsigned long)closure; +#elif defined(__ppc__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0x818b0018; // lwz r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0x816b001c; // lwz r11,28(r11) + tramp[7] = 0x4e800420; // bctr + tramp[8] = (unsigned long)ffi_closure_ASM; + tramp[9] = (unsigned long)closure; +#else +#error undefined architecture +#endif + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + // Flush the icache. Only necessary on Darwin. +#if defined(POWERPC_DARWIN) + sys_icache_invalidate(closure->tramp, FFI_TRAMPOLINE_SIZE); +#else + flush_range(closure->tramp, FFI_TRAMPOLINE_SIZE); +#endif + + break; + } + + case FFI_AIX: + { + FFI_ASSERT (cif->abi == FFI_AIX); + + ffi_aix_trampoline_struct* tramp_aix = + (ffi_aix_trampoline_struct*)(closure->tramp); + aix_fd* fd = (aix_fd*)(void*)ffi_closure_ASM; + + tramp_aix->code_pointer = fd->code_pointer; + tramp_aix->toc = fd->toc; + tramp_aix->static_chain = closure; + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + break; + } + + default: + return FFI_BAD_ABI; + } + + return FFI_OK; +} + +#if defined(__ppc__) + typedef double ldbits[2]; + + typedef union + { + ldbits lb; + long double ld; + } ldu; +#endif + +typedef union +{ + float f; + double d; +} ffi_dblfl; + +/* The trampoline invokes ffi_closure_ASM, and on entry, r11 holds the + address of the closure. After storing the registers that could possibly + contain parameters to be passed into the stack frame and setting up space + for a return value, ffi_closure_ASM invokes the following helper function + to do most of the work. */ +int +ffi_closure_helper_DARWIN( + ffi_closure* closure, + void* rvalue, + unsigned long* pgr, + ffi_dblfl* pfr) +{ + /* rvalue is the pointer to space for return value in closure assembly + pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM + pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ + +#if defined(__ppc__) + ldu temp_ld; +#endif + + double temp; + unsigned int i; + unsigned int nf = 0; /* number of FPRs already used. */ + unsigned int ng = 0; /* number of GPRs already used. */ + ffi_cif* cif = closure->cif; + long avn = cif->nargs; + void** avalue = alloca(cif->nargs * sizeof(void*)); + ffi_type** arg_types = cif->arg_types; + + /* Copy the caller's structure return value address so that the closure + returns the data directly to the caller. */ +#if defined(__ppc64__) + if (cif->rtype->type == FFI_TYPE_STRUCT && + ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) +#elif defined(__ppc__) + if (cif->rtype->type == FFI_TYPE_STRUCT) +#else +#error undefined architecture +#endif + { + rvalue = (void*)*pgr; + pgr++; + ng++; + } + + /* Grab the addresses of the arguments from the stack frame. */ + for (i = 0; i < avn; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = (char*)pgr + MODE_CHOICE(3,7); + ng++; + pgr++; + break; + + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = (char*)pgr + MODE_CHOICE(2,6); + ng++; + pgr++; + break; + +#if defined(__ppc__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + avalue[i] = (char*)pgr + MODE_CHOICE(0,4); + ng++; + pgr++; + + break; + + case FFI_TYPE_STRUCT: + if (cif->abi == FFI_DARWIN) + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + unsigned int savedFPRSize = fprSize; + + avalue[i] = alloca(arg_types[i]->size); + ffi64_struct_to_ram_form(arg_types[i], (const char*)pgr, + &gprSize, (const char*)pfr, &fprSize, &nf, avalue[i], NULL); + + ng += gprSize / sizeof(long); + pgr += gprSize / sizeof(long); + pfr += (fprSize - savedFPRSize) / sizeof(double); + +#elif defined(__ppc__) + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. */ + unsigned int size_al = size_al = arg_types[i]->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN(arg_types[i]->size, 8); + + if (size_al < 3) + avalue[i] = (void*)pgr + MODE_CHOICE(4,8) - size_al; + else + avalue[i] = (void*)pgr; + + ng += (size_al + 3) / sizeof(long); + pgr += (size_al + 3) / sizeof(long); +#else +#error undefined architecture +#endif + } + + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + /* Long long ints are passed in 1 or 2 GPRs. */ + avalue[i] = pgr; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_FLOAT: + /* A float value consumes a GPR. + There are 13 64-bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + temp = pfr->d; + pfr->f = (float)temp; + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng++; + pgr++; + break; + + case FFI_TYPE_DOUBLE: + /* A double value consumes one or two GPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr += 2; + } +#elif defined(__ppc__) + /* A long double value consumes 2/4 GPRs and 2 FPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS - 1) + { + avalue[i] = pfr; + pfr += 2; + } + /* Here we have the situation where one part of the long double + is stored in fpr13 and the other part is already on the stack. + We use a union to pass the long double to avalue[i]. */ + else if (nf == NUM_FPR_ARG_REGISTERS - 1) + { + memcpy (&temp_ld.lb[0], pfr, sizeof(temp_ld.lb[0])); + memcpy (&temp_ld.lb[1], pgr + 2, sizeof(temp_ld.lb[1])); + avalue[i] = &temp_ld.ld; + } +#else +#error undefined architecture +#endif + else + avalue[i] = pgr; + + nf += 2; + ng += MODE_CHOICE(4,2); + pgr += MODE_CHOICE(4,2); + + break; + +#endif /* FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE */ + + default: + FFI_ASSERT(0); + break; + } + } + + (closure->fun)(cif, rvalue, avalue, closure->user_data); + + /* Tell ffi_closure_ASM to perform return type promotions. */ + return cif->rtype->type; +} + +#if defined(__ppc64__) + +/* ffi64_struct_to_ram_form + + Rebuild a struct's natural layout from buffers of concatenated registers. + Return the number of registers used. + inGPRs[0-7] == r3, inFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_ram_form( + const ffi_type* inType, + const char* inGPRs, + unsigned int* ioGPRMarker, + const char* inFPRs, + unsigned int* ioFPRMarker, + unsigned int* ioFPRsUsed, + char* outStruct, // caller-allocated + unsigned int* ioStructMarker) +{ + unsigned int srcGMarker = 0; + unsigned int srcFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + unsigned int destMarker = 0; + + static unsigned int recurseCount = 0; + + if (ioGPRMarker) + srcGMarker = *ioGPRMarker; + + if (ioFPRMarker) + { + srcFMarker = *ioFPRMarker; + savedFMarker = srcFMarker; + } + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioStructMarker) + destMarker = *ioStructMarker; + + size_t i; + + switch (inType->size) + { + case 1: case 2: case 4: + srcGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + srcFMarker = ALIGN(srcFMarker, 4); + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(float*)&outStruct[destMarker] = + (float)*(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(float*)&outStruct[destMarker] = + (float)*(double*)&inGPRs[srcGMarker]; + + srcGMarker += 4; + destMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcFMarker = ALIGN(srcFMarker, 8); + destMarker = ALIGN(destMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(double*)&outStruct[destMarker] = + *(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(double*)&outStruct[destMarker] = + *(double*)&inGPRs[srcGMarker]; + + destMarker += 8; + + // Skip next GPR + srcGMarker += 8; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + destMarker = ALIGN(destMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + srcFMarker = ALIGN(srcFMarker, 8); + srcGMarker = ALIGN(srcGMarker, 8); + *(long double*)&outStruct[destMarker] = + *(long double*)&inFPRs[srcFMarker]; + srcFMarker += 16; + fprsUsed += 2; + } + else + { + srcFMarker = ALIGN(srcFMarker, 16); + srcGMarker = ALIGN(srcGMarker, 16); + *(long double*)&outStruct[destMarker] = + *(long double*)&inGPRs[srcGMarker]; + } + + destMarker += 16; + + // Skip next 2 GPRs + srcGMarker += 16; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + if (inType->alignment == 1) // chars only + { + if (inType->size == 1) + outStruct[destMarker++] = inGPRs[srcGMarker++]; + else if (inType->size == 2) + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + outStruct[destMarker++] = inGPRs[srcGMarker++]; + i++; + } + else + { + memcpy(&outStruct[destMarker], + &inGPRs[srcGMarker], inType->size); + srcGMarker += inType->size; + destMarker += inType->size; + i += inType->size - 1; + } + } + else // chars and other stuff + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, inType->alignment); // was 8 + } + } + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcGMarker = ALIGN(srcGMarker, 2); + destMarker = ALIGN(destMarker, 2); + + *(short*)&outStruct[destMarker] = + *(short*)&inGPRs[srcGMarker]; + srcGMarker += 2; + destMarker += 2; + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + *(int*)&outStruct[destMarker] = + *(int*)&inGPRs[srcGMarker]; + srcGMarker += 4; + destMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcGMarker = ALIGN(srcGMarker, 8); + destMarker = ALIGN(destMarker, 8); + + *(long long*)&outStruct[destMarker] = + *(long long*)&inGPRs[srcGMarker]; + srcGMarker += 8; + destMarker += 8; + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_ram_form(inType->elements[i], inGPRs, + &srcGMarker, inFPRs, &srcFMarker, &fprsUsed, + outStruct, &destMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); // unknown element type + break; + } + } + + srcGMarker = ALIGN(srcGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && srcGMarker == 16) + { + *(long double*)&outStruct[0] = *(long double*)&inGPRs[0]; + srcFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioGPRMarker) + *ioGPRMarker = ALIGN(srcGMarker, 8); + + if (ioFPRMarker) + *ioFPRMarker = srcFMarker; + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioStructMarker) + *ioStructMarker = ALIGN(destMarker, 8); +} + +/* ffi64_struct_to_reg_form + + Copy a struct's elements into buffers that can be sliced into registers. + Return the sizes of the output buffers in bytes. Pass NULL buffer pointers + to calculate size only. + outGPRs[0-7] == r3, outFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_reg_form( + const ffi_type* inType, + const char* inStruct, + unsigned int* ioStructMarker, + unsigned int* ioFPRsUsed, + char* outGPRs, // caller-allocated + unsigned int* ioGPRSize, + char* outFPRs, // caller-allocated + unsigned int* ioFPRSize) +{ + size_t i; + unsigned int srcMarker = 0; + unsigned int destGMarker = 0; + unsigned int destFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + + static unsigned int recurseCount = 0; + + if (ioStructMarker) + srcMarker = *ioStructMarker; + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioGPRSize) + destGMarker = *ioGPRSize; + + if (ioFPRSize) + { + destFMarker = *ioFPRSize; + savedFMarker = destFMarker; + } + + switch (inType->size) + { + case 1: case 2: case 4: + destGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + // Shadow floating-point types in GPRs for vararg and pre-ANSI + // functions. + case FFI_TYPE_FLOAT: + // Nudge markers to next 4/8-byte boundary + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + (double)*(float*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + (double)*(float*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcMarker = ALIGN(srcMarker, 8); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + *(double*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + *(double*)&inStruct[srcMarker]; + + srcMarker += 8; + + // Skip next GPR + destGMarker += 8; + destGMarker = ALIGN(destGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + srcMarker = ALIGN(srcMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + destFMarker = ALIGN(destFMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outFPRs != NULL && inStruct != NULL) + *(long double*)&outFPRs[destFMarker] = + *(long double*)&inStruct[srcMarker]; + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + + destFMarker += 16; + fprsUsed += 2; + } + else + { + destGMarker = ALIGN(destGMarker, 16); + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + } + + srcMarker += 16; + destGMarker += 16; // Skip next 2 GPRs + destGMarker = ALIGN(destGMarker, 8); // was 16 + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + if (inType->alignment == 1) // bytes only + { + if (inType->size == 1) + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + } + else if (inType->size == 2) + { + if (outGPRs != NULL && inStruct != NULL) + { + outGPRs[destGMarker] = inStruct[srcMarker]; + outGPRs[destGMarker + 1] = inStruct[srcMarker + 1]; + } + + srcMarker += 2; + destGMarker += 2; + + i++; + } + else + { + if (outGPRs != NULL && inStruct != NULL) + { + // Avoid memcpy for small chunks. + if (inType->size <= sizeof(long)) + *(long*)&outGPRs[destGMarker] = + *(long*)&inStruct[srcMarker]; + else + memcpy(&outGPRs[destGMarker], + &inStruct[srcMarker], inType->size); + } + + srcMarker += inType->size; + destGMarker += inType->size; + i += inType->size - 1; + } + } + else // bytes and other stuff + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, inType->alignment); // was 8 + } + } + + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcMarker = ALIGN(srcMarker, 2); + destGMarker = ALIGN(destGMarker, 2); + + if (outGPRs != NULL && inStruct != NULL) + *(short*)&outGPRs[destGMarker] = + *(short*)&inStruct[srcMarker]; + + srcMarker += 2; + destGMarker += 2; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + + if (outGPRs != NULL && inStruct != NULL) + *(int*)&outGPRs[destGMarker] = + *(int*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcMarker = ALIGN(srcMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outGPRs != NULL && inStruct != NULL) + *(long long*)&outGPRs[destGMarker] = + *(long long*)&inStruct[srcMarker]; + + srcMarker += 8; + destGMarker += 8; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_reg_form(inType->elements[i], + inStruct, &srcMarker, &fprsUsed, outGPRs, + &destGMarker, outFPRs, &destFMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); + break; + } + } + + destGMarker = ALIGN(destGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && destGMarker == 16) + { + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[0] = *(long double*)&inStruct[0]; + + destFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioStructMarker) + *ioStructMarker = ALIGN(srcMarker, 8); + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioGPRSize) + *ioGPRSize = ALIGN(destGMarker, 8); + + if (ioFPRSize) + *ioFPRSize = ALIGN(destFMarker, 8); +} + +/* ffi64_stret_needs_ptr + + Determine whether a returned struct needs a pointer in r3 or can fit + in registers. +*/ + +bool +ffi64_stret_needs_ptr( + const ffi_type* inType, + unsigned short* ioGPRCount, + unsigned short* ioFPRCount) +{ + // Obvious case first- struct is larger than combined FPR size. + if (inType->size > 14 * 8) + return true; + + // Now the struct can physically fit in registers, determine if it + // also fits logically. + bool needsPtr = false; + unsigned short gprsUsed = 0; + unsigned short fprsUsed = 0; + size_t i; + + if (ioGPRCount) + gprsUsed = *ioGPRCount; + + if (ioFPRCount) + fprsUsed = *ioFPRCount; + + for (i = 0; inType->elements[i] != NULL && !needsPtr; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + gprsUsed++; + fprsUsed++; + + if (fprsUsed > 13) + needsPtr = true; + + break; + + case FFI_TYPE_LONGDOUBLE: + gprsUsed += 2; + fprsUsed += 2; + + if (fprsUsed > 14) + needsPtr = true; + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + gprsUsed++; + + if (gprsUsed > 8) + { + needsPtr = true; + break; + } + + if (inType->elements[i + 1] == NULL) // last byte in the struct + break; + + // Count possible contiguous bytes ahead, up to 8. + unsigned short j; + + for (j = 1; j < 8; j++) + { + if (inType->elements[i + j] == NULL || + !FFI_TYPE_1_BYTE(inType->elements[i + j]->type)) + break; + } + + i += j - 1; // allow for i++ before the test condition + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + gprsUsed++; + + if (gprsUsed > 8) + needsPtr = true; + + break; + + case FFI_TYPE_STRUCT: + needsPtr = ffi64_stret_needs_ptr( + inType->elements[i], &gprsUsed, &fprsUsed); + + break; + + default: + FFI_ASSERT(0); + break; + } + } + + if (ioGPRCount) + *ioGPRCount = gprsUsed; + + if (ioFPRCount) + *ioFPRCount = fprsUsed; + + return needsPtr; +} + +/* ffi64_data_size + + Calculate the size in bytes of an ffi type. +*/ + +unsigned int +ffi64_data_size( + const ffi_type* inType) +{ + unsigned int size = 0; + + switch (inType->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + size = 1; + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + size = 2; + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_FLOAT: + size = 4; + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + size = 8; + break; + + case FFI_TYPE_LONGDOUBLE: + size = 16; + break; + + case FFI_TYPE_STRUCT: + ffi64_struct_to_reg_form( + inType, NULL, NULL, NULL, NULL, &size, NULL, NULL); + break; + + case FFI_TYPE_VOID: + break; + + default: + FFI_ASSERT(0); + break; + } + + return size; +} + +#endif /* defined(__ppc64__) */ +#endif /* __ppc__ || __ppc64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S new file mode 100644 index 0000000..7162fa1 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S @@ -0,0 +1,418 @@ +#if defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc64-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc64-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 + stg r0,SF_RETURN(r1) // save return address + + // Save GPRs 3 - 10 (aligned to 8) in the parents outgoing area. + stg r3,SF_ARG1(r1) + stg r4,SF_ARG2(r1) + stg r5,SF_ARG3(r1) + stg r6,SF_ARG4(r1) + stg r7,SF_ARG5(r1) + stg r8,SF_ARG6(r1) + stg r9,SF_ARG7(r1) + stg r10,SF_ARG8(r1) + +LCFI0: +/* 48 bytes (Linkage Area) + 64 bytes (outgoing parameter area, always reserved) + 112 bytes (14*8 for incoming FPR) + ? bytes (result) + 112 bytes (14*8 for outgoing FPR) + 16 bytes (2 saved registers) + 352 + ? total bytes +*/ + + std r31,-8(r1) // Save registers we use. + std r30,-16(r1) + mr r30,r1 // Save the old SP. + mr r31,r11 // Save the ffi_closure around ffi64_data_size. + + // Calculate the space we need. + stdu r1,-SF_MINSIZE(r1) + ld r3,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r3) // ffi_cif->rtype* + bl Lffi64_data_size$stub + ld r1,0(r1) + + addi r3,r3,352 // Add our overhead. + neg r3,r3 + li r0,-32 // Align to 32 bytes. + and r3,r3,r0 + stdux r1,r1,r3 // Grow the stack. + + mr r11,r31 // Copy the ffi_closure back. + +LCFI1: + // We want to build up an area for the parameters passed + // in registers. (both floating point and integer) + +/* 320 bytes (callee stack frame aligned to 32) + 48 bytes (caller linkage area) + 368 (start of caller parameter area aligned to 8) +*/ + + // Save FPRs 1 - 14. (aligned to 8) + stfd f1,112(r1) + stfd f2,120(r1) + stfd f3,128(r1) + stfd f4,136(r1) + stfd f5,144(r1) + stfd f6,152(r1) + stfd f7,160(r1) + stfd f8,168(r1) + stfd f9,176(r1) + stfd f10,184(r1) + stfd f11,192(r1) + stfd f12,200(r1) + stfd f13,208(r1) + stfd f14,216(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,224 // result storage + addi r5,r30,SF_ARG1 // saved GPRs + addi r6,r1,112 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + // Look the proper starting point in table + // by using return type as an offset. + addi r5,r1,224 // Get pointer to results area. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Now multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: + // Each of the ret_typeX code fragments has to be exactly 16 bytes long + // (4 instructions). For cache effectiveness we align to a 16 byte + // boundary first. + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +// case FFI_TYPE_VOID +Lret_type0: + b Lfinish + nop + nop + nop + +// case FFI_TYPE_INT +Lret_type1: + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_FLOAT +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_DOUBLE +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_LONGDOUBLE +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +// case FFI_TYPE_UINT8 +Lret_type5: + lbz r3,7(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT8 +Lret_type6: + lbz r3,7(r5) + extsb r3,r3 + b Lfinish + nop + +// case FFI_TYPE_UINT16 +Lret_type7: + lhz r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT16 +Lret_type8: + lha r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT32 +Lret_type9: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT32 +Lret_type10: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT64 +Lret_type11: + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT64 +Lret_type12: // same as Lret_type11 + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_STRUCT +Lret_type13: + b Lret_struct + nop + nop + nop + +// ** End 16-byte aligned cases ** +// case FFI_TYPE_POINTER +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + b Lfinish + +// copy struct into registers +Lret_struct: + ld r31,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r31) // ffi_cif->rtype* + ld r31,24(r31) // ffi_cif->flags + mr r4,r5 // copy struct* to 2nd arg + addi r7,r1,SF_ARG9 // GPR return area + addi r9,r30,-16-(14*8) // FPR return area + li r5,0 // struct offset ptr (NULL) + li r6,0 // FPR used count ptr (NULL) + li r8,0 // GPR return area size ptr (NULL) + li r10,0 // FPR return area size ptr (NULL) + bl Lffi64_struct_to_reg_form$stub + + // Load GPRs + ld r3,SF_ARG9(r1) + ld r4,SF_ARG10(r1) + ld r5,SF_ARG11(r1) + ld r6,SF_ARG12(r1) + nop + ld r7,SF_ARG13(r1) + ld r8,SF_ARG14(r1) + ld r9,SF_ARG15(r1) + ld r10,SF_ARG16(r1) + nop + + // Load FPRs + mtcrf 0x2,r31 + bf 26,Lfinish + lfd f1,-16-(14*8)(r30) + lfd f2,-16-(13*8)(r30) + lfd f3,-16-(12*8)(r30) + lfd f4,-16-(11*8)(r30) + nop + lfd f5,-16-(10*8)(r30) + lfd f6,-16-(9*8)(r30) + lfd f7,-16-(8*8)(r30) + lfd f8,-16-(7*8)(r30) + nop + lfd f9,-16-(6*8)(r30) + lfd f10,-16-(5*8)(r30) + lfd f11,-16-(4*8)(r30) + lfd f12,-16-(3*8)(r30) + nop + lfd f13,-16-(2*8)(r30) + lfd f14,-16-(1*8)(r30) + // Fall through + +// case done +Lfinish: + lg r1,0(r1) // Restore stack pointer. + ld r31,-8(r1) // Restore registers we used. + ld r30,-16(r1) + lg r0,SF_RETURN(r1) // Get return address. + mtlr r0 // Reset link register. + blr + +// END(ffi_closure_ASM) + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_reg_form$stub: + .indirect_symbol _ffi64_struct_to_reg_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_reg_form + +LO$ffi64_struct_to_reg_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form)(r11) + mtctr r12 + bctr + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_data_size$stub: + .indirect_symbol _ffi64_data_size + mflr r0 + bcl 20,31,LO$ffi64_data_size + +LO$ffi64_data_size: + mflr r11 + addis r11,r11,ha16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size) + mtlr r0 + lgu r12,lo16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_reg_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_reg_form + .g_long dyld_stub_binding_helper + +L_ffi64_data_size$lazy_ptr: + .indirect_symbol _ffi64_data_size + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/types.c ./Modules/_ctypes/libffi_osx/types.c new file mode 100644 index 0000000..44806ae --- /dev/null +++ ./Modules/_ctypes/libffi_osx/types.c @@ -0,0 +1,115 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +/* Type definitions */ +#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) \ + ffi_type ffi_type_##n = { s, a, t, NULL } +#define FFI_AGGREGATE_TYPEDEF(n, e) \ + ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } + +FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); +FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); +FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); +FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); +FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); +FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); +FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); + +/* Size and alignment are fake here. They must not be 0. */ +FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); + +#if defined ALPHA || defined SPARC64 || defined X86_64 || \ + defined S390X || defined IA64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); +#else +FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); +#endif + +#if defined X86 || defined ARM || defined M68K || defined(X86_DARWIN) + +# ifdef X86_64 + FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +# else + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +# endif + +#elif defined(POWERPC_DARWIN) +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#elif defined SH +FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +#else +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#endif + +#if defined X86 || defined X86_WIN32 || defined M68K || defined(X86_DARWIN) + +# if defined X86_WIN32 || defined X86_64 + FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +# endif + +# ifdef X86_DARWIN + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined ARM || defined SH || defined POWERPC_AIX +FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); +#elif defined POWERPC_DARWIN +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# if __GNUC__ >= 4 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined SPARC +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# ifdef SPARC64 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined X86_64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +#else +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/x86/darwin64.S ./Modules/_ctypes/libffi_osx/x86/darwin64.S new file mode 100644 index 0000000..165d469 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -0,0 +1,417 @@ +/* ----------------------------------------------------------------------- + darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. + derived from unix64.S + + x86-64 Foreign Function Interface for Darwin. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifdef __x86_64__ +#define LIBFFI_ASM +#include +#include + + .file "darwin64.S" +.text + +/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, + void *raddr, void (*fnaddr)()); + + Bit o trickiness here -- ARGS+BYTES is the base of the stack frame + for this function. This has been allocated by ffi_call. We also + deallocate some of the stack that has been alloca'd. */ + + .align 3 + .globl _ffi_call_unix64 + +_ffi_call_unix64: +LUW0: + movq (%rsp), %r10 /* Load return address. */ + movq %rdi, %r12 /* Save a copy of the register area. */ + leaq (%rdi, %rsi), %rax /* Find local stack base. */ + movq %rdx, (%rax) /* Save flags. */ + movq %rcx, 8(%rax) /* Save raddr. */ + movq %rbp, 16(%rax) /* Save old frame pointer. */ + movq %r10, 24(%rax) /* Relocate return address. */ + movq %rax, %rbp /* Finalize local stack frame. */ +LUW1: + /* movq %rdi, %r10 // Save a copy of the register area. */ + movq %r12, %r10 + movq %r8, %r11 /* Save a copy of the target fn. */ + movl %r9d, %eax /* Set number of SSE registers. */ + + /* Load up all argument registers. */ + movq (%r10), %rdi + movq 8(%r10), %rsi + movq 16(%r10), %rdx + movq 24(%r10), %rcx + movq 32(%r10), %r8 + movq 40(%r10), %r9 + testl %eax, %eax + jnz Lload_sse +Lret_from_load_sse: + + /* Deallocate the reg arg area. */ + leaq 176(%r10), %rsp + + /* Call the user function. */ + call *%r11 + + /* Deallocate stack arg area; local stack frame in redzone. */ + leaq 24(%rbp), %rsp + + movq 0(%rbp), %rcx /* Reload flags. */ + movq 8(%rbp), %rdi /* Reload raddr. */ + movq 16(%rbp), %rbp /* Reload old frame pointer. */ +LUW2: + + /* The first byte of the flags contains the FFI_TYPE. */ + movzbl %cl, %r10d + leaq Lstore_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lstore_table: + .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ + .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ + .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ + .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ + .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ + .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ + .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ + .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ + .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ + .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ + .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lst_void: + ret + .align 3 +Lst_uint8: + movzbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_sint8: + movsbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint16: + movzwq %ax, %rax + movq %rax, (%rdi) + .align 3 +Lst_sint16: + movswq %ax, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint32: + movl %eax, %eax + movq %rax, (%rdi) + .align 3 +Lst_sint32: + cltq + movq %rax, (%rdi) + ret + .align 3 +Lst_int64: + movq %rax, (%rdi) + ret + .align 3 +Lst_float: + movss %xmm0, (%rdi) + ret + .align 3 +Lst_double: + movsd %xmm0, (%rdi) + ret +Lst_ldouble: + fstpt (%rdi) + ret + .align 3 +Lst_struct: + leaq -20(%rsp), %rsi /* Scratch area in redzone. */ + + /* We have to locate the values now, and since we don't want to + write too much data into the user's return value, we spill the + value to a 16 byte scratch area first. Bits 8, 9, and 10 + control where the values are located. Only one of the three + bits will be set; see ffi_prep_cif_machdep for the pattern. */ + movd %xmm0, %r10 + movd %xmm1, %r11 + testl $0x100, %ecx + cmovnz %rax, %rdx + cmovnz %r10, %rax + testl $0x200, %ecx + cmovnz %r10, %rdx + testl $0x400, %ecx + cmovnz %r10, %rax + cmovnz %r11, %rdx + movq %rax, (%rsi) + movq %rdx, 8(%rsi) + + /* Bits 12-31 contain the true size of the structure. Copy from + the scratch area to the true destination. */ + shrl $12, %ecx + rep movsb + ret + + /* Many times we can avoid loading any SSE registers at all. + It's not worth an indirect jump to load the exact set of + SSE registers needed; zero or all is a good compromise. */ + .align 3 +LUW3: +Lload_sse: + movdqa 48(%r10), %xmm0 + movdqa 64(%r10), %xmm1 + movdqa 80(%r10), %xmm2 + movdqa 96(%r10), %xmm3 + movdqa 112(%r10), %xmm4 + movdqa 128(%r10), %xmm5 + movdqa 144(%r10), %xmm6 + movdqa 160(%r10), %xmm7 + jmp Lret_from_load_sse + +LUW4: + .align 3 + .globl _ffi_closure_unix64 + +_ffi_closure_unix64: +LUW5: + /* The carry flag is set by the trampoline iff SSE registers + are used. Don't clobber it before the branch instruction. */ + leaq -200(%rsp), %rsp +LUW6: + movq %rdi, (%rsp) + movq %rsi, 8(%rsp) + movq %rdx, 16(%rsp) + movq %rcx, 24(%rsp) + movq %r8, 32(%rsp) + movq %r9, 40(%rsp) + jc Lsave_sse +Lret_from_save_sse: + + movq %r10, %rdi + leaq 176(%rsp), %rsi + movq %rsp, %rdx + leaq 208(%rsp), %rcx + call _ffi_closure_unix64_inner + + /* Deallocate stack frame early; return value is now in redzone. */ + addq $200, %rsp +LUW7: + + /* The first byte of the return value contains the FFI_TYPE. */ + movzbl %al, %r10d + leaq Lload_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lload_table: + .long Lld_void-Lload_table /* FFI_TYPE_VOID */ + .long Lld_int32-Lload_table /* FFI_TYPE_INT */ + .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ + .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ + .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ + .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ + .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ + .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ + .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ + .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ + .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ + .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ + .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ + .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ + .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lld_void: + ret + .align 3 +Lld_int8: + movzbl -24(%rsp), %eax + ret + .align 3 +Lld_int16: + movzwl -24(%rsp), %eax + ret + .align 3 +Lld_int32: + movl -24(%rsp), %eax + ret + .align 3 +Lld_int64: + movq -24(%rsp), %rax + ret + .align 3 +Lld_float: + movss -24(%rsp), %xmm0 + ret + .align 3 +Lld_double: + movsd -24(%rsp), %xmm0 + ret + .align 3 +Lld_ldouble: + fldt -24(%rsp) + ret + .align 3 +Lld_struct: + /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, + %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading + both rdx and xmm1 with the second word. For the remaining, + bit 8 set means xmm0 gets the second word, and bit 9 means + that rax gets the second word. */ + movq -24(%rsp), %rcx + movq -16(%rsp), %rdx + movq -16(%rsp), %xmm1 + testl $0x100, %eax + cmovnz %rdx, %rcx + movd %rcx, %xmm0 + testl $0x200, %eax + movq -24(%rsp), %rax + cmovnz %rdx, %rax + ret + + /* See the comment above Lload_sse; the same logic applies here. */ + .align 3 +LUW8: +Lsave_sse: + movdqa %xmm0, 48(%rsp) + movdqa %xmm1, 64(%rsp) + movdqa %xmm2, 80(%rsp) + movdqa %xmm3, 96(%rsp) + movdqa %xmm4, 112(%rsp) + movdqa %xmm5, 128(%rsp) + movdqa %xmm6, 144(%rsp) + movdqa %xmm7, 160(%rsp) + jmp Lret_from_save_sse + +LUW9: +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ + .long L$set$0 +LSCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "zR\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ + .byte 0x10 /* CIE RA Column */ + .byte 0x1 /* uleb128 0x1; Augmentation size */ + .byte 0x10 /* FDE Encoding (pcrel sdata4) */ + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 /* uleb128 0x7 */ + .byte 0x8 /* uleb128 0x8 */ + .byte 0x90 /* DW_CFA_offset, column 0x10 */ + .byte 0x1 + .align 3 +LECIE1: + .globl _ffi_call_unix64.eh +_ffi_call_unix64.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 /* FDE CIE offset */ + .quad LUW0-. /* FDE initial location */ + .set L$set$2,LUW4-LUW0 /* FDE address range */ + .quad L$set$2 + .byte 0x0 /* Augmentation size */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$3,LUW1-LUW0 + .long L$set$3 + + /* New stack frame based off rbp. This is a itty bit of unwind + trickery in that the CFA *has* changed. There is no easy way + to describe it correctly on entry to the function. Fortunately, + it doesn't matter too much since at all points we can correctly + unwind back to ffi_call. Note that the location to which we + moved the return address is (the new) CFA-8, so from the + perspective of the unwind info, it hasn't moved. */ + .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ + .byte 0x6 + .byte 0x20 + .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ + .byte 0x2 + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$4,LUW2-LUW1 + .long L$set$4 + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 + .byte 0x8 + .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$5,LUW3-LUW2 + .long L$set$5 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE1: + .globl _ffi_closure_unix64.eh +_ffi_closure_unix64.eh: +LSFDE3: + .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ + .long L$set$6 +LASFDE3: + .long LASFDE3-EH_frame1 /* FDE CIE offset */ + .quad LUW5-. /* FDE initial location */ + .set L$set$7,LUW9-LUW5 /* FDE address range */ + .quad L$set$7 + .byte 0x0 /* Augmentation size */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$8,LUW6-LUW5 + .long L$set$8 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 208,1 /* uleb128 208 */ + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$9,LUW7-LUW6 + .long L$set$9 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 0x8 + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$10,LUW8-LUW7 + .long L$set$10 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE3: + .subsections_via_symbols + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S new file mode 100644 index 0000000..925a841 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S @@ -0,0 +1,422 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. + + X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +/* + * This file is based on sysv.S and then hacked up by Ronald who hasn't done + * assembly programming in 8 years. + */ + +#ifndef __x86_64__ + +#define LIBFFI_ASM +#include +#include + +#ifdef PyObjC_STRICT_DEBUGGING + /* XXX: Debugging of stack alignment, to be removed */ +#define ASSERT_STACK_ALIGNED movdqa -16(%esp), %xmm0 +#else +#define ASSERT_STACK_ALIGNED +#endif + +.text + +.globl _ffi_prep_args + + .align 4 +.globl _ffi_call_SYSV + +_ffi_call_SYSV: +LFB1: + pushl %ebp +LCFI0: + movl %esp,%ebp +LCFI1: + subl $8,%esp + /* Make room for all of the new args. */ + movl 16(%ebp),%ecx + subl %ecx,%esp + + movl %esp,%eax + + /* Place all of the ffi_prep_args in position */ + subl $8,%esp + pushl 12(%ebp) + pushl %eax + call *8(%ebp) + + /* Return stack to previous state and call the function */ + addl $16,%esp + + call *28(%ebp) + + /* Remove the space we pushed for the args */ + movl 16(%ebp),%ecx + addl %ecx,%esp + + /* Load %ecx with the return type code */ + movl 20(%ebp),%ecx + + /* If the return value pointer is NULL, assume no return value. */ + cmpl $0,24(%ebp) + jne Lretint + + /* Even if there is no space for the return value, we are + obliged to handle floating-point values. */ + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lnoretval + fstp %st(0) + + jmp Lepilogue + +Lretint: + cmpl $FFI_TYPE_INT,%ecx + jne Lretfloat + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp Lepilogue + +Lretfloat: + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lretdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstps (%ecx) + jmp Lepilogue + +Lretdouble: + cmpl $FFI_TYPE_DOUBLE,%ecx + jne Lretlongdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpl (%ecx) + jmp Lepilogue + +Lretlongdouble: + cmpl $FFI_TYPE_LONGDOUBLE,%ecx + jne Lretint64 + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpt (%ecx) + jmp Lepilogue + +Lretint64: + cmpl $FFI_TYPE_SINT64,%ecx + jne Lretstruct1b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + movl %edx,4(%ecx) + jmp Lepilogue + +Lretstruct1b: + cmpl $FFI_TYPE_SINT8,%ecx + jne Lretstruct2b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movb %al,0(%ecx) + jmp Lepilogue + +Lretstruct2b: + cmpl $FFI_TYPE_SINT16,%ecx + jne Lretstruct + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movw %ax,0(%ecx) + jmp Lepilogue + +Lretstruct: + cmpl $FFI_TYPE_STRUCT,%ecx + jne Lnoretval + /* Nothing to do! */ + addl $4,%esp + popl %ebp + ret + +Lnoretval: +Lepilogue: + addl $8,%esp + movl %ebp,%esp + popl %ebp + ret +LFE1: +.ffi_call_SYSV_end: + + .align 4 +FFI_HIDDEN (ffi_closure_SYSV) +.globl _ffi_closure_SYSV + +_ffi_closure_SYSV: +LFB2: + pushl %ebp +LCFI2: + movl %esp, %ebp +LCFI3: + subl $56, %esp + leal -40(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 8(%ebp), %edx + movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + movl %ebx, 8(%esp) +LCFI7: + call L_ffi_closure_SYSV_inner$stub + movl 8(%esp), %ebx + movl -12(%ebp), %ecx + cmpl $FFI_TYPE_INT, %eax + je Lcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lcls_retllong + cmpl $FFI_TYPE_UINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_SINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_UINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_SINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_STRUCT, %eax + je Lcls_retstruct +Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret +Lcls_retint: + movl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retfloat: + flds (%ecx) + jmp Lcls_epilogue +Lcls_retdouble: + fldl (%ecx) + jmp Lcls_epilogue +Lcls_retldouble: + fldt (%ecx) + jmp Lcls_epilogue +Lcls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp Lcls_epilogue +Lcls_retstruct1: + movsbl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct2: + movswl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct: + lea -8(%ebp),%esp + movl %ebp, %esp + popl %ebp + ret $4 +LFE2: + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + + .align 4 +FFI_HIDDEN (ffi_closure_raw_SYSV) +.globl _ffi_closure_raw_SYSV + +_ffi_closure_raw_SYSV: +LFB3: + pushl %ebp +LCFI4: + movl %esp, %ebp +LCFI5: + pushl %esi +LCFI6: + subl $36, %esp + movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ + movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ + movl %edx, 12(%esp) /* user_data */ + leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ + movl %edx, 8(%esp) /* raw_args */ + leal -24(%ebp), %edx + movl %edx, 4(%esp) /* &res */ + movl %esi, (%esp) /* cif */ + call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ + movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ + cmpl $FFI_TYPE_INT, %eax + je Lrcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lrcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lrcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lrcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lrcls_retllong +Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret +Lrcls_retint: + movl -24(%ebp), %eax + jmp Lrcls_epilogue +Lrcls_retfloat: + flds -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retdouble: + fldl -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retldouble: + fldt -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retllong: + movl -24(%ebp), %eax + movl -20(%ebp), %edx + jmp Lrcls_epilogue +LFE3: +#endif + +.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 +L_ffi_closure_SYSV_inner$stub: + .indirect_symbol _ffi_closure_SYSV_inner + hlt ; hlt ; hlt ; hlt ; hlt + + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 +LSCIE1: + .long 0x0 + .byte 0x1 + .ascii "zR\0" + .byte 0x1 + .byte 0x7c + .byte 0x8 + .byte 0x1 + .byte 0x10 + .byte 0xc + .byte 0x5 + .byte 0x4 + .byte 0x88 + .byte 0x1 + .align 2 +LECIE1: +.globl _ffi_call_SYSV.eh +_ffi_call_SYSV.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 + .long LFB1-. + .set L$set$2,LFE1-LFB1 + .long L$set$2 + .byte 0x0 + .byte 0x4 + .set L$set$3,LCFI0-LFB1 + .long L$set$3 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$4,LCFI1-LCFI0 + .long L$set$4 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE1: +.globl _ffi_closure_SYSV.eh +_ffi_closure_SYSV.eh: +LSFDE2: + .set L$set$5,LEFDE2-LASFDE2 + .long L$set$5 +LASFDE2: + .long LASFDE2-EH_frame1 + .long LFB2-. + .set L$set$6,LFE2-LFB2 + .long L$set$6 + .byte 0x0 + .byte 0x4 + .set L$set$7,LCFI2-LFB2 + .long L$set$7 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$8,LCFI3-LCFI2 + .long L$set$8 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE2: + +#if !FFI_NO_RAW_API + +.globl _ffi_closure_raw_SYSV.eh +_ffi_closure_raw_SYSV.eh: +LSFDE3: + .set L$set$10,LEFDE3-LASFDE3 + .long L$set$10 +LASFDE3: + .long LASFDE3-EH_frame1 + .long LFB3-. + .set L$set$11,LFE3-LFB3 + .long L$set$11 + .byte 0x0 + .byte 0x4 + .set L$set$12,LCFI4-LFB3 + .long L$set$12 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$13,LCFI5-LCFI4 + .long L$set$13 + .byte 0xd + .byte 0x4 + .byte 0x4 + .set L$set$14,LCFI6-LCFI5 + .long L$set$14 + .byte 0x85 + .byte 0x3 + .align 2 +LEFDE3: + +#endif + +#endif /* ifndef __x86_64__ */ + +#endif /* defined __i386__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c new file mode 100644 index 0000000..06feaf2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c @@ -0,0 +1,734 @@ +#ifdef __x86_64__ + +/* ----------------------------------------------------------------------- + x86-ffi64.c - Copyright (c) 2002 Bo Thorsen + + x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#define MAX_GPR_REGS 6 +#define MAX_SSE_REGS 8 + +typedef struct RegisterArgs { + /* Registers for argument passing. */ + UINT64 gpr[MAX_GPR_REGS]; + __int128_t sse[MAX_SSE_REGS]; +} RegisterArgs; + +extern void +ffi_call_unix64( + void* args, + unsigned long bytes, + unsigned flags, + void* raddr, + void (*fnaddr)(), + unsigned ssecount); + +/* All reference to register classes here is identical to the code in + gcc/config/i386/i386.c. Do *not* change one without the other. */ + +/* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +enum x86_64_reg_class +{ + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_COMPLEX_X87_CLASS, + X86_64_MEMORY_CLASS +}; + +#define MAX_CLASSES 4 +#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + +/* x86-64 register passing implementation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + +/* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ +static enum x86_64_reg_class +merge_classes( + enum x86_64_reg_class class1, + enum x86_64_reg_class class2) +{ + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, + MEMORY is used. */ + if (class1 == X86_64_X87_CLASS + || class1 == X86_64_X87UP_CLASS + || class1 == X86_64_COMPLEX_X87_CLASS + || class2 == X86_64_X87_CLASS + || class2 == X86_64_X87UP_CLASS + || class2 == X86_64_COMPLEX_X87_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; +} + +/* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + See the x86-64 PS ABI for details. */ + +static int +classify_argument( + ffi_type* type, + enum x86_64_reg_class classes[], + size_t byte_offset) +{ + switch (type->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_POINTER: +#if 0 + if (byte_offset + type->size <= 4) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + + return 1; +#else + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } +#endif + + case FFI_TYPE_FLOAT: + if (byte_offset == 0) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + + return 1; + + case FFI_TYPE_DOUBLE: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + + case FFI_TYPE_LONGDOUBLE: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + + case FFI_TYPE_STRUCT: + { + ffi_type** ptr; + int i; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + const int UNITS_PER_WORD = 8; + int words = + (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + /* If the struct is larger than 16 bytes, pass it on the stack. */ + if (type->size > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Merge the fields of structure. */ + for (ptr = type->elements; *ptr != NULL; ptr++) + { + byte_offset = ALIGN(byte_offset, (*ptr)->alignment); + + int num = classify_argument(*ptr, subclasses, byte_offset % 8); + + if (num == 0) + return 0; + + int pos = byte_offset / 8; + + for (i = 0; i < num; i++) + { + classes[i + pos] = + merge_classes(subclasses[i], classes[i + pos]); + } + + byte_offset += (*ptr)->size; + } + + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && classes[i - 1] != X86_64_X87_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + } + + return words; + } + + default: + FFI_ASSERT(0); + } + + return 0; /* Never reached. */ +} + +/* Examine the argument and return set number of register required in each + class. Return zero if parameter should be passed in memory, otherwise + the number of registers. */ +static int +examine_argument( + ffi_type* type, + enum x86_64_reg_class classes[MAX_CLASSES], + _Bool in_return, + int* pngpr, + int* pnsse) +{ + int n = classify_argument(type, classes, 0); + int ngpr = 0; + int nsse = 0; + int i; + + if (n == 0) + return 0; + + for (i = 0; i < n; ++i) + { + switch (classes[i]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + ngpr++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + nsse++; + break; + + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + case X86_64_COMPLEX_X87_CLASS: + return in_return != 0; + + default: + abort(); + } + } + + *pngpr = ngpr; + *pnsse = nsse; + + return n; +} + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + int gprcount = 0; + int ssecount = 0; + int flags = cif->rtype->type; + int i, avn, n, ngpr, nsse; + enum x86_64_reg_class classes[MAX_CLASSES]; + size_t bytes; + + if (flags != FFI_TYPE_VOID) + { + n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value is passed in memory. A pointer to that + memory is the first argument. Allocate a register for it. */ + gprcount++; + + /* We don't have to do anything in asm for the return. */ + flags = FFI_TYPE_VOID; + } + else if (flags == FFI_TYPE_STRUCT) + { + /* Mark which registers the result appears in. */ + _Bool sse0 = SSE_CLASS_P(classes[0]); + _Bool sse1 = n == 2 && SSE_CLASS_P(classes[1]); + + if (sse0 && !sse1) + flags |= 1 << 8; + else if (!sse0 && sse1) + flags |= 1 << 9; + else if (sse0 && sse1) + flags |= 1 << 10; + + /* Mark the true size of the structure. */ + flags |= cif->rtype->size << 12; + } + } + + /* Go over all arguments and determine the way they should be passed. + If it's in a register and there is space for it, let that be so. If + not, add it's size to the stack byte count. */ + for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) + { + if (examine_argument(cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = cif->arg_types[i]->alignment; + + if (align < 8) + align = 8; + + bytes = ALIGN(bytes, align); + bytes += cif->arg_types[i]->size; + } + else + { + gprcount += ngpr; + ssecount += nsse; + } + } + + if (ssecount) + flags |= 1 << 11; + + cif->flags = flags; + cif->bytes = bytes; + cif->bytes = ALIGN(bytes,8); + + return FFI_OK; +} + +void +ffi_call( + ffi_cif* cif, + void (*fn)(), + void* rvalue, + void** avalue) +{ + enum x86_64_reg_class classes[MAX_CLASSES]; + char* stack; + char* argp; + ffi_type** arg_types; + int gprcount, ssecount, ngpr, nsse, i, avn; + _Bool ret_in_memory; + RegisterArgs* reg_args; + + /* Can't call 32-bit mode from 64-bit mode. */ + FFI_ASSERT(cif->abi == FFI_UNIX64); + + /* If the return value is a struct and we don't have a return value + address then we need to make one. Note the setting of flags to + VOID above in ffi_prep_cif_machdep. */ + ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT + && (cif->flags & 0xff) == FFI_TYPE_VOID); + + if (rvalue == NULL && ret_in_memory) + rvalue = alloca (cif->rtype->size); + + /* Allocate the space for the arguments, plus 4 words of temp space. */ + stack = alloca(sizeof(RegisterArgs) + cif->bytes + 4 * 8); + reg_args = (RegisterArgs*)stack; + argp = stack + sizeof(RegisterArgs); + + gprcount = ssecount = 0; + + /* If the return value is passed in memory, add the pointer as the + first integer argument. */ + if (ret_in_memory) + reg_args->gpr[gprcount++] = (long) rvalue; + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + size_t size = arg_types[i]->size; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + memcpy (argp, avalue[i], size); + argp += size; + } + else + { /* The argument is passed entirely in registers. */ + char *a = (char *) avalue[i]; + int j; + + for (j = 0; j < n; j++, a += 8, size -= 8) + { + switch (classes[j]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + reg_args->gpr[gprcount] = 0; + switch (arg_types[i]->type) { + case FFI_TYPE_SINT8: + { + int8_t shortval = *(int8_t*)a; + int64_t actval = (int64_t)shortval; + reg_args->gpr[gprcount] = actval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + break; + } + + case FFI_TYPE_SINT16: + { + int16_t shortval = *(int16_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_SINT32: + { + int32_t shortval = *(int32_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT8: + { + u_int8_t shortval = *(u_int8_t*)a; + u_int64_t actval = (u_int64_t)shortval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + reg_args->gpr[gprcount] = actval; + break; + } + + case FFI_TYPE_UINT16: + { + u_int16_t shortval = *(u_int16_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT32: + { + u_int32_t shortval = *(u_int32_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + default: + //memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); + reg_args->gpr[gprcount] = *(int64_t*)a; + } + gprcount++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSEDF_CLASS: + reg_args->sse[ssecount++] = *(UINT64 *) a; + break; + + case X86_64_SSESF_CLASS: + reg_args->sse[ssecount++] = *(UINT32 *) a; + break; + + default: + abort(); + } + } + } + } + + ffi_call_unix64 (stack, cif->bytes + sizeof(RegisterArgs), + cif->flags, rvalue, fn, ssecount); +} + +extern void ffi_closure_unix64(void); + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + if (cif->abi != FFI_UNIX64) + return FFI_BAD_ABI; + + volatile unsigned short* tramp = + (volatile unsigned short*)&closure->tramp[0]; + + tramp[0] = 0xbb49; /* mov , %r11 */ + *(void* volatile*)&tramp[1] = ffi_closure_unix64; + tramp[5] = 0xba49; /* mov , %r10 */ + *(void* volatile*)&tramp[6] = closure; + + /* Set the carry bit if the function uses any sse registers. + This is clc or stc, together with the first byte of the jmp. */ + tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + tramp[11] = 0xe3ff; /* jmp *%r11 */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmissing-prototypes" +int +ffi_closure_unix64_inner( + ffi_closure* closure, + void* rvalue, + RegisterArgs* reg_args, + char* argp) +#pragma clang diagnostic pop +{ + ffi_cif* cif = closure->cif; + void** avalue = alloca(cif->nargs * sizeof(void *)); + ffi_type** arg_types; + long i, avn; + int gprcount = 0; + int ssecount = 0; + int ngpr, nsse; + int ret; + + ret = cif->rtype->type; + + if (ret != FFI_TYPE_VOID) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value goes in memory. Arrange for the closure + return value to go directly back to the original caller. */ + rvalue = (void *) reg_args->gpr[gprcount++]; + + /* We don't have to do anything in asm for the return. */ + ret = FFI_TYPE_VOID; + } + else if (ret == FFI_TYPE_STRUCT && n == 2) + { + /* Mark which register the second word of the structure goes in. */ + _Bool sse0 = SSE_CLASS_P (classes[0]); + _Bool sse1 = SSE_CLASS_P (classes[1]); + + if (!sse0 && sse1) + ret |= 1 << 8; + else if (sse0 && !sse1) + ret |= 1 << 9; + } + } + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + avalue[i] = argp; + argp += arg_types[i]->size; + } + +#if !defined(X86_DARWIN) + /* If the argument is in a single register, or two consecutive + registers, then we can use that address directly. */ + else if (n == 1 || (n == 2 && + SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + { + // The argument is in a single register. + if (SSE_CLASS_P (classes[0])) + { + avalue[i] = ®_args->sse[ssecount]; + ssecount += n; + } + else + { + avalue[i] = ®_args->gpr[gprcount]; + gprcount += n; + } + } +#endif + + /* Otherwise, allocate space to make them consecutive. */ + else + { + char *a = alloca (16); + int j; + + avalue[i] = a; + + for (j = 0; j < n; j++, a += 8) + { + if (SSE_CLASS_P (classes[j])) + memcpy (a, ®_args->sse[ssecount++], 8); + else + memcpy (a, ®_args->gpr[gprcount++], 8); + } + } + } + + /* Invoke the closure. */ + closure->fun (cif, rvalue, avalue, closure->user_data); + + /* Tell assembly how to perform return type promotions. */ + return ret; +} + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c new file mode 100644 index 0000000..706ea0f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c @@ -0,0 +1,438 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2002 Bo Thorsen + Copyright (c) 2002 Roger Sayle + + x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void ffi_prep_args(char *stack, extended_cif *ecif); + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if (ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void **) argp = ecif->rvalue; + argp += 4; + } + + p_argv = ecif->avalue; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + i != 0; + i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) + argp = (char *) ALIGN(argp, sizeof(int)); + + z = (*p_arg)->size; + if (z < sizeof(int)) + { + z = sizeof(int); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } + else + { + memcpy(argp, *p_argv, z); + } + p_argv++; + argp += z; + } + + return; +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Set the return type flag */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: +#ifdef X86 + case FFI_TYPE_STRUCT: + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: +#endif + + case FFI_TYPE_SINT64: + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_UINT64: + cif->flags = FFI_TYPE_SINT64; + break; + +#ifndef X86 + case FFI_TYPE_STRUCT: + if (cif->rtype->size == 1) + { + cif->flags = FFI_TYPE_SINT8; /* same as char size */ + } + else if (cif->rtype->size == 2) + { + cif->flags = FFI_TYPE_SINT16; /* same as short size */ + } + else if (cif->rtype->size == 4) + { + cif->flags = FFI_TYPE_INT; /* same as int type */ + } + else if (cif->rtype->size == 8) + { + cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ + } + else + { + cif->flags = FFI_TYPE_STRUCT; + } + break; +#endif + + default: + cif->flags = FFI_TYPE_INT; + break; + } + +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + + return FFI_OK; +} + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#endif /* X86_WIN32 */ + +void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->flags == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, + fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + + +/** private members **/ + +static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) +__attribute__ ((regparm(1))); +unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) +__attribute__ ((regparm(1))); +void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) +__attribute__ ((regparm(1))); + +/* This function is jumped to by the trampoline */ + +unsigned int FFI_HIDDEN +ffi_closure_SYSV_inner (closure, respp, args) +ffi_closure *closure; +void **respp; +void *args; +{ + // our various things... + ffi_cif *cif; + void **arg_area; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will re-set RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun) (cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +static void +ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, + ffi_cif *cif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if ( cif->flags == FFI_TYPE_STRUCT ) { + *rvalue = *(void **) argp; + argp += 4; + } + + p_argv = avalue; + + for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, sizeof(int)); + } + + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + + p_argv++; + argp += z; + } + + return; +} + +/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ + +#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ +({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +unsigned int __fun = (unsigned int)(FUN); \ +unsigned int __ctx = (unsigned int)(CTX); \ +unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \ +*(unsigned char*) &__tramp[0] = 0xb8; \ +*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ +*(unsigned char *) &__tramp[5] = 0xe9; \ +*(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ +}) + + +/* the cif must already be prep'ed */ +ffi_status +ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data) +{ + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ + &ffi_closure_SYSV, \ + (void*)closure); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +/* ------- Native raw API support -------------------------------- */ + +#if !FFI_NO_RAW_API + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + int i; + + FFI_ASSERT (cif->abi == FFI_SYSV); + + // we currently don't support certain kinds of arguments for raw + // closures. This should be implemented by a separate assembly language + // routine, since it would require argument processing, something we + // don't do now for performance. + + for (i = cif->nargs-1; i >= 0; i--) + { + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); + } + + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, + codeloc); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +static void +ffi_prep_args_raw(char *stack, extended_cif *ecif) +{ + memcpy (stack, ecif->avalue, ecif->cif->bytes); +} + +/* we borrow this routine from libffi (it must be changed, though, to + * actually call the function passed in the first argument. as of + * libffi-1.20, this is not the case.) + */ + +extern void +ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void +ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); +#endif /* X86_WIN32 */ + +void +ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue) +{ + extended_cif ecif; + void **avalue = (void **)fake_avalue; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + +#endif +#endif // __i386__ diff -r -u ./setup.py ./setup.py index 46b92fe..2bf6b4b 100644 --- ./setup.py +++ ./setup.py @@ -98,8 +98,14 @@ class PyBuildExt(build_ext): self.detect_modules() # Remove modules that are present on the disabled list - self.extensions = [ext for ext in self.extensions - if ext.name not in disabled_module_list] + extensions = [ext for ext in self.extensions + if ext.name not in disabled_module_list] + # move ctypes to the end, it depends on other modules + ext_map = dict((ext.name, i) for i, ext in enumerate(extensions)) + if "_ctypes" in ext_map: + ctypes = extensions.pop(ext_map["_ctypes"]) + extensions.append(ctypes) + self.extensions = extensions # Fix up the autodetected modules, prefixing all the source files # with Modules/ and adding Python's include directory to the path. @@ -1330,9 +1336,39 @@ class PyBuildExt(build_ext): # *** Uncomment these for TOGL extension only: # -lGL -lGLU -lXext -lXmu \ + def configure_ctypes_darwin(self, ext): + # Darwin (OS X) uses preconfigured files, in + # the Modules/_ctypes/libffi_osx directory. + srcdir = sysconfig.get_config_var('srcdir') + ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', + '_ctypes', 'libffi_osx')) + sources = [os.path.join(ffi_srcdir, p) + for p in ['ffi.c', + 'x86/darwin64.S', + 'x86/x86-darwin.S', + 'x86/x86-ffi_darwin.c', + 'x86/x86-ffi64.c', + 'powerpc/ppc-darwin.S', + 'powerpc/ppc-darwin_closure.S', + 'powerpc/ppc-ffi_darwin.c', + 'powerpc/ppc64-darwin_closure.S', + ]] + + # Add .S (preprocessed assembly) to C compiler source extensions. + self.compiler.src_extensions.append('.S') + + include_dirs = [os.path.join(ffi_srcdir, 'include'), + os.path.join(ffi_srcdir, 'powerpc')] + ext.include_dirs.extend(include_dirs) + ext.sources.extend(sources) + return True + def configure_ctypes(self, ext): if not self.use_system_libffi: - (srcdir,) = sysconfig.get_config_vars('srcdir') + if sys.platform == 'darwin': + return self.configure_ctypes_darwin(ext) + + srcdir = sysconfig.get_config_var('srcdir') ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', '_ctypes', 'libffi')) @@ -1347,7 +1383,10 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = [arg for arg in sysconfig.get_config_var("CONFIG_ARGS").split() + if (('--host=' in arg) or ('--build=' in arg))] + if not self.verbose: + config_args.append("-q") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. @@ -1367,10 +1406,12 @@ class PyBuildExt(build_ext): self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), - ffi_builddir, ffi_srcdir] + ffi_builddir, + os.path.join(ffi_srcdir, 'src')] extra_compile_args = fficonfig['ffi_cflags'].split() - ext.sources.extend(fficonfig['ffi_sources']) + ext.sources.extend(os.path.join(ffi_srcdir, f) for f in + fficonfig['ffi_sources']) ext.include_dirs.extend(include_dirs) ext.extra_compile_args.extend(extra_compile_args) return True @@ -1390,6 +1431,7 @@ class PyBuildExt(build_ext): if sys.platform == 'darwin': sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') # XXX Is this still needed? ## extra_link_args.extend(['-read_only_relocs', 'warning']) @@ -1419,7 +1461,14 @@ class PyBuildExt(build_ext): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = find_file('ffi.h', [], inc_dirs) + if sys.platform == 'darwin': + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + if not ffi_inc or ffi_inc[0] == '': + ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' fp = open(ffi_h) 005_osx_failed_modules.patch000066400000000000000000000076331476513315000335670ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.0/Python-2.5diff -r -u ./Mac/Modules/cg/_CGmodule.c ./Mac/Modules/cg/_CGmodule.c index 8115614..e36fce9 100755 --- ./Mac/Modules/cg/_CGmodule.c +++ ./Mac/Modules/cg/_CGmodule.c @@ -1025,6 +1025,7 @@ static PyObject *CGContextRefObj_CGContextSetShouldAntialias(CGContextRefObject return _res; } +#ifndef __LP64__ static PyObject *CGContextRefObj_SyncCGContextOriginWithPort(CGContextRefObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1055,6 +1056,7 @@ static PyObject *CGContextRefObj_ClipCGContextToRegion(CGContextRefObject *_self _res = Py_None; return _res; } +#endif static PyMethodDef CGContextRefObj_methods[] = { {"CGContextSaveGState", (PyCFunction)CGContextRefObj_CGContextSaveGState, 1, @@ -1173,10 +1175,12 @@ static PyMethodDef CGContextRefObj_methods[] = { PyDoc_STR("() -> None")}, {"CGContextSetShouldAntialias", (PyCFunction)CGContextRefObj_CGContextSetShouldAntialias, 1, PyDoc_STR("(int shouldAntialias) -> None")}, +#ifndef __LP64__ {"SyncCGContextOriginWithPort", (PyCFunction)CGContextRefObj_SyncCGContextOriginWithPort, 1, PyDoc_STR("(CGrafPtr port) -> None")}, {"ClipCGContextToRegion", (PyCFunction)CGContextRefObj_ClipCGContextToRegion, 1, PyDoc_STR("(Rect portRect, RgnHandle region) -> None")}, +#endif {NULL, NULL, 0} }; @@ -1254,6 +1258,7 @@ PyTypeObject CGContextRef_Type = { /* ------------------ End object type CGContextRef ------------------ */ +#ifndef __LP64__ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1271,10 +1276,13 @@ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) return _res; } +#endif static PyMethodDef CG_methods[] = { +#ifndef __LP64__ {"CreateCGContextForPort", (PyCFunction)CG_CreateCGContextForPort, 1, PyDoc_STR("(CGrafPtr) -> CGContextRef")}, +#endif {NULL, NULL, 0} }; diff -r -u ./Modules/_curses_panel.c ./Modules/_curses_panel.c index 0acf3fd..1728b59 100644 --- ./Modules/_curses_panel.c +++ ./Modules/_curses_panel.c @@ -56,7 +56,7 @@ typedef struct { PyTypeObject PyCursesPanel_Type; -#define PyCursesPanel_Check(v) ((v)->ob_type == &PyCursesPanel_Type) +#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type) /* Some helper functions. The problem is that there's always a window associated with a panel. To ensure that Python's GC doesn't pull @@ -178,12 +178,13 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo) po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); - return NULL; + po->wo = NULL; + Py_DECREF(po); + return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ static void PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } @@ -338,11 +341,10 @@ PyCursesPanel_GetAttr(PyCursesPanelObject *self, char *name) /* -------------------------------------------------------*/ PyTypeObject PyCursesPanel_Type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "_curses_panel.curses panel", /*tp_name*/ - sizeof(PyCursesPanelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + "_curses_panel.curses panel", /*tp_name*/ + sizeof(PyCursesPanelObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/ 0, /*tp_print*/ @@ -458,7 +460,7 @@ init_curses_panel(void) PyObject *m, *d, *v; /* Initialize object type */ - PyCursesPanel_Type.ob_type = &PyType_Type; + Py_TYPE(&PyCursesPanel_Type) = &PyType_Type; import_curses(); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/000077500000000000000000000000001476513315000246015ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/Python-2.5.1/000077500000000000000000000000001476513315000265235ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325420ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/Python-2.5.1--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-svnversion.patch000066400000000000000000000033321476513315000333570ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/Python-2.5.1diff -r -u ./Makefile.pre.in ../Python-2.5.1/Makefile.pre.in --- ./Makefile.pre.in 2006-12-09 05:46:13.000000000 +0900 +++ ../Python-2.5.1/Makefile.pre.in 2013-05-08 19:05:06.000000000 +0900 @@ -455,7 +455,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ diff -r -u ./Modules/getbuildinfo.c ../Python-2.5.1/Modules/getbuildinfo.c --- ./Modules/getbuildinfo.c 2006-01-18 18:13:51.000000000 +0900 +++ ../Python-2.5.1/Modules/getbuildinfo.c 2013-05-08 19:05:31.000000000 +0900 @@ -43,6 +43,6 @@ #ifdef SVNVERSION return SVNVERSION; #else - return "exported"; + return "Unversioned directory"; #endif } diff -r -u ./Python/sysmodule.c ../Python-2.5.1/Python/sysmodule.c --- ./Python/sysmodule.c 2007-04-16 15:12:02.000000000 +0900 +++ ../Python-2.5.1/Python/sysmodule.c 2013-05-08 19:05:49.000000000 +0900 @@ -1011,7 +1011,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); diff -r -u ./configure.in ../Python-2.5.1/configure.in --- ./configure.in 2007-03-12 19:50:51.000000000 +0900 +++ ../Python-2.5.1/configure.in 2013-05-08 19:04:36.000000000 +0900 @@ -691,7 +691,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in 002_darwin_c_source.patch000066400000000000000000000132671476513315000332250ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/Python-2.5.1diff -r -u ./configure ../Python-2.5/configure --- ./configure 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure 2013-07-19 15:27:46.000000000 +0900 @@ -1396,6 +1396,16 @@ _ACEOF +# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable +# them. + +cat >>confdefs.h <<\_ACEOF +#define _DARWIN_C_SOURCE 1 +_ACEOF + + + define_xopen_source=yes # Arguments passed to configure. @@ -3885,11 +3895,110 @@ ;; # is there any other compiler on Darwin besides gcc? Darwin*) - BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" + # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd + # used to be here, but non-Apple gcc doesn't accept them. + if test "${CC}" = gcc + then + { echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +echo -n "checking which compiler should be used... " >&6; } + case "${UNIVERSALSDK}" in + */MacOSX10.4u.sdk) + # Build using 10.4 SDK, force usage of gcc when the + # compiler is gcc, otherwise the user will get very + # confusing error messages when building on OSX 10.6 + CC=gcc-4.0 + CPP=cpp-4.0 + ;; + esac + { echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +echo "$CC" >&6; } + fi + + if test "${enable_universalsdk}"; then - BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + UNIVERSAL_ARCH_FLAGS="" + if test "$UNIVERSAL_ARCHS" = "32-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" + ARCH_RUN_32BIT="" + LIPO_32BIT_FLAGS="" + elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + + elif test "$UNIVERSAL_ARCHS" = "all" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + elif test "$UNIVERSAL_ARCHS" = "intel" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386" + + elif test "$UNIVERSAL_ARCHS" = "3-way" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + else + as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + + fi + + + CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}" + if test "${UNIVERSALSDK}" != "/" + then + CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}" + LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}" + CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}" + fi fi + # Calculate the right deployment target for this build. + # + cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` + if test ${cur_target} '>' 10.2 && \ + test ${cur_target} '<' 10.6 + then + cur_target=10.3 + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "3-way"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "intel"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then + cur_target='10.5' + fi + else + if test `/usr/bin/arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi + fi + CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} + + # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the + # environment with a value that is the same as what we'll use + # in the Makefile to ensure that we'll get the same compiler + # environment during configure and build time. + MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" + export MACOSX_DEPLOYMENT_TARGET + EXPORT_MACOSX_DEPLOYMENT_TARGET='' + ;; OSF*) BASECFLAGS="$BASECFLAGS -mieee" @@ -10851,7 +10960,7 @@ if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -10863,7 +10972,7 @@ else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac diff -r -u ./pyconfig.h.in ../Python-2.5/pyconfig.h.in --- ./pyconfig.h.in 2006-07-30 23:09:47.000000000 +0900 +++ ../Python-2.5/pyconfig.h.in 2013-07-17 23:12:31.000000000 +0900 @@ -912,6 +912,11 @@ /* Define on Irix to enable u_int */ #undef _BSD_TYPES +/* Define on Darwin to activate all library features */ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE +#endif + /* This must be set to 64 on some systems to enable large file support. */ #undef _FILE_OFFSET_BITS pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/Python-2.5.1/003_osx_lp64.patch000066400000000000000000000215441476513315000316120ustar00rootroot00000000000000diff -r -u ./Include/pymactoolbox.h ../Python-2.5/Include/pymactoolbox.h --- ./Include/pymactoolbox.h 2004-11-05 16:02:59.000000000 +0900 +++ ../Python-2.5/Include/pymactoolbox.h 2013-07-17 23:38:51.000000000 +0900 @@ -8,7 +8,10 @@ #endif #include + +#ifndef __LP64__ #include +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +21,11 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* __LP64__ */ + /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,8 +89,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +109,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +169,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +178,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); diff -r -u ./Mac/Modules/res/_Resmodule.c ../Python-2.5/Mac/Modules/res/_Resmodule.c --- ./Mac/Modules/res/_Resmodule.c 2005-07-04 05:59:44.000000000 +0900 +++ ../Python-2.5/Mac/Modules/res/_Resmodule.c 2013-07-17 23:38:51.000000000 +0900 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -1152,6 +1154,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1290,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1331,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1418,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1444,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1541,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* __LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1645,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1656,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1670,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* __LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* __LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, diff -r -u ./Modules/_ctypes/libffi/src/darwin/ffitarget.h ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h --- ./Modules/_ctypes/libffi/src/darwin/ffitarget.h 2006-05-26 06:58:05.000000000 +0900 +++ ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h 2013-07-17 23:38:51.000000000 +0900 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN diff -r -u ./Python/mactoolboxglue.c ../Python-2.5/Python/mactoolboxglue.c --- ./Python/mactoolboxglue.c 2006-07-12 01:44:25.000000000 +0900 +++ ../Python-2.5/Python/mactoolboxglue.c 2013-07-17 23:39:09.000000000 +0900 @@ -106,6 +106,7 @@ } +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +154,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +419,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +432,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/Python-2.5.1/004_osx_libffi.patch000066400000000000000000005661361476513315000322740ustar00rootroot00000000000000diff -r -u ./Modules/_ctypes/libffi_osx/LICENSE ./Modules/_ctypes/libffi_osx/LICENSE new file mode 100644 index 0000000..f591795 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/LICENSE @@ -0,0 +1,20 @@ +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff -r -u ./Modules/_ctypes/libffi_osx/README ./Modules/_ctypes/libffi_osx/README new file mode 100644 index 0000000..1fc2747 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README @@ -0,0 +1,500 @@ +This directory contains the libffi package, which is not part of GCC but +shipped with GCC as convenience. + +Status +====== + +libffi-2.00 has not been released yet! This is a development snapshot! + +libffi-1.20 was released on October 5, 1998. Check the libffi web +page for updates: . + + +What is libffi? +=============== + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. Libffi can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The libffi library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + +Ffi stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +libffi library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above libffi that handles type conversions for values passed +between the two languages. + + +Supported Platforms and Prerequisites +===================================== + +Libffi has been ported to: + + SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) + + Irix 5.3 & 6.2 (System V/o32 & n32) + + Intel x86 - Linux (System V ABI) + + Alpha - Linux and OSF/1 + + m68k - Linux (System V ABI) + + PowerPC - Linux (System V ABI, Darwin, AIX) + + ARM - Linux (System V ABI) + +Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are +that other versions will work. Libffi has also been built and tested +with the SGI compiler tools. + +On PowerPC, the tests failed (see the note below). + +You must use GNU make to build libffi. SGI's make will not work. +Sun's probably won't either. + +If you port libffi to another platform, please let me know! I assume +that some will be easy (x86 NetBSD), and others will be more difficult +(HP). + + +Installing libffi +================= + +[Note: before actually performing any of these installation steps, + you may wish to read the "Platform Specific Notes" below.] + +First you must configure the distribution for your particular +system. Go to the directory you wish to build libffi in and run the +"configure" program found in the root directory of the libffi source +distribution. + +You may want to tell configure where to install the libffi library and +header files. To do that, use the --prefix configure switch. Libffi +will install under /usr/local by default. + +If you want to enable extra run-time debugging checks use the the +--enable-debug configure switch. This is useful when your program dies +mysteriously while using libffi. + +Another useful configure switch is --enable-purify-safety. Using this +will add some extra code which will suppress certain warnings when you +are using Purify with libffi. Only use this switch when using +Purify, as it will slow down the library. + +Configure has many other options. Use "configure --help" to see them all. + +Once configure has finished, type "make". Note that you must be using +GNU make. SGI's make will not work. Sun's probably won't either. +You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. + +To ensure that libffi is working as advertised, type "make test". + +To install the library and header files, type "make install". + + +Using libffi +============ + + The Basics + ---------- + +Libffi assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, +as well as the return type of the function. + +The first thing you must do is create an ffi_cif object that matches +the signature of the function you wish to call. The cif in ffi_cif +stands for Call InterFace. To prepare a call interface object, use the +following function: + +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, ffi_type **atypes); + + CIF is a pointer to the call interface object you wish + to initialize. + + ABI is an enum that specifies the calling convention + to use for the call. FFI_DEFAULT_ABI defaults + to the system's native calling convention. Other + ABI's may be used with care. They are system + specific. + + NARGS is the number of arguments this function accepts. + libffi does not yet support vararg functions. + + RTYPE is a pointer to an ffi_type structure that represents + the return type of the function. Ffi_type objects + describe the types of values. libffi provides + ffi_type objects for many of the native C types: + signed int, unsigned int, signed char, unsigned char, + etc. There is also a pointer ffi_type object and + a void ffi_type. Use &ffi_type_void for functions that + don't return values. + + ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. + If NARGS is 0, this is ignored. + + +ffi_prep_cif will return a status code that you are responsible +for checking. It will be one of the following: + + FFI_OK - All is good. + + FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif + came across is bad. + + +Before making the call, the VALUES vector should be initialized +with pointers to the appropriate argument values. + +To call the function using the initialized ffi_cif, use the +ffi_call function: + +void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); + + CIF is a pointer to the ffi_cif initialized specifically + for this function. + + FN is a pointer to the function you want to call. + + RVALUE is a pointer to a chunk of memory that is to hold the + result of the function call. Currently, it must be + at least one word in size (except for the n32 version + under Irix 6.x, which must be a pointer to an 8 byte + aligned value (a long long). It must also be at least + word aligned (depending on the return type, and the + system's alignment requirements). If RTYPE is + &ffi_type_void, this is ignored. If RVALUE is NULL, + the return value is discarded. + + AVALUES is a vector of void* that point to the memory locations + holding the argument values for a call. + If NARGS is 0, this is ignored. + + +If you are expecting a return value from FN it will have been stored +at RVALUE. + + + + An Example + ---------- + +Here is a trivial example that calls puts() a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_uint; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + + + Aggregate Types + --------------- + +Although libffi has no special support for unions or bit-fields, it is +perfectly happy passing structures back and forth. You must first +describe the structure to libffi by creating a new ffi_type object +for it. Here is the definition of ffi_type: + + typedef struct _ffi_type + { + unsigned size; + short alignment; + short type; + struct _ffi_type **elements; + } ffi_type; + +All structures must have type set to FFI_TYPE_STRUCT. You may set +size and alignment to 0. These will be calculated and reset to the +appropriate values by ffi_prep_cif(). + +elements is a NULL terminated array of pointers to ffi_type objects +that describe the type of the structure elements. These may, in turn, +be structure elements. + +The following example initializes a ffi_type object representing the +tm struct from Linux's time.h: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + + +Platform Specific Notes +======================= + + Intel x86 + --------- + +There are no known problems with the x86 port. + + Sun SPARC - SunOS 4.1.3 & Solaris 2.x + ------------------------------------- + +You must use GNU Make to build libffi on Sun platforms. + + MIPS - Irix 5.3 & 6.x + --------------------- + +Irix 6.2 and better supports three different calling conventions: o32, +n32 and n64. Currently, libffi only supports both o32 and n32 under +Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be +configured for whichever calling convention it was built for. + +By default, the configure script will try to build libffi with the GNU +development tools. To build libffi with the SGI development tools, set +the environment variable CC to either "cc -32" or "cc -n32" before +running configure under Irix 6.x (depending on whether you want an o32 +or n32 library), or just "cc" for Irix 5.3. + +With the n32 calling convention, when returning structures smaller +than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. +Here's one way of forcing this: + + double struct_storage[2]; + my_small_struct *s = (my_small_struct *) struct_storage; + /* Use s for RVALUE */ + +If you don't do this you are liable to get spurious bus errors. + +"long long" values are not supported yet. + +You must use GNU Make to build libffi on SGI platforms. + + ARM - System V ABI + ------------------ + +The ARM port was performed on a NetWinder running ARM Linux ELF +(2.0.31) and gcc 2.8.1. + + + + PowerPC System V ABI + -------------------- + +There are two `System V ABI's which libffi implements for PowerPC. +They differ only in how small structures are returned from functions. + +In the FFI_SYSV version, structures that are 8 bytes or smaller are +returned in registers. This is what GCC does when it is configured +for solaris, and is what the System V ABI I have (dated September +1995) says. + +In the FFI_GCC_SYSV version, all structures are returned the same way: +by passing a pointer as the first argument to the function. This is +what GCC does when it is configured for linux or a generic sysv +target. + +EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a +inconsistency with the SysV ABI: When a procedure is called with many +floating-point arguments, some of them get put on the stack. They are +all supposed to be stored in double-precision format, even if they are +only single-precision, but EGCS stores single-precision arguments as +single-precision anyway. This causes one test to fail (the `many +arguments' test). + + +What's With The Crazy Comments? +=============================== + +You might notice a number of cryptic comments in the code, delimited +by /*@ and @*/. These are annotations read by the program LCLint, a +tool for statically checking C programs. You can read all about it at +. + + +History +======= + +1.20 Oct-5-98 + Raffaele Sena produces ARM port. + +1.19 Oct-5-98 + Fixed x86 long double and long long return support. + m68k bug fixes from Andreas Schwab. + Patch for DU assembler compatibility for the Alpha from Richard + Henderson. + +1.18 Apr-17-98 + Bug fixes and MIPS configuration changes. + +1.17 Feb-24-98 + Bug fixes and m68k port from Andreas Schwab. PowerPC port from + Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + +1.16 Feb-11-98 + Richard Henderson produces Alpha port. + +1.15 Dec-4-97 + Fixed an n32 ABI bug. New libtool, auto* support. + +1.14 May-13-97 + libtool is now used to generate shared and static libraries. + Fixed a minor portability problem reported by Russ McManus + . + +1.13 Dec-2-96 + Added --enable-purify-safety to keep Purify from complaining + about certain low level code. + Sparc fix for calling functions with < 6 args. + Linux x86 a.out fix. + +1.12 Nov-22-96 + Added missing ffi_type_void, needed for supporting void return + types. Fixed test case for non MIPS machines. Cygnus Support + is now Cygnus Solutions. + +1.11 Oct-30-96 + Added notes about GNU make. + +1.10 Oct-29-96 + Added configuration fix for non GNU compilers. + +1.09 Oct-29-96 + Added --enable-debug configure switch. Clean-ups based on LCLint + feedback. ffi_mips.h is always installed. Many configuration + fixes. Fixed ffitest.c for sparc builds. + +1.08 Oct-15-96 + Fixed n32 problem. Many clean-ups. + +1.07 Oct-14-96 + Gordon Irlam rewrites v8.S again. Bug fixes. + +1.06 Oct-14-96 + Gordon Irlam improved the sparc port. + +1.05 Oct-14-96 + Interface changes based on feedback. + +1.04 Oct-11-96 + Sparc port complete (modulo struct passing bug). + +1.03 Oct-10-96 + Passing struct args, and returning struct values works for + all architectures/calling conventions. Expanded tests. + +1.02 Oct-9-96 + Added SGI n32 support. Fixed bugs in both o32 and Linux support. + Added "make test". + +1.01 Oct-8-96 + Fixed float passing bug in mips version. Restructured some + of the code. Builds cleanly with SGI tools. + +1.00 Oct-7-96 + First release. No public announcement. + + +Authors & Credits +================= + +libffi was written by Anthony Green . + +Portions of libffi were derived from Gianni Mariani's free gencall +library for Silicon Graphics machines. + +The closure mechanism was designed and implemented by Kresten Krab +Thorup. + +The Sparc port was derived from code contributed by the fine folks at +Visible Decisions Inc . Further enhancements were +made by Gordon Irlam at Cygnus Solutions . + +The Alpha port was written by Richard Henderson at Cygnus Solutions. + +Andreas Schwab ported libffi to m68k Linux and provided a number of +bug fixes. + +Geoffrey Keating ported libffi to the PowerPC. + +Raffaele Sena ported libffi to the ARM. + +Jesper Skov and Andrew Haley both did more than their fair share of +stepping through the code and tracking down bugs. + +Thanks also to Tom Tromey for bug fixes and configuration help. + +Thanks to Jim Blandy, who provided some useful feedback on the libffi +interface. + +If you have a problem, or have found a bug, please send a note to +green@cygnus.com. diff -r -u ./Modules/_ctypes/libffi_osx/README.pyobjc ./Modules/_ctypes/libffi_osx/README.pyobjc new file mode 100644 index 0000000..405d85f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README.pyobjc @@ -0,0 +1,5 @@ +This directory contains a slightly modified version of libffi, extracted from +the GCC source-tree. + +The only modifications are those that are necessary to compile libffi using +the Apple provided compiler and outside of the GCC source tree. diff -r -u ./Modules/_ctypes/libffi_osx/ffi.c ./Modules/_ctypes/libffi_osx/ffi.c new file mode 100644 index 0000000..bf42093 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/ffi.c @@ -0,0 +1,226 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +/* Round up to FFI_SIZEOF_ARG. */ +#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + +/* Perform machine independent initialization of aggregate type + specifications. */ + +static ffi_status +initialize_aggregate( +/*@out@*/ ffi_type* arg) +{ +/*@-usedef@*/ + + if (arg == NULL || arg->elements == NULL || + arg->size != 0 || arg->alignment != 0) + return FFI_BAD_TYPEDEF; + + ffi_type** ptr = &(arg->elements[0]); + + while ((*ptr) != NULL) + { + if (((*ptr)->size == 0) && (initialize_aggregate(*ptr) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#ifdef POWERPC_DARWIN + int curalign = (*ptr)->alignment; + + if (ptr != &(arg->elements[0])) + { + if (curalign > 4 && curalign != 16) + curalign = 4; + } + + arg->size = ALIGN(arg->size, curalign); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > curalign) ? + arg->alignment : curalign; +#else + arg->size = ALIGN(arg->size, (*ptr)->alignment); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > (*ptr)->alignment) ? + arg->alignment : (*ptr)->alignment; +#endif + + ptr++; + } + + /* Structure size includes tail padding. This is important for + structures that fit in one register on ABIs like the PowerPC64 + Linux ABI that right justify small structs in a register. + It's also needed for nested structure layout, for example + struct A { long a; char b; }; struct B { struct A x; char y; }; + should find y at an offset of 2*sizeof(long) and result in a + total size of 3*sizeof(long). */ + arg->size = ALIGN(arg->size, arg->alignment); + + if (arg->size == 0) + return FFI_BAD_TYPEDEF; + + return FFI_OK; + +/*@=usedef@*/ +} + +#ifndef __CRIS__ +/* The CRIS ABI specifies structure elements to have byte + alignment only, so it completely overrides this functions, + which assumes "natural" alignment and padding. */ + +/* Perform machine independent ffi_cif preparation, then call + machine dependent routine. */ + +#if defined(X86_DARWIN) + +static inline bool +struct_on_stack( + int size) +{ + if (size > 8) + return true; + + /* This is not what the ABI says, but is what is really implemented */ + switch (size) + { + case 1: + case 2: + case 4: + case 8: + return false; + + default: + return true; + } +} + +#endif // defined(X86_DARWIN) + +// Arguments' ffi_type->alignment must be nonzero. +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes) +{ + if (cif == NULL) + return FFI_BAD_TYPEDEF; + + if (abi <= FFI_FIRST_ABI || abi > FFI_DEFAULT_ABI) + return FFI_BAD_ABI; + + unsigned int bytes = 0; + unsigned int i; + ffi_type** ptr; + + cif->abi = abi; + cif->arg_types = atypes; + cif->nargs = nargs; + cif->rtype = rtype; + cif->flags = 0; + + /* Initialize the return type if necessary */ + /*@-usedef@*/ + if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) + return FFI_BAD_TYPEDEF; + /*@=usedef@*/ + + /* Perform a sanity check on the return type */ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT +#ifdef SPARC + && (cif->abi != FFI_V9 || cif->rtype->size > 32) +#endif +#ifdef X86_DARWIN + && (struct_on_stack(cif->rtype->size)) +#endif + ) + bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + /* Initialize any uninitialized aggregate type definitions */ + if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + if ((*ptr)->alignment == 0) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type, do this + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#if defined(X86_DARWIN) + { + int align = (*ptr)->alignment; + + if (align > 4) + align = 4; + + if ((align - 1) & bytes) + bytes = ALIGN(bytes, align); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#elif !defined __x86_64__ && !defined S390 && !defined PA +#ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) + || ((*ptr)->type == FFI_TYPE_LONGDOUBLE + && cif->abi != FFI_V9)) + bytes += sizeof(void*); + else +#endif + { + /* Add any padding if necessary */ + if (((*ptr)->alignment - 1) & bytes) + bytes = ALIGN(bytes, (*ptr)->alignment); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#endif + } + + cif->bytes = bytes; + + /* Perform machine dependent cif processing */ + return ffi_prep_cif_machdep(cif); +} +#endif /* not __CRIS__ */ diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi.h ./Modules/_ctypes/libffi_osx/include/ffi.h new file mode 100644 index 0000000..c104a5c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi.h @@ -0,0 +1,355 @@ +/* -----------------------------------------------------------------*-C-*- + libffi PyOBJC - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and closure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifdef MACOSX +# if defined(__i386__) || defined(__x86_64__) +# define X86_DARWIN +# elif defined(__ppc__) || defined(__ppc64__) +# define POWERPC_DARWIN +# else +# error "Unsupported MacOS X CPU type" +# endif +#else +#error "Unsupported OS type" +#endif + +/* ---- System configuration information --------------------------------- */ + +#include "ffitarget.h" +#include "fficonfig.h" + +#ifndef LIBFFI_ASM + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# endif +#endif + +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +#error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +#error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +#error "int size not supported" +#endif + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != 9223372036854775807 +# error "no 64-bit data type supported" +# endif +#elif LONG_MAX != 9223372036854775807 +#error "long size not supported" +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t + can hold a pointer. */ + +typedef struct _ffi_type { + size_t size; + unsigned short alignment; + unsigned short type; +/*@null@*/ struct _ffi_type** elements; +} ffi_type; + +/* These are defined in types.c */ +extern ffi_type ffi_type_void; +extern ffi_type ffi_type_uint8; +extern ffi_type ffi_type_sint8; +extern ffi_type ffi_type_uint16; +extern ffi_type ffi_type_sint16; +extern ffi_type ffi_type_uint32; +extern ffi_type ffi_type_sint32; +extern ffi_type ffi_type_uint64; +extern ffi_type ffi_type_sint64; +extern ffi_type ffi_type_float; +extern ffi_type ffi_type_double; +extern ffi_type ffi_type_longdouble; +extern ffi_type ffi_type_pointer; + +typedef enum ffi_status { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct ffi_cif { + ffi_abi abi; + unsigned nargs; +/*@dependent@*/ ffi_type** arg_types; +/*@dependent@*/ ffi_type* rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +void +ffi_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_raw_size( + ffi_cif* cif); + +/* This is analogous to the raw API, except it uses Java parameter + packing, even on 64-bit machines. I.e. on 64-bit machines + longs and doubles are followed by an empty 64-bit word. */ +void +ffi_java_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_java_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_java_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_java_raw_size( + ffi_cif* cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +typedef struct ffi_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void* user_data; +} ffi_closure; + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void* user_data); + +void ffi_closure_free(void *); +void *ffi_closure_alloc (size_t size, void **code); + +typedef struct ffi_raw_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + +#if !FFI_NATIVE_RAW_API + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + void (*translate_args)(ffi_cif*,void*,void**,void*); + void* this_closure; +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void* user_data; +} ffi_raw_closure; + +ffi_status +ffi_prep_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +ffi_status +ffi_prep_java_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +#endif // FFI_CLOSURES + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes); + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +#endif // #ifndef LIBFFI_ASM +/* ---- Definitions shared with assembly code ---------------------------- */ + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 + +#ifdef HAVE_LONG_DOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#else +# define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif + +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_POINTER + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef LIBFFI_H diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi_common.h ./Modules/_ctypes/libffi_osx/include/ffi_common.h new file mode 100644 index 0000000..685a358 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi_common.h @@ -0,0 +1,102 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fficonfig.h" + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char* alloca(); +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy((s), (d), (n)) +# endif +#endif + +/*#if defined(FFI_DEBUG) +#include +#endif*/ + +#ifdef FFI_DEBUG +#include + +/*@exits@*/ void +ffi_assert( +/*@temp@*/ char* expr, +/*@temp@*/ char* file, + int line); +void +ffi_stop_here(void); +void +ffi_type_test( +/*@temp@*/ /*@out@*/ ffi_type* a, +/*@temp@*/ char* file, + int line); + +# define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +# define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +# define FFI_ASSERT_VALID_TYPE(x) ffi_type_test(x, __FILE__, __LINE__) +#else +# define FFI_ASSERT(x) +# define FFI_ASSERT_AT(x, f, l) +# define FFI_ASSERT_VALID_TYPE(x) +#endif // #ifdef FFI_DEBUG + +#define ALIGN(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) + +/* Perform machine dependent cif processing */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif); + +/* Extended cif, used in callback from assembly routine */ +typedef struct extended_cif { +/*@dependent@*/ ffi_cif* cif; +/*@dependent@*/ void* rvalue; +/*@dependent@*/ void** avalue; +} extended_cif; + +/* Terse sized type definitions. */ +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +typedef float FLOAT32; + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef FFI_COMMON_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/fficonfig.h ./Modules/_ctypes/libffi_osx/include/fficonfig.h new file mode 100644 index 0000000..2172490 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/fficonfig.h @@ -0,0 +1,150 @@ +/* Manually created fficonfig.h for Darwin on PowerPC or Intel + + This file is manually generated to do away with the need for autoconf and + therefore make it easier to cross-compile and build fat binaries. + + NOTE: This file was added by PyObjC. +*/ + +#ifndef MACOSX +#error "This file is only supported on Mac OS X" +#endif + +#if defined(__i386__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__x86_64__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__ppc__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# if __GNUC__ >= 4 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 +# else +# undef HAVE_LONG_DOUBLE +# define SIZEOF_LONG_DOUBLE 8 +# endif + +#elif defined(__ppc64__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#else +#error "Unknown CPU type" +#endif + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "aw" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Define this is you do not want support for the raw API. */ +#define FFI_NO_RAW_API 1 + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +/* #undef HAVE_MMAP_DEV_ZERO */ + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +/* #undef HAVE_RO_EH_FRAME */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://gcc.gnu.org/bugs.html" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.1" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if you are using Purify and want to suppress spurious messages. */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "2.1-pyobjc" + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) .hidden name +# else +# define FFI_HIDDEN __attribute__((visibility ("hidden"))) +# endif +#else +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) +# else +# define FFI_HIDDEN +# endif +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ffitarget.h ./Modules/_ctypes/libffi_osx/include/ffitarget.h new file mode 100644 index 0000000..faaa30d --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffitarget.h @@ -0,0 +1,13 @@ +/* Dispatch to the right ffitarget file. This file is PyObjC specific; in a + normal build, the build environment copies the file to the right location or + sets up the right include flags. We want to do neither because that would + make building fat binaries harder. +*/ + +#if defined(__i386__) || defined(__x86_64__) +#include "x86-ffitarget.h" +#elif defined(__ppc__) || defined(__ppc64__) +#include "ppc-ffitarget.h" +#else +#error "Unsupported CPU type" +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h new file mode 100644 index 0000000..2318421 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h @@ -0,0 +1,104 @@ +/* -----------------------------------------------------------------*-C-*- + ppc-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if (defined(POWERPC) && defined(__powerpc64__)) || \ + (defined(POWERPC_DARWIN) && defined(__ppc64__)) +#define POWERPC64 +#endif + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef POWERPC + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, +# ifdef POWERPC64 + FFI_DEFAULT_ABI = FFI_LINUX64, +# else + FFI_DEFAULT_ABI = FFI_GCC_SYSV, +# endif +#endif + +#ifdef POWERPC_AIX + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_AIX, +#endif + +#ifdef POWERPC_DARWIN + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_DARWIN, +#endif + +#ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_NATIVE_RAW_API 0 + +/* Needed for FFI_SYSV small structure returns. */ +#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + +#if defined(POWERPC64) /*|| defined(POWERPC_AIX)*/ +# define FFI_TRAMPOLINE_SIZE 48 +#elif defined(POWERPC_AIX) +# define FFI_TRAMPOLINE_SIZE 24 +#else +# define FFI_TRAMPOLINE_SIZE 40 +#endif + +#ifndef LIBFFI_ASM +# if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) +typedef struct ffi_aix_trampoline_struct { + void* code_pointer; /* Pointer to ffi_closure_ASM */ + void* toc; /* TOC */ + void* static_chain; /* Pointer to closure */ +} ffi_aix_trampoline_struct; +# endif +#endif // #ifndef LIBFFI_ASM + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h new file mode 100644 index 0000000..55c2b6c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h @@ -0,0 +1,88 @@ +/* -----------------------------------------------------------------*-C-*- + x86-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if defined(X86_64) && defined(__i386__) +# undef X86_64 +# define X86 +#endif + +#if defined(__x86_64__) +# ifndef X86_64 +# define X86_64 +# endif +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + + /* ---- Intel x86 Win32 ---------- */ +#ifdef X86_WIN32 + FFI_SYSV, + FFI_STDCALL, + /* TODO: Add fastcall support for the sake of completeness */ + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + /* ---- Intel x86 and AMD x86-64 - */ +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) + FFI_SYSV, + FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ +# ifdef __i386__ + FFI_DEFAULT_ABI = FFI_SYSV, +# else + FFI_DEFAULT_ABI = FFI_UNIX64, +# endif +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 + +#if defined(X86_64) || (defined(__x86_64__) && defined(X86_DARWIN)) +# define FFI_TRAMPOLINE_SIZE 24 +# define FFI_NATIVE_RAW_API 0 +#else +# define FFI_TRAMPOLINE_SIZE 10 +# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S new file mode 100644 index 0000000..f143dbd --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S @@ -0,0 +1,365 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc-darwin.S - Copyright (c) 2000 John Hornkvist + Copyright (c) 2004 Free Software Foundation, Inc. + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include +#include +#include + +.text + .align 2 +.globl _ffi_prep_args + +.text + .align 2 +.globl _ffi_call_DARWIN + +.text + .align 2 +_ffi_call_DARWIN: +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved. */ + +LFB1: + /* Save the old stack pointer as AP. */ + mr r8,r1 + +LCFI0: +#if defined(__ppc64__) + /* Allocate the stack space we need. + r4 (size of input data) + 48 bytes (linkage area) + 40 bytes (saved registers) + 8 bytes (extra FPR) + r4 + 96 bytes total + */ + + addi r4,r4,-96 // Add our overhead. + li r0,-32 // Align to 32 bytes. + and r4,r4,r0 +#endif + stgux r1,r1,r4 // Grow the stack. + mflr r9 + + /* Save registers we use. */ +#if defined(__ppc64__) + std r27,-40(r8) +#endif + stg r28,MODE_CHOICE(-16,-32)(r8) + stg r29,MODE_CHOICE(-12,-24)(r8) + stg r30,MODE_CHOICE(-8,-16)(r8) + stg r31,MODE_CHOICE(-4,-8)(r8) + stg r9,SF_RETURN(r8) /* return address */ +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + stg r2,MODE_CHOICE(20,40)(r1) +#endif + +LCFI1: +#if defined(__ppc64__) + mr r27,r3 // our extended_cif +#endif + /* Save arguments over call. */ + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ + +LCFI2: + /* Call ffi_prep_args. */ + mr r4,r1 + li r9,0 + mtctr r12 /* r12 holds address of _ffi_prep_args. */ + bctrl +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + lg r2,MODE_CHOICE(20,40)(r1) +#endif + + /* Now do the call. + Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40,r31 + + /* Load all those argument registers. + We have set up a nice stack frame, just load it into registers. */ + lg r3,SF_ARG1(r1) + lg r4,SF_ARG2(r1) + lg r5,SF_ARG3(r1) + lg r6,SF_ARG4(r1) + nop + lg r7,SF_ARG5(r1) + lg r8,SF_ARG6(r1) + lg r9,SF_ARG7(r1) + lg r10,SF_ARG8(r1) + + /* Load all the FP registers. */ + bf 6,L2 /* No floats to load. */ +#if defined(__ppc64__) + lfd f1,MODE_CHOICE(-16,-40)-(14*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(11*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(10*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(7*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(6*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(3*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(2*8)(r28) + lfd f14,MODE_CHOICE(-16,-40)-(1*8)(r28) +#elif defined(__ppc__) + lfd f1,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(11*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(10*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(7*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(6*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(3*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(2*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(1*8)(r28) +#else +#error undefined architecture +#endif + +L2: + mr r12,r29 // Put the target address in r12 as specified. + mtctr r12 // Get the address to call into CTR. + nop + nop + bctrl // Make the call. + + // Deal with the return value. +#if defined(__ppc64__) + mtcrf 0x3,r31 // flags in cr6 and cr7 + bt 27,L(st_return_value) +#elif defined(__ppc__) + mtcrf 0x1,r31 // flags in cr7 +#else +#error undefined architecture +#endif + + bt 30,L(done_return_value) + bt 29,L(fp_return_value) + stg r3,0(r30) +#if defined(__ppc__) + bf 28,L(done_return_value) // Store the second long if necessary. + stg r4,4(r30) +#endif + // Fall through + +L(done_return_value): + lg r1,0(r1) // Restore stack pointer. + // Restore the registers we used. + lg r9,SF_RETURN(r1) // return address + lg r31,MODE_CHOICE(-4,-8)(r1) + mtlr r9 + lg r30,MODE_CHOICE(-8,-16)(r1) + lg r29,MODE_CHOICE(-12,-24)(r1) + lg r28,MODE_CHOICE(-16,-32)(r1) +#if defined(__ppc64__) + ld r27,-40(r1) +#endif + blr + +#if defined(__ppc64__) +L(st_return_value): + // Grow the stack enough to fit the registers. Leave room for 8 args + // to trample the 1st 8 slots in param area. + stgu r1,-SF_ROUND(280)(r1) // 64 + 104 + 48 + 64 + + // Store GPRs + std r3,SF_ARG9(r1) + std r4,SF_ARG10(r1) + std r5,SF_ARG11(r1) + std r6,SF_ARG12(r1) + nop + std r7,SF_ARG13(r1) + std r8,SF_ARG14(r1) + std r9,SF_ARG15(r1) + std r10,SF_ARG16(r1) + + // Store FPRs + nop + bf 26,L(call_struct_to_ram_form) + stfd f1,SF_ARG17(r1) + stfd f2,SF_ARG18(r1) + stfd f3,SF_ARG19(r1) + stfd f4,SF_ARG20(r1) + nop + stfd f5,SF_ARG21(r1) + stfd f6,SF_ARG22(r1) + stfd f7,SF_ARG23(r1) + stfd f8,SF_ARG24(r1) + nop + stfd f9,SF_ARG25(r1) + stfd f10,SF_ARG26(r1) + stfd f11,SF_ARG27(r1) + stfd f12,SF_ARG28(r1) + nop + stfd f13,SF_ARG29(r1) + +L(call_struct_to_ram_form): + ld r3,0(r27) // extended_cif->cif* + ld r3,16(r3) // ffi_cif->rtype* + addi r4,r1,SF_ARG9 // stored GPRs + addi r6,r1,SF_ARG17 // stored FPRs + li r5,0 // GPR size ptr (NULL) + li r7,0 // FPR size ptr (NULL) + li r8,0 // FPR count ptr (NULL) + li r10,0 // struct offset (NULL) + mr r9,r30 // return area + bl Lffi64_struct_to_ram_form$stub + lg r1,0(r1) // Restore stack pointer. + b L(done_return_value) +#endif + +L(fp_return_value): + /* Do we have long double to store? */ + bf 31,L(fd_return_value) + stfd f1,0(r30) + stfd f2,8(r30) + b L(done_return_value) + +L(fd_return_value): + /* Do we have double to store? */ + bf 28,L(float_return_value) + stfd f1,0(r30) + b L(done_return_value) + +L(float_return_value): + /* We only have a float to store. */ + stfs f1,0(r30) + b L(done_return_value) + +LFE1: +/* END(_ffi_call_DARWIN) */ + +/* Provide a null definition of _ffi_call_AIX. */ +.text + .align 2 +.globl _ffi_call_AIX +.text + .align 2 +_ffi_call_AIX: + blr +/* END(_ffi_call_AIX) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_call_DARWIN.eh +_ffi_call_DARWIN.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align LOG2_GPR_BYTES +LEFDE1: + +#if defined(__ppc64__) +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_ram_form$stub: + .indirect_symbol _ffi64_struct_to_ram_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_ram_form + +LO$ffi64_struct_to_ram_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_ram_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_ram_form + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ +#endif // __ppc__ || __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h new file mode 100644 index 0000000..cf4bd50 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h @@ -0,0 +1,85 @@ +/* ----------------------------------------------------------------------- + ppc-darwin.h - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define L(x) x + +#define SF_ARG9 MODE_CHOICE(56,112) +#define SF_ARG10 MODE_CHOICE(60,120) +#define SF_ARG11 MODE_CHOICE(64,128) +#define SF_ARG12 MODE_CHOICE(68,136) +#define SF_ARG13 MODE_CHOICE(72,144) +#define SF_ARG14 MODE_CHOICE(76,152) +#define SF_ARG15 MODE_CHOICE(80,160) +#define SF_ARG16 MODE_CHOICE(84,168) +#define SF_ARG17 MODE_CHOICE(88,176) +#define SF_ARG18 MODE_CHOICE(92,184) +#define SF_ARG19 MODE_CHOICE(96,192) +#define SF_ARG20 MODE_CHOICE(100,200) +#define SF_ARG21 MODE_CHOICE(104,208) +#define SF_ARG22 MODE_CHOICE(108,216) +#define SF_ARG23 MODE_CHOICE(112,224) +#define SF_ARG24 MODE_CHOICE(116,232) +#define SF_ARG25 MODE_CHOICE(120,240) +#define SF_ARG26 MODE_CHOICE(124,248) +#define SF_ARG27 MODE_CHOICE(128,256) +#define SF_ARG28 MODE_CHOICE(132,264) +#define SF_ARG29 MODE_CHOICE(136,272) + +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 +#define NUM_FPR_ARG_REGISTERS 13 + +#define FFI_TYPE_1_BYTE(x) ((x) == FFI_TYPE_UINT8 || (x) == FFI_TYPE_SINT8) +#define FFI_TYPE_2_BYTE(x) ((x) == FFI_TYPE_UINT16 || (x) == FFI_TYPE_SINT16) +#define FFI_TYPE_4_BYTE(x) \ + ((x) == FFI_TYPE_UINT32 || (x) == FFI_TYPE_SINT32 ||\ + (x) == FFI_TYPE_INT || (x) == FFI_TYPE_FLOAT) + +#if !defined(LIBFFI_ASM) + +enum { + FLAG_RETURNS_NOTHING = 1 << (31 - 30), // cr7 + FLAG_RETURNS_FP = 1 << (31 - 29), + FLAG_RETURNS_64BITS = 1 << (31 - 28), + FLAG_RETURNS_128BITS = 1 << (31 - 31), + + FLAG_RETURNS_STRUCT = 1 << (31 - 27), // cr6 + FLAG_STRUCT_CONTAINS_FP = 1 << (31 - 26), + + FLAG_ARG_NEEDS_COPY = 1 << (31 - 7), + FLAG_FP_ARGUMENTS = 1 << (31 - 6), // cr1.eq; specified by ABI + FLAG_4_GPR_ARGUMENTS = 1 << (31 - 5), + FLAG_RETVAL_REFERENCE = 1 << (31 - 4) +}; + +#if defined(__ppc64__) +void ffi64_struct_to_ram_form(const ffi_type*, const char*, unsigned int*, + const char*, unsigned int*, unsigned int*, char*, unsigned int*); +void ffi64_struct_to_reg_form(const ffi_type*, const char*, unsigned int*, + unsigned int*, char*, unsigned int*, char*, unsigned int*); +bool ffi64_stret_needs_ptr(const ffi_type* inType, + unsigned short*, unsigned short*); +#endif + +#endif // !defined(LIBFFI_ASM) \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S new file mode 100644 index 0000000..c3d30c2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S @@ -0,0 +1,308 @@ +#if defined(__ppc__) + +/* ----------------------------------------------------------------------- + ppc-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 // Save return address + stg r0,SF_RETURN(r1) + +LCFI0: + /* 24/48 bytes (Linkage Area) + 32/64 bytes (outgoing parameter area, always reserved) + 104 bytes (13*8 from FPR) + 16/32 bytes (result) + 176/232 total bytes */ + + /* skip over caller save area and keep stack aligned to 16/32. */ + stgu r1,-SF_ROUND(176)(r1) + +LCFI1: + /* We want to build up an area for the parameters passed + in registers. (both floating point and integer) */ + + /* 176/256 bytes (callee stack frame aligned to 16/32) + 24/48 bytes (caller linkage area) + 200/304 (start of caller parameter area aligned to 4/8) + */ + + /* Save GPRs 3 - 10 (aligned to 4/8) + in the parents outgoing area. */ + stg r3,200(r1) + stg r4,204(r1) + stg r5,208(r1) + stg r6,212(r1) + stg r7,216(r1) + stg r8,220(r1) + stg r9,224(r1) + stg r10,228(r1) + + /* Save FPRs 1 - 13. (aligned to 8) */ + stfd f1,56(r1) + stfd f2,64(r1) + stfd f3,72(r1) + stfd f4,80(r1) + stfd f5,88(r1) + stfd f6,96(r1) + stfd f7,104(r1) + stfd f8,112(r1) + stfd f9,120(r1) + stfd f10,128(r1) + stfd f11,136(r1) + stfd f12,144(r1) + stfd f13,152(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,160 // result storage + addi r5,r1,200 // saved GPRs + addi r6,r1,56 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + /* Now r3 contains the return type. Use it to look up in a table + so we know how to deal with each type. */ + addi r5,r1,160 // Copy result storage pointer. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: +/* Each of the ret_typeX code fragments has to be exactly 16 bytes long + (4 instructions). For cache effectiveness we align to a 16 byte boundary + first. */ + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +/* case FFI_TYPE_VOID */ +Lret_type0: + b Lfinish + nop + nop + nop + +/* case FFI_TYPE_INT */ +Lret_type1: + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_FLOAT */ +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_DOUBLE */ +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_LONGDOUBLE */ +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +/* case FFI_TYPE_UINT8 */ +Lret_type5: + lbz r3,3(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT8 */ +Lret_type6: + lbz r3,3(r5) + extsb r3,r3 + b Lfinish + nop + +/* case FFI_TYPE_UINT16 */ +Lret_type7: + lhz r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT16 */ +Lret_type8: + lha r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT32 */ +Lret_type9: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT32 */ +Lret_type10: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT64 */ +Lret_type11: + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_SINT64 */ +Lret_type12: // same as Lret_type11 + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_STRUCT */ +Lret_type13: + b Lfinish + nop + nop + nop + +/* End 16-byte aligned cases */ +/* case FFI_TYPE_POINTER */ +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + // fall through + +/* case done */ +Lfinish: + addi r1,r1,SF_ROUND(176) // Restore stack pointer. + lg r0,SF_RETURN(r1) // Restore return address. + mtlr r0 // Restore link register. + blr + +/* END(ffi_closure_ASM) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + + +#endif // __ppc__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c new file mode 100644 index 0000000..8953d5f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c @@ -0,0 +1,1776 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1998 Geoffrey Keating + + PowerPC Foreign Function Interface + + Darwin ABI support (c) 2001 John Hornkvist + AIX ABI support (c) 2002 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include +#include +#include +#include + +#if 0 +#if defined(POWERPC_DARWIN) +#include // for sys_icache_invalidate() +#endif + +#else + +#pragma weak sys_icache_invalidate +extern void sys_icache_invalidate(void *start, size_t len); + +#endif + + +extern void ffi_closure_ASM(void); + +// The layout of a function descriptor. A C function pointer really +// points to one of these. +typedef struct aix_fd_struct { + void* code_pointer; + void* toc; +} aix_fd; + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments. + + The stack layout we want looks like this: + + | Return address from ffi_call_DARWIN | higher addresses + |--------------------------------------------| + | Previous backchain pointer 4/8 | stack pointer here + |--------------------------------------------|-\ <<< on entry to + | Saved r28-r31 (4/8)*4 | | ffi_call_DARWIN + |--------------------------------------------| | + | Parameters (at least 8*(4/8)=32/64) | | (176) +112 - +288 + |--------------------------------------------| | + | Space for GPR2 4/8 | | + |--------------------------------------------| | stack | + | Reserved (4/8)*2 | | grows | + |--------------------------------------------| | down V + | Space for callee's LR 4/8 | | + |--------------------------------------------| | lower addresses + | Saved CR 4/8 | | + |--------------------------------------------| | stack pointer here + | Current backchain pointer 4/8 | | during + |--------------------------------------------|-/ <<< ffi_call_DARWIN + + Note: ppc64 CR is saved in the low word of a long on the stack. +*/ + +/*@-exportheader@*/ +void +ffi_prep_args( + extended_cif* inEcif, + unsigned *const stack) +/*@=exportheader@*/ +{ + /* Copy the ecif to a local var so we can trample the arg. + BC note: test this with GP later for possible problems... */ + volatile extended_cif* ecif = inEcif; + + const unsigned bytes = ecif->cif->bytes; + const unsigned flags = ecif->cif->flags; + + /* Cast the stack arg from int* to long*. sizeof(long) == 4 in 32-bit mode + and 8 in 64-bit mode. */ + unsigned long *const longStack = (unsigned long *const)stack; + + /* 'stacktop' points at the previous backchain pointer. */ +#if defined(__ppc64__) + // In ppc-darwin.s, an extra 96 bytes is reserved for the linkage area, + // saved registers, and an extra FPR. + unsigned long *const stacktop = + (unsigned long *)(unsigned long)((char*)longStack + bytes + 96); +#elif defined(__ppc__) + unsigned long *const stacktop = longStack + (bytes / sizeof(long)); +#else +#error undefined architecture +#endif + + /* 'fpr_base' points at the space for fpr1, and grows upwards as + we use FPR registers. */ + double* fpr_base = (double*)(stacktop - ASM_NEEDS_REGISTERS) - + NUM_FPR_ARG_REGISTERS; + +#if defined(__ppc64__) + // 64-bit saves an extra register, and uses an extra FPR. Knock fpr_base + // down a couple pegs. + fpr_base -= 2; +#endif + + unsigned int fparg_count = 0; + + /* 'next_arg' grows up as we put parameters in it. */ + unsigned long* next_arg = longStack + 6; /* 6 reserved positions. */ + + int i; + double double_tmp; + void** p_argv = ecif->avalue; + unsigned long gprvalue; + ffi_type** ptr = ecif->cif->arg_types; + + /* Check that everything starts aligned properly. */ + FFI_ASSERT(stack == SF_ROUND(stack)); + FFI_ASSERT(stacktop == SF_ROUND(stacktop)); + FFI_ASSERT(bytes == SF_ROUND(bytes)); + + /* Deal with return values that are actually pass-by-reference. + Rule: + Return values are referenced by r3, so r4 is the first parameter. */ + + if (flags & FLAG_RETVAL_REFERENCE) + *next_arg++ = (unsigned long)(char*)ecif->rvalue; + + /* Now for the arguments. */ + for (i = ecif->cif->nargs; i > 0; i--, ptr++, p_argv++) + { + switch ((*ptr)->type) + { + /* If a floating-point parameter appears before all of the general- + purpose registers are filled, the corresponding GPRs that match + the size of the floating-point parameter are shadowed for the + benefit of vararg and pre-ANSI functions. */ + case FFI_TYPE_FLOAT: + double_tmp = *(float*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg++; + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + + case FFI_TYPE_DOUBLE: + double_tmp = *(double*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg += MODE_CHOICE(2,1); + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double*)fpr_base = *(long double*)*p_argv; +#elif defined(__ppc__) + if (fparg_count < NUM_FPR_ARG_REGISTERS - 1) + *(long double*)fpr_base = *(long double*)*p_argv; + else if (fparg_count == NUM_FPR_ARG_REGISTERS - 1) + *(double*)fpr_base = *(double*)*p_argv; +#else +#error undefined architecture +#endif + + *(long double*)next_arg = *(long double*)*p_argv; + fparg_count += 2; + fpr_base += 2; + next_arg += MODE_CHOICE(4,2); + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: +#if defined(__ppc64__) + gprvalue = *(long long*)*p_argv; + goto putgpr; +#elif defined(__ppc__) + *(long long*)next_arg = *(long long*)*p_argv; + next_arg += 2; + break; +#else +#error undefined architecture +#endif + + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT8: + gprvalue = *(unsigned char*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT8: + gprvalue = *(signed char*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT16: + gprvalue = *(unsigned short*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT16: + gprvalue = *(signed short*)*p_argv; + goto putgpr; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + + ffi64_struct_to_reg_form(*ptr, (char*)*p_argv, NULL, &fparg_count, + (char*)next_arg, &gprSize, (char*)fpr_base, &fprSize); + next_arg += gprSize / sizeof(long); + fpr_base += fprSize / sizeof(double); + +#elif defined(__ppc__) + char* dest_cpy = (char*)next_arg; + + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. + Structures with 3 byte in size are padded upwards. */ + unsigned size_al = (*ptr)->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + + if (ecif->cif->abi == FFI_DARWIN) + { + if (size_al < 3) + dest_cpy += 4 - size_al; + } + + memcpy((char*)dest_cpy, (char*)*p_argv, size_al); + next_arg += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + gprvalue = *(unsigned*)*p_argv; + +putgpr: + *next_arg++ = gprvalue; + break; + + default: + break; + } + } + + /* Check that we didn't overrun the stack... */ + //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); + //FFI_ASSERT((unsigned *)fpr_base + // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); + //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); +} + +#if defined(__ppc64__) + +bool +ffi64_struct_contains_fp( + const ffi_type* inType) +{ + bool containsFP = false; + unsigned int i; + + for (i = 0; inType->elements[i] != NULL && !containsFP; i++) + { + if (inType->elements[i]->type == FFI_TYPE_FLOAT || + inType->elements[i]->type == FFI_TYPE_DOUBLE || + inType->elements[i]->type == FFI_TYPE_LONGDOUBLE) + containsFP = true; + else if (inType->elements[i]->type == FFI_TYPE_STRUCT) + containsFP = ffi64_struct_contains_fp(inType->elements[i]); + } + + return containsFP; +} + +#endif // defined(__ppc64__) + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + /* All this is for the DARWIN ABI. */ + int i; + ffi_type** ptr; + int intarg_count = 0; + int fparg_count = 0; + unsigned int flags = 0; + unsigned int size_al = 0; + + /* All the machine-independent calculation of cif->bytes will be wrong. + Redo the calculation for DARWIN. */ + + /* Space for the frame pointer, callee's LR, CR, etc, and for + the asm's temp regs. */ + unsigned int bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long); + + /* Return value handling. The rules are as follows: + - 32-bit (or less) integer values are returned in gpr3; + - Structures of size <= 4 bytes also returned in gpr3; + - 64-bit integer values and structures between 5 and 8 bytes are + returned in gpr3 and gpr4; + - Single/double FP values are returned in fpr1; + - Long double FP (if not equivalent to double) values are returned in + fpr1 and fpr2; + - Larger structures values are allocated space and a pointer is passed + as the first argument. */ + switch (cif->rtype->type) + { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_DOUBLE: + flags |= FLAG_RETURNS_64BITS; + /* Fall through. */ + case FFI_TYPE_FLOAT: + flags |= FLAG_RETURNS_FP; + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + flags |= FLAG_RETURNS_64BITS; + break; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + + if (ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) + { + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + } + else + { + flags |= FLAG_RETURNS_STRUCT; + + if (ffi64_struct_contains_fp(cif->rtype)) + flags |= FLAG_STRUCT_CONTAINS_FP; + } + +#elif defined(__ppc__) + + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_VOID: + flags |= FLAG_RETURNS_NOTHING; + break; + + default: + /* Returns 32-bit integer, or similar. Nothing to do here. */ + break; + } + + /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the + first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest + goes on the stack. Structures are passed as a pointer to a copy of + the structure. Stuff on the stack needs to keep proper alignment. */ + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + switch ((*ptr)->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + fparg_count++; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + if (fparg_count > NUM_FPR_ARG_REGISTERS + && intarg_count % 2 != 0) + intarg_count++; + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + fparg_count += 2; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + + if ( +#if defined(__ppc64__) + fparg_count > NUM_FPR_ARG_REGISTERS + 1 +#elif defined(__ppc__) + fparg_count > NUM_FPR_ARG_REGISTERS +#else +#error undefined architecture +#endif + && intarg_count % 2 != 0) + intarg_count++; + + intarg_count += 2; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + /* 'long long' arguments are passed as two words, but + either both words must fit in registers or both go + on the stack. If they go on the stack, they must + be 8-byte-aligned. */ + if (intarg_count == NUM_GPR_ARG_REGISTERS - 1 + || (intarg_count >= NUM_GPR_ARG_REGISTERS + && intarg_count % 2 != 0)) + intarg_count++; + + intarg_count += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_STRUCT: + size_al = (*ptr)->size; + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + +#if defined(__ppc64__) + // Look for FP struct members. + unsigned int j; + + for (j = 0; (*ptr)->elements[j] != NULL; j++) + { + if ((*ptr)->elements[j]->type == FFI_TYPE_FLOAT || + (*ptr)->elements[j]->type == FFI_TYPE_DOUBLE) + { + fparg_count++; + + if (fparg_count > NUM_FPR_ARG_REGISTERS) + intarg_count++; + } + else if ((*ptr)->elements[j]->type == FFI_TYPE_LONGDOUBLE) + { + fparg_count += 2; + + if (fparg_count > NUM_FPR_ARG_REGISTERS + 1) + intarg_count += 2; + } + else + intarg_count++; + } +#elif defined(__ppc__) + intarg_count += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + + break; + + default: + /* Everything else is passed as a 4/8-byte word in a GPR, either + the object itself or a pointer to it. */ + intarg_count++; + break; + } + } + + /* Space for the FPR registers, if needed. */ + if (fparg_count != 0) + { + flags |= FLAG_FP_ARGUMENTS; +#if defined(__ppc64__) + bytes += (NUM_FPR_ARG_REGISTERS + 1) * sizeof(double); +#elif defined(__ppc__) + bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); +#else +#error undefined architecture +#endif + } + + /* Stack space. */ +#if defined(__ppc64__) + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#elif defined(__ppc__) + if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#else +#error undefined architecture +#endif + else + bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); + + /* The stack space allocated needs to be a multiple of 16/32 bytes. */ + bytes = SF_ROUND(bytes); + + cif->flags = flags; + cif->bytes = bytes; + + return FFI_OK; +} + +/*@-declundef@*/ +/*@-exportheader@*/ +extern void +ffi_call_AIX( +/*@out@*/ extended_cif*, + unsigned, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); + +extern void +ffi_call_DARWIN( +/*@out@*/ extended_cif*, + unsigned long, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); +/*@=declundef@*/ +/*@=exportheader@*/ + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return + value address then we need to make one. */ + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + /*@-sysunrecog@*/ + ecif.rvalue = alloca(cif->rtype->size); + /*@=sysunrecog@*/ + } + else + ecif.rvalue = rvalue; + + switch (cif->abi) + { + case FFI_AIX: + /*@-usedef@*/ + ffi_call_AIX(&ecif, -cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + case FFI_DARWIN: + /*@-usedef@*/ + ffi_call_DARWIN(&ecif, -(long)cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + default: + FFI_ASSERT(0); + break; + } +} + +/* here I'd like to add the stack frame layout we use in darwin_closure.S + and aix_clsoure.S + + SP previous -> +---------------------------------------+ <--- child frame + | back chain to caller 4 | + +---------------------------------------+ 4 + | saved CR 4 | + +---------------------------------------+ 8 + | saved LR 4 | + +---------------------------------------+ 12 + | reserved for compilers 4 | + +---------------------------------------+ 16 + | reserved for binders 4 | + +---------------------------------------+ 20 + | saved TOC pointer 4 | + +---------------------------------------+ 24 + | always reserved 8*4=32 (previous GPRs)| + | according to the linkage convention | + | from AIX | + +---------------------------------------+ 56 + | our FPR area 13*8=104 | + | f1 | + | . | + | f13 | + +---------------------------------------+ 160 + | result area 8 | + +---------------------------------------+ 168 + | alignement to the next multiple of 16 | +SP current --> +---------------------------------------+ 176 <- parent frame + | back chain to caller 4 | + +---------------------------------------+ 180 + | saved CR 4 | + +---------------------------------------+ 184 + | saved LR 4 | + +---------------------------------------+ 188 + | reserved for compilers 4 | + +---------------------------------------+ 192 + | reserved for binders 4 | + +---------------------------------------+ 196 + | saved TOC pointer 4 | + +---------------------------------------+ 200 + | always reserved 8*4=32 we store our | + | GPRs here | + | r3 | + | . | + | r10 | + +---------------------------------------+ 232 + | overflow part | + +---------------------------------------+ xxx + | ???? | + +---------------------------------------+ xxx +*/ + +#if !defined(POWERPC_DARWIN) + +#define MIN_LINE_SIZE 32 + +static void +flush_icache( + char* addr) +{ +#ifndef _AIX + __asm__ volatile ( + "dcbf 0,%0\n" + "sync\n" + "icbi 0,%0\n" + "sync\n" + "isync" + : : "r" (addr) : "memory"); +#endif +} + +static void +flush_range( + char* addr, + int size) +{ + int i; + + for (i = 0; i < size; i += MIN_LINE_SIZE) + flush_icache(addr + i); + + flush_icache(addr + size - 1); +} + +#endif // !defined(POWERPC_DARWIN) + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + switch (cif->abi) + { + case FFI_DARWIN: + { + FFI_ASSERT (cif->abi == FFI_DARWIN); + + unsigned int* tramp = (unsigned int*)&closure->tramp[0]; + +#if defined(__ppc64__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0xe98b0018; // ld r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0xe96b0020; // ld r11,32(r11) + tramp[7] = 0x4e800420; // bctr + *(unsigned long*)&tramp[8] = (unsigned long)ffi_closure_ASM; + *(unsigned long*)&tramp[10] = (unsigned long)closure; +#elif defined(__ppc__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0x818b0018; // lwz r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0x816b001c; // lwz r11,28(r11) + tramp[7] = 0x4e800420; // bctr + tramp[8] = (unsigned long)ffi_closure_ASM; + tramp[9] = (unsigned long)closure; +#else +#error undefined architecture +#endif + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + // Flush the icache. Only necessary on Darwin. +#if defined(POWERPC_DARWIN) + sys_icache_invalidate(closure->tramp, FFI_TRAMPOLINE_SIZE); +#else + flush_range(closure->tramp, FFI_TRAMPOLINE_SIZE); +#endif + + break; + } + + case FFI_AIX: + { + FFI_ASSERT (cif->abi == FFI_AIX); + + ffi_aix_trampoline_struct* tramp_aix = + (ffi_aix_trampoline_struct*)(closure->tramp); + aix_fd* fd = (aix_fd*)(void*)ffi_closure_ASM; + + tramp_aix->code_pointer = fd->code_pointer; + tramp_aix->toc = fd->toc; + tramp_aix->static_chain = closure; + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + break; + } + + default: + return FFI_BAD_ABI; + } + + return FFI_OK; +} + +#if defined(__ppc__) + typedef double ldbits[2]; + + typedef union + { + ldbits lb; + long double ld; + } ldu; +#endif + +typedef union +{ + float f; + double d; +} ffi_dblfl; + +/* The trampoline invokes ffi_closure_ASM, and on entry, r11 holds the + address of the closure. After storing the registers that could possibly + contain parameters to be passed into the stack frame and setting up space + for a return value, ffi_closure_ASM invokes the following helper function + to do most of the work. */ +int +ffi_closure_helper_DARWIN( + ffi_closure* closure, + void* rvalue, + unsigned long* pgr, + ffi_dblfl* pfr) +{ + /* rvalue is the pointer to space for return value in closure assembly + pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM + pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ + +#if defined(__ppc__) + ldu temp_ld; +#endif + + double temp; + unsigned int i; + unsigned int nf = 0; /* number of FPRs already used. */ + unsigned int ng = 0; /* number of GPRs already used. */ + ffi_cif* cif = closure->cif; + long avn = cif->nargs; + void** avalue = alloca(cif->nargs * sizeof(void*)); + ffi_type** arg_types = cif->arg_types; + + /* Copy the caller's structure return value address so that the closure + returns the data directly to the caller. */ +#if defined(__ppc64__) + if (cif->rtype->type == FFI_TYPE_STRUCT && + ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) +#elif defined(__ppc__) + if (cif->rtype->type == FFI_TYPE_STRUCT) +#else +#error undefined architecture +#endif + { + rvalue = (void*)*pgr; + pgr++; + ng++; + } + + /* Grab the addresses of the arguments from the stack frame. */ + for (i = 0; i < avn; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = (char*)pgr + MODE_CHOICE(3,7); + ng++; + pgr++; + break; + + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = (char*)pgr + MODE_CHOICE(2,6); + ng++; + pgr++; + break; + +#if defined(__ppc__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + avalue[i] = (char*)pgr + MODE_CHOICE(0,4); + ng++; + pgr++; + + break; + + case FFI_TYPE_STRUCT: + if (cif->abi == FFI_DARWIN) + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + unsigned int savedFPRSize = fprSize; + + avalue[i] = alloca(arg_types[i]->size); + ffi64_struct_to_ram_form(arg_types[i], (const char*)pgr, + &gprSize, (const char*)pfr, &fprSize, &nf, avalue[i], NULL); + + ng += gprSize / sizeof(long); + pgr += gprSize / sizeof(long); + pfr += (fprSize - savedFPRSize) / sizeof(double); + +#elif defined(__ppc__) + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. */ + unsigned int size_al = size_al = arg_types[i]->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN(arg_types[i]->size, 8); + + if (size_al < 3) + avalue[i] = (void*)pgr + MODE_CHOICE(4,8) - size_al; + else + avalue[i] = (void*)pgr; + + ng += (size_al + 3) / sizeof(long); + pgr += (size_al + 3) / sizeof(long); +#else +#error undefined architecture +#endif + } + + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + /* Long long ints are passed in 1 or 2 GPRs. */ + avalue[i] = pgr; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_FLOAT: + /* A float value consumes a GPR. + There are 13 64-bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + temp = pfr->d; + pfr->f = (float)temp; + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng++; + pgr++; + break; + + case FFI_TYPE_DOUBLE: + /* A double value consumes one or two GPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr += 2; + } +#elif defined(__ppc__) + /* A long double value consumes 2/4 GPRs and 2 FPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS - 1) + { + avalue[i] = pfr; + pfr += 2; + } + /* Here we have the situation where one part of the long double + is stored in fpr13 and the other part is already on the stack. + We use a union to pass the long double to avalue[i]. */ + else if (nf == NUM_FPR_ARG_REGISTERS - 1) + { + memcpy (&temp_ld.lb[0], pfr, sizeof(temp_ld.lb[0])); + memcpy (&temp_ld.lb[1], pgr + 2, sizeof(temp_ld.lb[1])); + avalue[i] = &temp_ld.ld; + } +#else +#error undefined architecture +#endif + else + avalue[i] = pgr; + + nf += 2; + ng += MODE_CHOICE(4,2); + pgr += MODE_CHOICE(4,2); + + break; + +#endif /* FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE */ + + default: + FFI_ASSERT(0); + break; + } + } + + (closure->fun)(cif, rvalue, avalue, closure->user_data); + + /* Tell ffi_closure_ASM to perform return type promotions. */ + return cif->rtype->type; +} + +#if defined(__ppc64__) + +/* ffi64_struct_to_ram_form + + Rebuild a struct's natural layout from buffers of concatenated registers. + Return the number of registers used. + inGPRs[0-7] == r3, inFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_ram_form( + const ffi_type* inType, + const char* inGPRs, + unsigned int* ioGPRMarker, + const char* inFPRs, + unsigned int* ioFPRMarker, + unsigned int* ioFPRsUsed, + char* outStruct, // caller-allocated + unsigned int* ioStructMarker) +{ + unsigned int srcGMarker = 0; + unsigned int srcFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + unsigned int destMarker = 0; + + static unsigned int recurseCount = 0; + + if (ioGPRMarker) + srcGMarker = *ioGPRMarker; + + if (ioFPRMarker) + { + srcFMarker = *ioFPRMarker; + savedFMarker = srcFMarker; + } + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioStructMarker) + destMarker = *ioStructMarker; + + size_t i; + + switch (inType->size) + { + case 1: case 2: case 4: + srcGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + srcFMarker = ALIGN(srcFMarker, 4); + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(float*)&outStruct[destMarker] = + (float)*(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(float*)&outStruct[destMarker] = + (float)*(double*)&inGPRs[srcGMarker]; + + srcGMarker += 4; + destMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcFMarker = ALIGN(srcFMarker, 8); + destMarker = ALIGN(destMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(double*)&outStruct[destMarker] = + *(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(double*)&outStruct[destMarker] = + *(double*)&inGPRs[srcGMarker]; + + destMarker += 8; + + // Skip next GPR + srcGMarker += 8; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + destMarker = ALIGN(destMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + srcFMarker = ALIGN(srcFMarker, 8); + srcGMarker = ALIGN(srcGMarker, 8); + *(long double*)&outStruct[destMarker] = + *(long double*)&inFPRs[srcFMarker]; + srcFMarker += 16; + fprsUsed += 2; + } + else + { + srcFMarker = ALIGN(srcFMarker, 16); + srcGMarker = ALIGN(srcGMarker, 16); + *(long double*)&outStruct[destMarker] = + *(long double*)&inGPRs[srcGMarker]; + } + + destMarker += 16; + + // Skip next 2 GPRs + srcGMarker += 16; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + if (inType->alignment == 1) // chars only + { + if (inType->size == 1) + outStruct[destMarker++] = inGPRs[srcGMarker++]; + else if (inType->size == 2) + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + outStruct[destMarker++] = inGPRs[srcGMarker++]; + i++; + } + else + { + memcpy(&outStruct[destMarker], + &inGPRs[srcGMarker], inType->size); + srcGMarker += inType->size; + destMarker += inType->size; + i += inType->size - 1; + } + } + else // chars and other stuff + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, inType->alignment); // was 8 + } + } + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcGMarker = ALIGN(srcGMarker, 2); + destMarker = ALIGN(destMarker, 2); + + *(short*)&outStruct[destMarker] = + *(short*)&inGPRs[srcGMarker]; + srcGMarker += 2; + destMarker += 2; + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + *(int*)&outStruct[destMarker] = + *(int*)&inGPRs[srcGMarker]; + srcGMarker += 4; + destMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcGMarker = ALIGN(srcGMarker, 8); + destMarker = ALIGN(destMarker, 8); + + *(long long*)&outStruct[destMarker] = + *(long long*)&inGPRs[srcGMarker]; + srcGMarker += 8; + destMarker += 8; + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_ram_form(inType->elements[i], inGPRs, + &srcGMarker, inFPRs, &srcFMarker, &fprsUsed, + outStruct, &destMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); // unknown element type + break; + } + } + + srcGMarker = ALIGN(srcGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && srcGMarker == 16) + { + *(long double*)&outStruct[0] = *(long double*)&inGPRs[0]; + srcFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioGPRMarker) + *ioGPRMarker = ALIGN(srcGMarker, 8); + + if (ioFPRMarker) + *ioFPRMarker = srcFMarker; + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioStructMarker) + *ioStructMarker = ALIGN(destMarker, 8); +} + +/* ffi64_struct_to_reg_form + + Copy a struct's elements into buffers that can be sliced into registers. + Return the sizes of the output buffers in bytes. Pass NULL buffer pointers + to calculate size only. + outGPRs[0-7] == r3, outFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_reg_form( + const ffi_type* inType, + const char* inStruct, + unsigned int* ioStructMarker, + unsigned int* ioFPRsUsed, + char* outGPRs, // caller-allocated + unsigned int* ioGPRSize, + char* outFPRs, // caller-allocated + unsigned int* ioFPRSize) +{ + size_t i; + unsigned int srcMarker = 0; + unsigned int destGMarker = 0; + unsigned int destFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + + static unsigned int recurseCount = 0; + + if (ioStructMarker) + srcMarker = *ioStructMarker; + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioGPRSize) + destGMarker = *ioGPRSize; + + if (ioFPRSize) + { + destFMarker = *ioFPRSize; + savedFMarker = destFMarker; + } + + switch (inType->size) + { + case 1: case 2: case 4: + destGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + // Shadow floating-point types in GPRs for vararg and pre-ANSI + // functions. + case FFI_TYPE_FLOAT: + // Nudge markers to next 4/8-byte boundary + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + (double)*(float*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + (double)*(float*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcMarker = ALIGN(srcMarker, 8); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + *(double*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + *(double*)&inStruct[srcMarker]; + + srcMarker += 8; + + // Skip next GPR + destGMarker += 8; + destGMarker = ALIGN(destGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + srcMarker = ALIGN(srcMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + destFMarker = ALIGN(destFMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outFPRs != NULL && inStruct != NULL) + *(long double*)&outFPRs[destFMarker] = + *(long double*)&inStruct[srcMarker]; + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + + destFMarker += 16; + fprsUsed += 2; + } + else + { + destGMarker = ALIGN(destGMarker, 16); + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + } + + srcMarker += 16; + destGMarker += 16; // Skip next 2 GPRs + destGMarker = ALIGN(destGMarker, 8); // was 16 + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + if (inType->alignment == 1) // bytes only + { + if (inType->size == 1) + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + } + else if (inType->size == 2) + { + if (outGPRs != NULL && inStruct != NULL) + { + outGPRs[destGMarker] = inStruct[srcMarker]; + outGPRs[destGMarker + 1] = inStruct[srcMarker + 1]; + } + + srcMarker += 2; + destGMarker += 2; + + i++; + } + else + { + if (outGPRs != NULL && inStruct != NULL) + { + // Avoid memcpy for small chunks. + if (inType->size <= sizeof(long)) + *(long*)&outGPRs[destGMarker] = + *(long*)&inStruct[srcMarker]; + else + memcpy(&outGPRs[destGMarker], + &inStruct[srcMarker], inType->size); + } + + srcMarker += inType->size; + destGMarker += inType->size; + i += inType->size - 1; + } + } + else // bytes and other stuff + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, inType->alignment); // was 8 + } + } + + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcMarker = ALIGN(srcMarker, 2); + destGMarker = ALIGN(destGMarker, 2); + + if (outGPRs != NULL && inStruct != NULL) + *(short*)&outGPRs[destGMarker] = + *(short*)&inStruct[srcMarker]; + + srcMarker += 2; + destGMarker += 2; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + + if (outGPRs != NULL && inStruct != NULL) + *(int*)&outGPRs[destGMarker] = + *(int*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcMarker = ALIGN(srcMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outGPRs != NULL && inStruct != NULL) + *(long long*)&outGPRs[destGMarker] = + *(long long*)&inStruct[srcMarker]; + + srcMarker += 8; + destGMarker += 8; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_reg_form(inType->elements[i], + inStruct, &srcMarker, &fprsUsed, outGPRs, + &destGMarker, outFPRs, &destFMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); + break; + } + } + + destGMarker = ALIGN(destGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && destGMarker == 16) + { + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[0] = *(long double*)&inStruct[0]; + + destFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioStructMarker) + *ioStructMarker = ALIGN(srcMarker, 8); + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioGPRSize) + *ioGPRSize = ALIGN(destGMarker, 8); + + if (ioFPRSize) + *ioFPRSize = ALIGN(destFMarker, 8); +} + +/* ffi64_stret_needs_ptr + + Determine whether a returned struct needs a pointer in r3 or can fit + in registers. +*/ + +bool +ffi64_stret_needs_ptr( + const ffi_type* inType, + unsigned short* ioGPRCount, + unsigned short* ioFPRCount) +{ + // Obvious case first- struct is larger than combined FPR size. + if (inType->size > 14 * 8) + return true; + + // Now the struct can physically fit in registers, determine if it + // also fits logically. + bool needsPtr = false; + unsigned short gprsUsed = 0; + unsigned short fprsUsed = 0; + size_t i; + + if (ioGPRCount) + gprsUsed = *ioGPRCount; + + if (ioFPRCount) + fprsUsed = *ioFPRCount; + + for (i = 0; inType->elements[i] != NULL && !needsPtr; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + gprsUsed++; + fprsUsed++; + + if (fprsUsed > 13) + needsPtr = true; + + break; + + case FFI_TYPE_LONGDOUBLE: + gprsUsed += 2; + fprsUsed += 2; + + if (fprsUsed > 14) + needsPtr = true; + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + gprsUsed++; + + if (gprsUsed > 8) + { + needsPtr = true; + break; + } + + if (inType->elements[i + 1] == NULL) // last byte in the struct + break; + + // Count possible contiguous bytes ahead, up to 8. + unsigned short j; + + for (j = 1; j < 8; j++) + { + if (inType->elements[i + j] == NULL || + !FFI_TYPE_1_BYTE(inType->elements[i + j]->type)) + break; + } + + i += j - 1; // allow for i++ before the test condition + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + gprsUsed++; + + if (gprsUsed > 8) + needsPtr = true; + + break; + + case FFI_TYPE_STRUCT: + needsPtr = ffi64_stret_needs_ptr( + inType->elements[i], &gprsUsed, &fprsUsed); + + break; + + default: + FFI_ASSERT(0); + break; + } + } + + if (ioGPRCount) + *ioGPRCount = gprsUsed; + + if (ioFPRCount) + *ioFPRCount = fprsUsed; + + return needsPtr; +} + +/* ffi64_data_size + + Calculate the size in bytes of an ffi type. +*/ + +unsigned int +ffi64_data_size( + const ffi_type* inType) +{ + unsigned int size = 0; + + switch (inType->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + size = 1; + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + size = 2; + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_FLOAT: + size = 4; + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + size = 8; + break; + + case FFI_TYPE_LONGDOUBLE: + size = 16; + break; + + case FFI_TYPE_STRUCT: + ffi64_struct_to_reg_form( + inType, NULL, NULL, NULL, NULL, &size, NULL, NULL); + break; + + case FFI_TYPE_VOID: + break; + + default: + FFI_ASSERT(0); + break; + } + + return size; +} + +#endif /* defined(__ppc64__) */ +#endif /* __ppc__ || __ppc64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S new file mode 100644 index 0000000..7162fa1 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S @@ -0,0 +1,418 @@ +#if defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc64-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc64-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 + stg r0,SF_RETURN(r1) // save return address + + // Save GPRs 3 - 10 (aligned to 8) in the parents outgoing area. + stg r3,SF_ARG1(r1) + stg r4,SF_ARG2(r1) + stg r5,SF_ARG3(r1) + stg r6,SF_ARG4(r1) + stg r7,SF_ARG5(r1) + stg r8,SF_ARG6(r1) + stg r9,SF_ARG7(r1) + stg r10,SF_ARG8(r1) + +LCFI0: +/* 48 bytes (Linkage Area) + 64 bytes (outgoing parameter area, always reserved) + 112 bytes (14*8 for incoming FPR) + ? bytes (result) + 112 bytes (14*8 for outgoing FPR) + 16 bytes (2 saved registers) + 352 + ? total bytes +*/ + + std r31,-8(r1) // Save registers we use. + std r30,-16(r1) + mr r30,r1 // Save the old SP. + mr r31,r11 // Save the ffi_closure around ffi64_data_size. + + // Calculate the space we need. + stdu r1,-SF_MINSIZE(r1) + ld r3,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r3) // ffi_cif->rtype* + bl Lffi64_data_size$stub + ld r1,0(r1) + + addi r3,r3,352 // Add our overhead. + neg r3,r3 + li r0,-32 // Align to 32 bytes. + and r3,r3,r0 + stdux r1,r1,r3 // Grow the stack. + + mr r11,r31 // Copy the ffi_closure back. + +LCFI1: + // We want to build up an area for the parameters passed + // in registers. (both floating point and integer) + +/* 320 bytes (callee stack frame aligned to 32) + 48 bytes (caller linkage area) + 368 (start of caller parameter area aligned to 8) +*/ + + // Save FPRs 1 - 14. (aligned to 8) + stfd f1,112(r1) + stfd f2,120(r1) + stfd f3,128(r1) + stfd f4,136(r1) + stfd f5,144(r1) + stfd f6,152(r1) + stfd f7,160(r1) + stfd f8,168(r1) + stfd f9,176(r1) + stfd f10,184(r1) + stfd f11,192(r1) + stfd f12,200(r1) + stfd f13,208(r1) + stfd f14,216(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,224 // result storage + addi r5,r30,SF_ARG1 // saved GPRs + addi r6,r1,112 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + // Look the proper starting point in table + // by using return type as an offset. + addi r5,r1,224 // Get pointer to results area. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Now multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: + // Each of the ret_typeX code fragments has to be exactly 16 bytes long + // (4 instructions). For cache effectiveness we align to a 16 byte + // boundary first. + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +// case FFI_TYPE_VOID +Lret_type0: + b Lfinish + nop + nop + nop + +// case FFI_TYPE_INT +Lret_type1: + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_FLOAT +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_DOUBLE +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_LONGDOUBLE +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +// case FFI_TYPE_UINT8 +Lret_type5: + lbz r3,7(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT8 +Lret_type6: + lbz r3,7(r5) + extsb r3,r3 + b Lfinish + nop + +// case FFI_TYPE_UINT16 +Lret_type7: + lhz r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT16 +Lret_type8: + lha r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT32 +Lret_type9: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT32 +Lret_type10: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT64 +Lret_type11: + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT64 +Lret_type12: // same as Lret_type11 + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_STRUCT +Lret_type13: + b Lret_struct + nop + nop + nop + +// ** End 16-byte aligned cases ** +// case FFI_TYPE_POINTER +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + b Lfinish + +// copy struct into registers +Lret_struct: + ld r31,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r31) // ffi_cif->rtype* + ld r31,24(r31) // ffi_cif->flags + mr r4,r5 // copy struct* to 2nd arg + addi r7,r1,SF_ARG9 // GPR return area + addi r9,r30,-16-(14*8) // FPR return area + li r5,0 // struct offset ptr (NULL) + li r6,0 // FPR used count ptr (NULL) + li r8,0 // GPR return area size ptr (NULL) + li r10,0 // FPR return area size ptr (NULL) + bl Lffi64_struct_to_reg_form$stub + + // Load GPRs + ld r3,SF_ARG9(r1) + ld r4,SF_ARG10(r1) + ld r5,SF_ARG11(r1) + ld r6,SF_ARG12(r1) + nop + ld r7,SF_ARG13(r1) + ld r8,SF_ARG14(r1) + ld r9,SF_ARG15(r1) + ld r10,SF_ARG16(r1) + nop + + // Load FPRs + mtcrf 0x2,r31 + bf 26,Lfinish + lfd f1,-16-(14*8)(r30) + lfd f2,-16-(13*8)(r30) + lfd f3,-16-(12*8)(r30) + lfd f4,-16-(11*8)(r30) + nop + lfd f5,-16-(10*8)(r30) + lfd f6,-16-(9*8)(r30) + lfd f7,-16-(8*8)(r30) + lfd f8,-16-(7*8)(r30) + nop + lfd f9,-16-(6*8)(r30) + lfd f10,-16-(5*8)(r30) + lfd f11,-16-(4*8)(r30) + lfd f12,-16-(3*8)(r30) + nop + lfd f13,-16-(2*8)(r30) + lfd f14,-16-(1*8)(r30) + // Fall through + +// case done +Lfinish: + lg r1,0(r1) // Restore stack pointer. + ld r31,-8(r1) // Restore registers we used. + ld r30,-16(r1) + lg r0,SF_RETURN(r1) // Get return address. + mtlr r0 // Reset link register. + blr + +// END(ffi_closure_ASM) + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_reg_form$stub: + .indirect_symbol _ffi64_struct_to_reg_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_reg_form + +LO$ffi64_struct_to_reg_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form)(r11) + mtctr r12 + bctr + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_data_size$stub: + .indirect_symbol _ffi64_data_size + mflr r0 + bcl 20,31,LO$ffi64_data_size + +LO$ffi64_data_size: + mflr r11 + addis r11,r11,ha16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size) + mtlr r0 + lgu r12,lo16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_reg_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_reg_form + .g_long dyld_stub_binding_helper + +L_ffi64_data_size$lazy_ptr: + .indirect_symbol _ffi64_data_size + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/types.c ./Modules/_ctypes/libffi_osx/types.c new file mode 100644 index 0000000..44806ae --- /dev/null +++ ./Modules/_ctypes/libffi_osx/types.c @@ -0,0 +1,115 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +/* Type definitions */ +#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) \ + ffi_type ffi_type_##n = { s, a, t, NULL } +#define FFI_AGGREGATE_TYPEDEF(n, e) \ + ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } + +FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); +FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); +FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); +FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); +FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); +FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); +FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); + +/* Size and alignment are fake here. They must not be 0. */ +FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); + +#if defined ALPHA || defined SPARC64 || defined X86_64 || \ + defined S390X || defined IA64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); +#else +FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); +#endif + +#if defined X86 || defined ARM || defined M68K || defined(X86_DARWIN) + +# ifdef X86_64 + FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +# else + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +# endif + +#elif defined(POWERPC_DARWIN) +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#elif defined SH +FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +#else +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#endif + +#if defined X86 || defined X86_WIN32 || defined M68K || defined(X86_DARWIN) + +# if defined X86_WIN32 || defined X86_64 + FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +# endif + +# ifdef X86_DARWIN + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined ARM || defined SH || defined POWERPC_AIX +FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); +#elif defined POWERPC_DARWIN +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# if __GNUC__ >= 4 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined SPARC +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# ifdef SPARC64 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined X86_64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +#else +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/x86/darwin64.S ./Modules/_ctypes/libffi_osx/x86/darwin64.S new file mode 100644 index 0000000..165d469 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -0,0 +1,417 @@ +/* ----------------------------------------------------------------------- + darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. + derived from unix64.S + + x86-64 Foreign Function Interface for Darwin. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifdef __x86_64__ +#define LIBFFI_ASM +#include +#include + + .file "darwin64.S" +.text + +/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, + void *raddr, void (*fnaddr)()); + + Bit o trickiness here -- ARGS+BYTES is the base of the stack frame + for this function. This has been allocated by ffi_call. We also + deallocate some of the stack that has been alloca'd. */ + + .align 3 + .globl _ffi_call_unix64 + +_ffi_call_unix64: +LUW0: + movq (%rsp), %r10 /* Load return address. */ + movq %rdi, %r12 /* Save a copy of the register area. */ + leaq (%rdi, %rsi), %rax /* Find local stack base. */ + movq %rdx, (%rax) /* Save flags. */ + movq %rcx, 8(%rax) /* Save raddr. */ + movq %rbp, 16(%rax) /* Save old frame pointer. */ + movq %r10, 24(%rax) /* Relocate return address. */ + movq %rax, %rbp /* Finalize local stack frame. */ +LUW1: + /* movq %rdi, %r10 // Save a copy of the register area. */ + movq %r12, %r10 + movq %r8, %r11 /* Save a copy of the target fn. */ + movl %r9d, %eax /* Set number of SSE registers. */ + + /* Load up all argument registers. */ + movq (%r10), %rdi + movq 8(%r10), %rsi + movq 16(%r10), %rdx + movq 24(%r10), %rcx + movq 32(%r10), %r8 + movq 40(%r10), %r9 + testl %eax, %eax + jnz Lload_sse +Lret_from_load_sse: + + /* Deallocate the reg arg area. */ + leaq 176(%r10), %rsp + + /* Call the user function. */ + call *%r11 + + /* Deallocate stack arg area; local stack frame in redzone. */ + leaq 24(%rbp), %rsp + + movq 0(%rbp), %rcx /* Reload flags. */ + movq 8(%rbp), %rdi /* Reload raddr. */ + movq 16(%rbp), %rbp /* Reload old frame pointer. */ +LUW2: + + /* The first byte of the flags contains the FFI_TYPE. */ + movzbl %cl, %r10d + leaq Lstore_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lstore_table: + .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ + .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ + .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ + .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ + .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ + .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ + .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ + .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ + .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ + .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ + .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lst_void: + ret + .align 3 +Lst_uint8: + movzbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_sint8: + movsbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint16: + movzwq %ax, %rax + movq %rax, (%rdi) + .align 3 +Lst_sint16: + movswq %ax, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint32: + movl %eax, %eax + movq %rax, (%rdi) + .align 3 +Lst_sint32: + cltq + movq %rax, (%rdi) + ret + .align 3 +Lst_int64: + movq %rax, (%rdi) + ret + .align 3 +Lst_float: + movss %xmm0, (%rdi) + ret + .align 3 +Lst_double: + movsd %xmm0, (%rdi) + ret +Lst_ldouble: + fstpt (%rdi) + ret + .align 3 +Lst_struct: + leaq -20(%rsp), %rsi /* Scratch area in redzone. */ + + /* We have to locate the values now, and since we don't want to + write too much data into the user's return value, we spill the + value to a 16 byte scratch area first. Bits 8, 9, and 10 + control where the values are located. Only one of the three + bits will be set; see ffi_prep_cif_machdep for the pattern. */ + movd %xmm0, %r10 + movd %xmm1, %r11 + testl $0x100, %ecx + cmovnz %rax, %rdx + cmovnz %r10, %rax + testl $0x200, %ecx + cmovnz %r10, %rdx + testl $0x400, %ecx + cmovnz %r10, %rax + cmovnz %r11, %rdx + movq %rax, (%rsi) + movq %rdx, 8(%rsi) + + /* Bits 12-31 contain the true size of the structure. Copy from + the scratch area to the true destination. */ + shrl $12, %ecx + rep movsb + ret + + /* Many times we can avoid loading any SSE registers at all. + It's not worth an indirect jump to load the exact set of + SSE registers needed; zero or all is a good compromise. */ + .align 3 +LUW3: +Lload_sse: + movdqa 48(%r10), %xmm0 + movdqa 64(%r10), %xmm1 + movdqa 80(%r10), %xmm2 + movdqa 96(%r10), %xmm3 + movdqa 112(%r10), %xmm4 + movdqa 128(%r10), %xmm5 + movdqa 144(%r10), %xmm6 + movdqa 160(%r10), %xmm7 + jmp Lret_from_load_sse + +LUW4: + .align 3 + .globl _ffi_closure_unix64 + +_ffi_closure_unix64: +LUW5: + /* The carry flag is set by the trampoline iff SSE registers + are used. Don't clobber it before the branch instruction. */ + leaq -200(%rsp), %rsp +LUW6: + movq %rdi, (%rsp) + movq %rsi, 8(%rsp) + movq %rdx, 16(%rsp) + movq %rcx, 24(%rsp) + movq %r8, 32(%rsp) + movq %r9, 40(%rsp) + jc Lsave_sse +Lret_from_save_sse: + + movq %r10, %rdi + leaq 176(%rsp), %rsi + movq %rsp, %rdx + leaq 208(%rsp), %rcx + call _ffi_closure_unix64_inner + + /* Deallocate stack frame early; return value is now in redzone. */ + addq $200, %rsp +LUW7: + + /* The first byte of the return value contains the FFI_TYPE. */ + movzbl %al, %r10d + leaq Lload_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lload_table: + .long Lld_void-Lload_table /* FFI_TYPE_VOID */ + .long Lld_int32-Lload_table /* FFI_TYPE_INT */ + .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ + .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ + .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ + .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ + .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ + .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ + .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ + .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ + .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ + .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ + .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ + .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ + .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lld_void: + ret + .align 3 +Lld_int8: + movzbl -24(%rsp), %eax + ret + .align 3 +Lld_int16: + movzwl -24(%rsp), %eax + ret + .align 3 +Lld_int32: + movl -24(%rsp), %eax + ret + .align 3 +Lld_int64: + movq -24(%rsp), %rax + ret + .align 3 +Lld_float: + movss -24(%rsp), %xmm0 + ret + .align 3 +Lld_double: + movsd -24(%rsp), %xmm0 + ret + .align 3 +Lld_ldouble: + fldt -24(%rsp) + ret + .align 3 +Lld_struct: + /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, + %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading + both rdx and xmm1 with the second word. For the remaining, + bit 8 set means xmm0 gets the second word, and bit 9 means + that rax gets the second word. */ + movq -24(%rsp), %rcx + movq -16(%rsp), %rdx + movq -16(%rsp), %xmm1 + testl $0x100, %eax + cmovnz %rdx, %rcx + movd %rcx, %xmm0 + testl $0x200, %eax + movq -24(%rsp), %rax + cmovnz %rdx, %rax + ret + + /* See the comment above Lload_sse; the same logic applies here. */ + .align 3 +LUW8: +Lsave_sse: + movdqa %xmm0, 48(%rsp) + movdqa %xmm1, 64(%rsp) + movdqa %xmm2, 80(%rsp) + movdqa %xmm3, 96(%rsp) + movdqa %xmm4, 112(%rsp) + movdqa %xmm5, 128(%rsp) + movdqa %xmm6, 144(%rsp) + movdqa %xmm7, 160(%rsp) + jmp Lret_from_save_sse + +LUW9: +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ + .long L$set$0 +LSCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "zR\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ + .byte 0x10 /* CIE RA Column */ + .byte 0x1 /* uleb128 0x1; Augmentation size */ + .byte 0x10 /* FDE Encoding (pcrel sdata4) */ + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 /* uleb128 0x7 */ + .byte 0x8 /* uleb128 0x8 */ + .byte 0x90 /* DW_CFA_offset, column 0x10 */ + .byte 0x1 + .align 3 +LECIE1: + .globl _ffi_call_unix64.eh +_ffi_call_unix64.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 /* FDE CIE offset */ + .quad LUW0-. /* FDE initial location */ + .set L$set$2,LUW4-LUW0 /* FDE address range */ + .quad L$set$2 + .byte 0x0 /* Augmentation size */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$3,LUW1-LUW0 + .long L$set$3 + + /* New stack frame based off rbp. This is a itty bit of unwind + trickery in that the CFA *has* changed. There is no easy way + to describe it correctly on entry to the function. Fortunately, + it doesn't matter too much since at all points we can correctly + unwind back to ffi_call. Note that the location to which we + moved the return address is (the new) CFA-8, so from the + perspective of the unwind info, it hasn't moved. */ + .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ + .byte 0x6 + .byte 0x20 + .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ + .byte 0x2 + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$4,LUW2-LUW1 + .long L$set$4 + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 + .byte 0x8 + .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$5,LUW3-LUW2 + .long L$set$5 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE1: + .globl _ffi_closure_unix64.eh +_ffi_closure_unix64.eh: +LSFDE3: + .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ + .long L$set$6 +LASFDE3: + .long LASFDE3-EH_frame1 /* FDE CIE offset */ + .quad LUW5-. /* FDE initial location */ + .set L$set$7,LUW9-LUW5 /* FDE address range */ + .quad L$set$7 + .byte 0x0 /* Augmentation size */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$8,LUW6-LUW5 + .long L$set$8 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 208,1 /* uleb128 208 */ + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$9,LUW7-LUW6 + .long L$set$9 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 0x8 + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$10,LUW8-LUW7 + .long L$set$10 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE3: + .subsections_via_symbols + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S new file mode 100644 index 0000000..925a841 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S @@ -0,0 +1,422 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. + + X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +/* + * This file is based on sysv.S and then hacked up by Ronald who hasn't done + * assembly programming in 8 years. + */ + +#ifndef __x86_64__ + +#define LIBFFI_ASM +#include +#include + +#ifdef PyObjC_STRICT_DEBUGGING + /* XXX: Debugging of stack alignment, to be removed */ +#define ASSERT_STACK_ALIGNED movdqa -16(%esp), %xmm0 +#else +#define ASSERT_STACK_ALIGNED +#endif + +.text + +.globl _ffi_prep_args + + .align 4 +.globl _ffi_call_SYSV + +_ffi_call_SYSV: +LFB1: + pushl %ebp +LCFI0: + movl %esp,%ebp +LCFI1: + subl $8,%esp + /* Make room for all of the new args. */ + movl 16(%ebp),%ecx + subl %ecx,%esp + + movl %esp,%eax + + /* Place all of the ffi_prep_args in position */ + subl $8,%esp + pushl 12(%ebp) + pushl %eax + call *8(%ebp) + + /* Return stack to previous state and call the function */ + addl $16,%esp + + call *28(%ebp) + + /* Remove the space we pushed for the args */ + movl 16(%ebp),%ecx + addl %ecx,%esp + + /* Load %ecx with the return type code */ + movl 20(%ebp),%ecx + + /* If the return value pointer is NULL, assume no return value. */ + cmpl $0,24(%ebp) + jne Lretint + + /* Even if there is no space for the return value, we are + obliged to handle floating-point values. */ + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lnoretval + fstp %st(0) + + jmp Lepilogue + +Lretint: + cmpl $FFI_TYPE_INT,%ecx + jne Lretfloat + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp Lepilogue + +Lretfloat: + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lretdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstps (%ecx) + jmp Lepilogue + +Lretdouble: + cmpl $FFI_TYPE_DOUBLE,%ecx + jne Lretlongdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpl (%ecx) + jmp Lepilogue + +Lretlongdouble: + cmpl $FFI_TYPE_LONGDOUBLE,%ecx + jne Lretint64 + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpt (%ecx) + jmp Lepilogue + +Lretint64: + cmpl $FFI_TYPE_SINT64,%ecx + jne Lretstruct1b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + movl %edx,4(%ecx) + jmp Lepilogue + +Lretstruct1b: + cmpl $FFI_TYPE_SINT8,%ecx + jne Lretstruct2b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movb %al,0(%ecx) + jmp Lepilogue + +Lretstruct2b: + cmpl $FFI_TYPE_SINT16,%ecx + jne Lretstruct + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movw %ax,0(%ecx) + jmp Lepilogue + +Lretstruct: + cmpl $FFI_TYPE_STRUCT,%ecx + jne Lnoretval + /* Nothing to do! */ + addl $4,%esp + popl %ebp + ret + +Lnoretval: +Lepilogue: + addl $8,%esp + movl %ebp,%esp + popl %ebp + ret +LFE1: +.ffi_call_SYSV_end: + + .align 4 +FFI_HIDDEN (ffi_closure_SYSV) +.globl _ffi_closure_SYSV + +_ffi_closure_SYSV: +LFB2: + pushl %ebp +LCFI2: + movl %esp, %ebp +LCFI3: + subl $56, %esp + leal -40(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 8(%ebp), %edx + movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + movl %ebx, 8(%esp) +LCFI7: + call L_ffi_closure_SYSV_inner$stub + movl 8(%esp), %ebx + movl -12(%ebp), %ecx + cmpl $FFI_TYPE_INT, %eax + je Lcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lcls_retllong + cmpl $FFI_TYPE_UINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_SINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_UINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_SINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_STRUCT, %eax + je Lcls_retstruct +Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret +Lcls_retint: + movl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retfloat: + flds (%ecx) + jmp Lcls_epilogue +Lcls_retdouble: + fldl (%ecx) + jmp Lcls_epilogue +Lcls_retldouble: + fldt (%ecx) + jmp Lcls_epilogue +Lcls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp Lcls_epilogue +Lcls_retstruct1: + movsbl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct2: + movswl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct: + lea -8(%ebp),%esp + movl %ebp, %esp + popl %ebp + ret $4 +LFE2: + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + + .align 4 +FFI_HIDDEN (ffi_closure_raw_SYSV) +.globl _ffi_closure_raw_SYSV + +_ffi_closure_raw_SYSV: +LFB3: + pushl %ebp +LCFI4: + movl %esp, %ebp +LCFI5: + pushl %esi +LCFI6: + subl $36, %esp + movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ + movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ + movl %edx, 12(%esp) /* user_data */ + leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ + movl %edx, 8(%esp) /* raw_args */ + leal -24(%ebp), %edx + movl %edx, 4(%esp) /* &res */ + movl %esi, (%esp) /* cif */ + call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ + movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ + cmpl $FFI_TYPE_INT, %eax + je Lrcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lrcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lrcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lrcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lrcls_retllong +Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret +Lrcls_retint: + movl -24(%ebp), %eax + jmp Lrcls_epilogue +Lrcls_retfloat: + flds -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retdouble: + fldl -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retldouble: + fldt -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retllong: + movl -24(%ebp), %eax + movl -20(%ebp), %edx + jmp Lrcls_epilogue +LFE3: +#endif + +.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 +L_ffi_closure_SYSV_inner$stub: + .indirect_symbol _ffi_closure_SYSV_inner + hlt ; hlt ; hlt ; hlt ; hlt + + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 +LSCIE1: + .long 0x0 + .byte 0x1 + .ascii "zR\0" + .byte 0x1 + .byte 0x7c + .byte 0x8 + .byte 0x1 + .byte 0x10 + .byte 0xc + .byte 0x5 + .byte 0x4 + .byte 0x88 + .byte 0x1 + .align 2 +LECIE1: +.globl _ffi_call_SYSV.eh +_ffi_call_SYSV.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 + .long LFB1-. + .set L$set$2,LFE1-LFB1 + .long L$set$2 + .byte 0x0 + .byte 0x4 + .set L$set$3,LCFI0-LFB1 + .long L$set$3 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$4,LCFI1-LCFI0 + .long L$set$4 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE1: +.globl _ffi_closure_SYSV.eh +_ffi_closure_SYSV.eh: +LSFDE2: + .set L$set$5,LEFDE2-LASFDE2 + .long L$set$5 +LASFDE2: + .long LASFDE2-EH_frame1 + .long LFB2-. + .set L$set$6,LFE2-LFB2 + .long L$set$6 + .byte 0x0 + .byte 0x4 + .set L$set$7,LCFI2-LFB2 + .long L$set$7 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$8,LCFI3-LCFI2 + .long L$set$8 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE2: + +#if !FFI_NO_RAW_API + +.globl _ffi_closure_raw_SYSV.eh +_ffi_closure_raw_SYSV.eh: +LSFDE3: + .set L$set$10,LEFDE3-LASFDE3 + .long L$set$10 +LASFDE3: + .long LASFDE3-EH_frame1 + .long LFB3-. + .set L$set$11,LFE3-LFB3 + .long L$set$11 + .byte 0x0 + .byte 0x4 + .set L$set$12,LCFI4-LFB3 + .long L$set$12 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$13,LCFI5-LCFI4 + .long L$set$13 + .byte 0xd + .byte 0x4 + .byte 0x4 + .set L$set$14,LCFI6-LCFI5 + .long L$set$14 + .byte 0x85 + .byte 0x3 + .align 2 +LEFDE3: + +#endif + +#endif /* ifndef __x86_64__ */ + +#endif /* defined __i386__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c new file mode 100644 index 0000000..06feaf2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c @@ -0,0 +1,734 @@ +#ifdef __x86_64__ + +/* ----------------------------------------------------------------------- + x86-ffi64.c - Copyright (c) 2002 Bo Thorsen + + x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#define MAX_GPR_REGS 6 +#define MAX_SSE_REGS 8 + +typedef struct RegisterArgs { + /* Registers for argument passing. */ + UINT64 gpr[MAX_GPR_REGS]; + __int128_t sse[MAX_SSE_REGS]; +} RegisterArgs; + +extern void +ffi_call_unix64( + void* args, + unsigned long bytes, + unsigned flags, + void* raddr, + void (*fnaddr)(), + unsigned ssecount); + +/* All reference to register classes here is identical to the code in + gcc/config/i386/i386.c. Do *not* change one without the other. */ + +/* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +enum x86_64_reg_class +{ + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_COMPLEX_X87_CLASS, + X86_64_MEMORY_CLASS +}; + +#define MAX_CLASSES 4 +#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + +/* x86-64 register passing implementation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + +/* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ +static enum x86_64_reg_class +merge_classes( + enum x86_64_reg_class class1, + enum x86_64_reg_class class2) +{ + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, + MEMORY is used. */ + if (class1 == X86_64_X87_CLASS + || class1 == X86_64_X87UP_CLASS + || class1 == X86_64_COMPLEX_X87_CLASS + || class2 == X86_64_X87_CLASS + || class2 == X86_64_X87UP_CLASS + || class2 == X86_64_COMPLEX_X87_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; +} + +/* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + See the x86-64 PS ABI for details. */ + +static int +classify_argument( + ffi_type* type, + enum x86_64_reg_class classes[], + size_t byte_offset) +{ + switch (type->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_POINTER: +#if 0 + if (byte_offset + type->size <= 4) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + + return 1; +#else + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } +#endif + + case FFI_TYPE_FLOAT: + if (byte_offset == 0) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + + return 1; + + case FFI_TYPE_DOUBLE: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + + case FFI_TYPE_LONGDOUBLE: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + + case FFI_TYPE_STRUCT: + { + ffi_type** ptr; + int i; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + const int UNITS_PER_WORD = 8; + int words = + (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + /* If the struct is larger than 16 bytes, pass it on the stack. */ + if (type->size > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Merge the fields of structure. */ + for (ptr = type->elements; *ptr != NULL; ptr++) + { + byte_offset = ALIGN(byte_offset, (*ptr)->alignment); + + int num = classify_argument(*ptr, subclasses, byte_offset % 8); + + if (num == 0) + return 0; + + int pos = byte_offset / 8; + + for (i = 0; i < num; i++) + { + classes[i + pos] = + merge_classes(subclasses[i], classes[i + pos]); + } + + byte_offset += (*ptr)->size; + } + + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && classes[i - 1] != X86_64_X87_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + } + + return words; + } + + default: + FFI_ASSERT(0); + } + + return 0; /* Never reached. */ +} + +/* Examine the argument and return set number of register required in each + class. Return zero if parameter should be passed in memory, otherwise + the number of registers. */ +static int +examine_argument( + ffi_type* type, + enum x86_64_reg_class classes[MAX_CLASSES], + _Bool in_return, + int* pngpr, + int* pnsse) +{ + int n = classify_argument(type, classes, 0); + int ngpr = 0; + int nsse = 0; + int i; + + if (n == 0) + return 0; + + for (i = 0; i < n; ++i) + { + switch (classes[i]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + ngpr++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + nsse++; + break; + + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + case X86_64_COMPLEX_X87_CLASS: + return in_return != 0; + + default: + abort(); + } + } + + *pngpr = ngpr; + *pnsse = nsse; + + return n; +} + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + int gprcount = 0; + int ssecount = 0; + int flags = cif->rtype->type; + int i, avn, n, ngpr, nsse; + enum x86_64_reg_class classes[MAX_CLASSES]; + size_t bytes; + + if (flags != FFI_TYPE_VOID) + { + n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value is passed in memory. A pointer to that + memory is the first argument. Allocate a register for it. */ + gprcount++; + + /* We don't have to do anything in asm for the return. */ + flags = FFI_TYPE_VOID; + } + else if (flags == FFI_TYPE_STRUCT) + { + /* Mark which registers the result appears in. */ + _Bool sse0 = SSE_CLASS_P(classes[0]); + _Bool sse1 = n == 2 && SSE_CLASS_P(classes[1]); + + if (sse0 && !sse1) + flags |= 1 << 8; + else if (!sse0 && sse1) + flags |= 1 << 9; + else if (sse0 && sse1) + flags |= 1 << 10; + + /* Mark the true size of the structure. */ + flags |= cif->rtype->size << 12; + } + } + + /* Go over all arguments and determine the way they should be passed. + If it's in a register and there is space for it, let that be so. If + not, add it's size to the stack byte count. */ + for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) + { + if (examine_argument(cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = cif->arg_types[i]->alignment; + + if (align < 8) + align = 8; + + bytes = ALIGN(bytes, align); + bytes += cif->arg_types[i]->size; + } + else + { + gprcount += ngpr; + ssecount += nsse; + } + } + + if (ssecount) + flags |= 1 << 11; + + cif->flags = flags; + cif->bytes = bytes; + cif->bytes = ALIGN(bytes,8); + + return FFI_OK; +} + +void +ffi_call( + ffi_cif* cif, + void (*fn)(), + void* rvalue, + void** avalue) +{ + enum x86_64_reg_class classes[MAX_CLASSES]; + char* stack; + char* argp; + ffi_type** arg_types; + int gprcount, ssecount, ngpr, nsse, i, avn; + _Bool ret_in_memory; + RegisterArgs* reg_args; + + /* Can't call 32-bit mode from 64-bit mode. */ + FFI_ASSERT(cif->abi == FFI_UNIX64); + + /* If the return value is a struct and we don't have a return value + address then we need to make one. Note the setting of flags to + VOID above in ffi_prep_cif_machdep. */ + ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT + && (cif->flags & 0xff) == FFI_TYPE_VOID); + + if (rvalue == NULL && ret_in_memory) + rvalue = alloca (cif->rtype->size); + + /* Allocate the space for the arguments, plus 4 words of temp space. */ + stack = alloca(sizeof(RegisterArgs) + cif->bytes + 4 * 8); + reg_args = (RegisterArgs*)stack; + argp = stack + sizeof(RegisterArgs); + + gprcount = ssecount = 0; + + /* If the return value is passed in memory, add the pointer as the + first integer argument. */ + if (ret_in_memory) + reg_args->gpr[gprcount++] = (long) rvalue; + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + size_t size = arg_types[i]->size; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + memcpy (argp, avalue[i], size); + argp += size; + } + else + { /* The argument is passed entirely in registers. */ + char *a = (char *) avalue[i]; + int j; + + for (j = 0; j < n; j++, a += 8, size -= 8) + { + switch (classes[j]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + reg_args->gpr[gprcount] = 0; + switch (arg_types[i]->type) { + case FFI_TYPE_SINT8: + { + int8_t shortval = *(int8_t*)a; + int64_t actval = (int64_t)shortval; + reg_args->gpr[gprcount] = actval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + break; + } + + case FFI_TYPE_SINT16: + { + int16_t shortval = *(int16_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_SINT32: + { + int32_t shortval = *(int32_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT8: + { + u_int8_t shortval = *(u_int8_t*)a; + u_int64_t actval = (u_int64_t)shortval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + reg_args->gpr[gprcount] = actval; + break; + } + + case FFI_TYPE_UINT16: + { + u_int16_t shortval = *(u_int16_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT32: + { + u_int32_t shortval = *(u_int32_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + default: + //memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); + reg_args->gpr[gprcount] = *(int64_t*)a; + } + gprcount++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSEDF_CLASS: + reg_args->sse[ssecount++] = *(UINT64 *) a; + break; + + case X86_64_SSESF_CLASS: + reg_args->sse[ssecount++] = *(UINT32 *) a; + break; + + default: + abort(); + } + } + } + } + + ffi_call_unix64 (stack, cif->bytes + sizeof(RegisterArgs), + cif->flags, rvalue, fn, ssecount); +} + +extern void ffi_closure_unix64(void); + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + if (cif->abi != FFI_UNIX64) + return FFI_BAD_ABI; + + volatile unsigned short* tramp = + (volatile unsigned short*)&closure->tramp[0]; + + tramp[0] = 0xbb49; /* mov , %r11 */ + *(void* volatile*)&tramp[1] = ffi_closure_unix64; + tramp[5] = 0xba49; /* mov , %r10 */ + *(void* volatile*)&tramp[6] = closure; + + /* Set the carry bit if the function uses any sse registers. + This is clc or stc, together with the first byte of the jmp. */ + tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + tramp[11] = 0xe3ff; /* jmp *%r11 */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmissing-prototypes" +int +ffi_closure_unix64_inner( + ffi_closure* closure, + void* rvalue, + RegisterArgs* reg_args, + char* argp) +#pragma clang diagnostic pop +{ + ffi_cif* cif = closure->cif; + void** avalue = alloca(cif->nargs * sizeof(void *)); + ffi_type** arg_types; + long i, avn; + int gprcount = 0; + int ssecount = 0; + int ngpr, nsse; + int ret; + + ret = cif->rtype->type; + + if (ret != FFI_TYPE_VOID) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value goes in memory. Arrange for the closure + return value to go directly back to the original caller. */ + rvalue = (void *) reg_args->gpr[gprcount++]; + + /* We don't have to do anything in asm for the return. */ + ret = FFI_TYPE_VOID; + } + else if (ret == FFI_TYPE_STRUCT && n == 2) + { + /* Mark which register the second word of the structure goes in. */ + _Bool sse0 = SSE_CLASS_P (classes[0]); + _Bool sse1 = SSE_CLASS_P (classes[1]); + + if (!sse0 && sse1) + ret |= 1 << 8; + else if (sse0 && !sse1) + ret |= 1 << 9; + } + } + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + avalue[i] = argp; + argp += arg_types[i]->size; + } + +#if !defined(X86_DARWIN) + /* If the argument is in a single register, or two consecutive + registers, then we can use that address directly. */ + else if (n == 1 || (n == 2 && + SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + { + // The argument is in a single register. + if (SSE_CLASS_P (classes[0])) + { + avalue[i] = ®_args->sse[ssecount]; + ssecount += n; + } + else + { + avalue[i] = ®_args->gpr[gprcount]; + gprcount += n; + } + } +#endif + + /* Otherwise, allocate space to make them consecutive. */ + else + { + char *a = alloca (16); + int j; + + avalue[i] = a; + + for (j = 0; j < n; j++, a += 8) + { + if (SSE_CLASS_P (classes[j])) + memcpy (a, ®_args->sse[ssecount++], 8); + else + memcpy (a, ®_args->gpr[gprcount++], 8); + } + } + } + + /* Invoke the closure. */ + closure->fun (cif, rvalue, avalue, closure->user_data); + + /* Tell assembly how to perform return type promotions. */ + return ret; +} + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c new file mode 100644 index 0000000..706ea0f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c @@ -0,0 +1,438 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2002 Bo Thorsen + Copyright (c) 2002 Roger Sayle + + x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void ffi_prep_args(char *stack, extended_cif *ecif); + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if (ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void **) argp = ecif->rvalue; + argp += 4; + } + + p_argv = ecif->avalue; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + i != 0; + i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) + argp = (char *) ALIGN(argp, sizeof(int)); + + z = (*p_arg)->size; + if (z < sizeof(int)) + { + z = sizeof(int); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } + else + { + memcpy(argp, *p_argv, z); + } + p_argv++; + argp += z; + } + + return; +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Set the return type flag */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: +#ifdef X86 + case FFI_TYPE_STRUCT: + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: +#endif + + case FFI_TYPE_SINT64: + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_UINT64: + cif->flags = FFI_TYPE_SINT64; + break; + +#ifndef X86 + case FFI_TYPE_STRUCT: + if (cif->rtype->size == 1) + { + cif->flags = FFI_TYPE_SINT8; /* same as char size */ + } + else if (cif->rtype->size == 2) + { + cif->flags = FFI_TYPE_SINT16; /* same as short size */ + } + else if (cif->rtype->size == 4) + { + cif->flags = FFI_TYPE_INT; /* same as int type */ + } + else if (cif->rtype->size == 8) + { + cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ + } + else + { + cif->flags = FFI_TYPE_STRUCT; + } + break; +#endif + + default: + cif->flags = FFI_TYPE_INT; + break; + } + +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + + return FFI_OK; +} + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#endif /* X86_WIN32 */ + +void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->flags == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, + fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + + +/** private members **/ + +static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) +__attribute__ ((regparm(1))); +unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) +__attribute__ ((regparm(1))); +void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) +__attribute__ ((regparm(1))); + +/* This function is jumped to by the trampoline */ + +unsigned int FFI_HIDDEN +ffi_closure_SYSV_inner (closure, respp, args) +ffi_closure *closure; +void **respp; +void *args; +{ + // our various things... + ffi_cif *cif; + void **arg_area; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will re-set RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun) (cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +static void +ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, + ffi_cif *cif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if ( cif->flags == FFI_TYPE_STRUCT ) { + *rvalue = *(void **) argp; + argp += 4; + } + + p_argv = avalue; + + for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, sizeof(int)); + } + + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + + p_argv++; + argp += z; + } + + return; +} + +/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ + +#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ +({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +unsigned int __fun = (unsigned int)(FUN); \ +unsigned int __ctx = (unsigned int)(CTX); \ +unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \ +*(unsigned char*) &__tramp[0] = 0xb8; \ +*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ +*(unsigned char *) &__tramp[5] = 0xe9; \ +*(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ +}) + + +/* the cif must already be prep'ed */ +ffi_status +ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data) +{ + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ + &ffi_closure_SYSV, \ + (void*)closure); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +/* ------- Native raw API support -------------------------------- */ + +#if !FFI_NO_RAW_API + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + int i; + + FFI_ASSERT (cif->abi == FFI_SYSV); + + // we currently don't support certain kinds of arguments for raw + // closures. This should be implemented by a separate assembly language + // routine, since it would require argument processing, something we + // don't do now for performance. + + for (i = cif->nargs-1; i >= 0; i--) + { + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); + } + + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, + codeloc); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +static void +ffi_prep_args_raw(char *stack, extended_cif *ecif) +{ + memcpy (stack, ecif->avalue, ecif->cif->bytes); +} + +/* we borrow this routine from libffi (it must be changed, though, to + * actually call the function passed in the first argument. as of + * libffi-1.20, this is not the case.) + */ + +extern void +ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void +ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); +#endif /* X86_WIN32 */ + +void +ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue) +{ + extended_cif ecif; + void **avalue = (void **)fake_avalue; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + +#endif +#endif // __i386__ diff -r -u ./setup.py ./setup.py index 46b92fe..2bf6b4b 100644 --- ./setup.py +++ ./setup.py @@ -98,8 +98,14 @@ class PyBuildExt(build_ext): self.detect_modules() # Remove modules that are present on the disabled list - self.extensions = [ext for ext in self.extensions - if ext.name not in disabled_module_list] + extensions = [ext for ext in self.extensions + if ext.name not in disabled_module_list] + # move ctypes to the end, it depends on other modules + ext_map = dict((ext.name, i) for i, ext in enumerate(extensions)) + if "_ctypes" in ext_map: + ctypes = extensions.pop(ext_map["_ctypes"]) + extensions.append(ctypes) + self.extensions = extensions # Fix up the autodetected modules, prefixing all the source files # with Modules/ and adding Python's include directory to the path. @@ -1330,9 +1336,39 @@ class PyBuildExt(build_ext): # *** Uncomment these for TOGL extension only: # -lGL -lGLU -lXext -lXmu \ + def configure_ctypes_darwin(self, ext): + # Darwin (OS X) uses preconfigured files, in + # the Modules/_ctypes/libffi_osx directory. + srcdir = sysconfig.get_config_var('srcdir') + ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', + '_ctypes', 'libffi_osx')) + sources = [os.path.join(ffi_srcdir, p) + for p in ['ffi.c', + 'x86/darwin64.S', + 'x86/x86-darwin.S', + 'x86/x86-ffi_darwin.c', + 'x86/x86-ffi64.c', + 'powerpc/ppc-darwin.S', + 'powerpc/ppc-darwin_closure.S', + 'powerpc/ppc-ffi_darwin.c', + 'powerpc/ppc64-darwin_closure.S', + ]] + + # Add .S (preprocessed assembly) to C compiler source extensions. + self.compiler.src_extensions.append('.S') + + include_dirs = [os.path.join(ffi_srcdir, 'include'), + os.path.join(ffi_srcdir, 'powerpc')] + ext.include_dirs.extend(include_dirs) + ext.sources.extend(sources) + return True + def configure_ctypes(self, ext): if not self.use_system_libffi: - (srcdir,) = sysconfig.get_config_vars('srcdir') + if sys.platform == 'darwin': + return self.configure_ctypes_darwin(ext) + + srcdir = sysconfig.get_config_var('srcdir') ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', '_ctypes', 'libffi')) @@ -1347,7 +1383,10 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = [arg for arg in sysconfig.get_config_var("CONFIG_ARGS").split() + if (('--host=' in arg) or ('--build=' in arg))] + if not self.verbose: + config_args.append("-q") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. @@ -1367,10 +1406,12 @@ class PyBuildExt(build_ext): self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), - ffi_builddir, ffi_srcdir] + ffi_builddir, + os.path.join(ffi_srcdir, 'src')] extra_compile_args = fficonfig['ffi_cflags'].split() - ext.sources.extend(fficonfig['ffi_sources']) + ext.sources.extend(os.path.join(ffi_srcdir, f) for f in + fficonfig['ffi_sources']) ext.include_dirs.extend(include_dirs) ext.extra_compile_args.extend(extra_compile_args) return True @@ -1390,6 +1431,7 @@ class PyBuildExt(build_ext): if sys.platform == 'darwin': sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') # XXX Is this still needed? ## extra_link_args.extend(['-read_only_relocs', 'warning']) @@ -1419,7 +1461,14 @@ class PyBuildExt(build_ext): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = find_file('ffi.h', [], inc_dirs) + if sys.platform == 'darwin': + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + if not ffi_inc or ffi_inc[0] == '': + ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' fp = open(ffi_h) 005_osx_failed_modules.patch000066400000000000000000000076331476513315000337270ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.1/Python-2.5.1diff -r -u ./Mac/Modules/cg/_CGmodule.c ./Mac/Modules/cg/_CGmodule.c index 8115614..e36fce9 100755 --- ./Mac/Modules/cg/_CGmodule.c +++ ./Mac/Modules/cg/_CGmodule.c @@ -1025,6 +1025,7 @@ static PyObject *CGContextRefObj_CGContextSetShouldAntialias(CGContextRefObject return _res; } +#ifndef __LP64__ static PyObject *CGContextRefObj_SyncCGContextOriginWithPort(CGContextRefObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1055,6 +1056,7 @@ static PyObject *CGContextRefObj_ClipCGContextToRegion(CGContextRefObject *_self _res = Py_None; return _res; } +#endif static PyMethodDef CGContextRefObj_methods[] = { {"CGContextSaveGState", (PyCFunction)CGContextRefObj_CGContextSaveGState, 1, @@ -1173,10 +1175,12 @@ static PyMethodDef CGContextRefObj_methods[] = { PyDoc_STR("() -> None")}, {"CGContextSetShouldAntialias", (PyCFunction)CGContextRefObj_CGContextSetShouldAntialias, 1, PyDoc_STR("(int shouldAntialias) -> None")}, +#ifndef __LP64__ {"SyncCGContextOriginWithPort", (PyCFunction)CGContextRefObj_SyncCGContextOriginWithPort, 1, PyDoc_STR("(CGrafPtr port) -> None")}, {"ClipCGContextToRegion", (PyCFunction)CGContextRefObj_ClipCGContextToRegion, 1, PyDoc_STR("(Rect portRect, RgnHandle region) -> None")}, +#endif {NULL, NULL, 0} }; @@ -1254,6 +1258,7 @@ PyTypeObject CGContextRef_Type = { /* ------------------ End object type CGContextRef ------------------ */ +#ifndef __LP64__ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1271,10 +1276,13 @@ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) return _res; } +#endif static PyMethodDef CG_methods[] = { +#ifndef __LP64__ {"CreateCGContextForPort", (PyCFunction)CG_CreateCGContextForPort, 1, PyDoc_STR("(CGrafPtr) -> CGContextRef")}, +#endif {NULL, NULL, 0} }; diff -r -u ./Modules/_curses_panel.c ./Modules/_curses_panel.c index 0acf3fd..1728b59 100644 --- ./Modules/_curses_panel.c +++ ./Modules/_curses_panel.c @@ -56,7 +56,7 @@ typedef struct { PyTypeObject PyCursesPanel_Type; -#define PyCursesPanel_Check(v) ((v)->ob_type == &PyCursesPanel_Type) +#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type) /* Some helper functions. The problem is that there's always a window associated with a panel. To ensure that Python's GC doesn't pull @@ -178,12 +178,13 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo) po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); - return NULL; + po->wo = NULL; + Py_DECREF(po); + return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ static void PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } @@ -338,11 +341,10 @@ PyCursesPanel_GetAttr(PyCursesPanelObject *self, char *name) /* -------------------------------------------------------*/ PyTypeObject PyCursesPanel_Type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "_curses_panel.curses panel", /*tp_name*/ - sizeof(PyCursesPanelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + "_curses_panel.curses panel", /*tp_name*/ + sizeof(PyCursesPanelObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/ 0, /*tp_print*/ @@ -458,7 +460,7 @@ init_curses_panel(void) PyObject *m, *d, *v; /* Initialize object type */ - PyCursesPanel_Type.ob_type = &PyType_Type; + Py_TYPE(&PyCursesPanel_Type) = &PyType_Type; import_curses(); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/Python-2.5.2/000077500000000000000000000000001476513315000265255ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325440ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/Python-2.5.2--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-svnversion.patch000066400000000000000000000023661476513315000333670ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/Python-2.5.2--- configure.in +++ configure.in @@ -767,7 +767,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in --- Makefile.pre.in +++ Makefile.pre.in @@ -501,7 +501,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ --- Modules/getbuildinfo.c +++ Modules/getbuildinfo.c @@ -48,5 +48,5 @@ static const char svnversion[] = SVNVERSION; if (svnversion[0] != '$') return svnversion; /* it was interpolated, or passed on command line */ - return "exported"; + return "Unversioned directory"; } --- Python/sysmodule.c +++ Python/sysmodule.c @@ -1161,7 +1161,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0 && strcmp(svnversion, "exported") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); 002_darwin_c_source.patch000066400000000000000000000132671476513315000332270ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/Python-2.5.2diff -r -u ./configure ../Python-2.5/configure --- ./configure 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure 2013-07-19 15:27:46.000000000 +0900 @@ -1396,6 +1396,16 @@ _ACEOF +# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable +# them. + +cat >>confdefs.h <<\_ACEOF +#define _DARWIN_C_SOURCE 1 +_ACEOF + + + define_xopen_source=yes # Arguments passed to configure. @@ -3885,11 +3895,110 @@ ;; # is there any other compiler on Darwin besides gcc? Darwin*) - BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" + # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd + # used to be here, but non-Apple gcc doesn't accept them. + if test "${CC}" = gcc + then + { echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +echo -n "checking which compiler should be used... " >&6; } + case "${UNIVERSALSDK}" in + */MacOSX10.4u.sdk) + # Build using 10.4 SDK, force usage of gcc when the + # compiler is gcc, otherwise the user will get very + # confusing error messages when building on OSX 10.6 + CC=gcc-4.0 + CPP=cpp-4.0 + ;; + esac + { echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +echo "$CC" >&6; } + fi + + if test "${enable_universalsdk}"; then - BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + UNIVERSAL_ARCH_FLAGS="" + if test "$UNIVERSAL_ARCHS" = "32-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" + ARCH_RUN_32BIT="" + LIPO_32BIT_FLAGS="" + elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + + elif test "$UNIVERSAL_ARCHS" = "all" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + elif test "$UNIVERSAL_ARCHS" = "intel" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386" + + elif test "$UNIVERSAL_ARCHS" = "3-way" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + else + as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + + fi + + + CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}" + if test "${UNIVERSALSDK}" != "/" + then + CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}" + LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}" + CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}" + fi fi + # Calculate the right deployment target for this build. + # + cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` + if test ${cur_target} '>' 10.2 && \ + test ${cur_target} '<' 10.6 + then + cur_target=10.3 + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "3-way"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "intel"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then + cur_target='10.5' + fi + else + if test `/usr/bin/arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi + fi + CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} + + # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the + # environment with a value that is the same as what we'll use + # in the Makefile to ensure that we'll get the same compiler + # environment during configure and build time. + MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" + export MACOSX_DEPLOYMENT_TARGET + EXPORT_MACOSX_DEPLOYMENT_TARGET='' + ;; OSF*) BASECFLAGS="$BASECFLAGS -mieee" @@ -10851,7 +10960,7 @@ if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -10863,7 +10972,7 @@ else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac diff -r -u ./pyconfig.h.in ../Python-2.5/pyconfig.h.in --- ./pyconfig.h.in 2006-07-30 23:09:47.000000000 +0900 +++ ../Python-2.5/pyconfig.h.in 2013-07-17 23:12:31.000000000 +0900 @@ -912,6 +912,11 @@ /* Define on Irix to enable u_int */ #undef _BSD_TYPES +/* Define on Darwin to activate all library features */ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE +#endif + /* This must be set to 64 on some systems to enable large file support. */ #undef _FILE_OFFSET_BITS pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/Python-2.5.2/003_osx_lp64.patch000066400000000000000000000215441476513315000316140ustar00rootroot00000000000000diff -r -u ./Include/pymactoolbox.h ../Python-2.5/Include/pymactoolbox.h --- ./Include/pymactoolbox.h 2004-11-05 16:02:59.000000000 +0900 +++ ../Python-2.5/Include/pymactoolbox.h 2013-07-17 23:38:51.000000000 +0900 @@ -8,7 +8,10 @@ #endif #include + +#ifndef __LP64__ #include +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +21,11 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* __LP64__ */ + /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,8 +89,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +109,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +169,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +178,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); diff -r -u ./Mac/Modules/res/_Resmodule.c ../Python-2.5/Mac/Modules/res/_Resmodule.c --- ./Mac/Modules/res/_Resmodule.c 2005-07-04 05:59:44.000000000 +0900 +++ ../Python-2.5/Mac/Modules/res/_Resmodule.c 2013-07-17 23:38:51.000000000 +0900 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -1152,6 +1154,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1290,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1331,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1418,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1444,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1541,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* __LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1645,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1656,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1670,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* __LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* __LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, diff -r -u ./Modules/_ctypes/libffi/src/darwin/ffitarget.h ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h --- ./Modules/_ctypes/libffi/src/darwin/ffitarget.h 2006-05-26 06:58:05.000000000 +0900 +++ ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h 2013-07-17 23:38:51.000000000 +0900 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN diff -r -u ./Python/mactoolboxglue.c ../Python-2.5/Python/mactoolboxglue.c --- ./Python/mactoolboxglue.c 2006-07-12 01:44:25.000000000 +0900 +++ ../Python-2.5/Python/mactoolboxglue.c 2013-07-17 23:39:09.000000000 +0900 @@ -106,6 +106,7 @@ } +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +154,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +419,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +432,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/Python-2.5.2/004_osx_libffi.patch000066400000000000000000005661361476513315000322760ustar00rootroot00000000000000diff -r -u ./Modules/_ctypes/libffi_osx/LICENSE ./Modules/_ctypes/libffi_osx/LICENSE new file mode 100644 index 0000000..f591795 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/LICENSE @@ -0,0 +1,20 @@ +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff -r -u ./Modules/_ctypes/libffi_osx/README ./Modules/_ctypes/libffi_osx/README new file mode 100644 index 0000000..1fc2747 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README @@ -0,0 +1,500 @@ +This directory contains the libffi package, which is not part of GCC but +shipped with GCC as convenience. + +Status +====== + +libffi-2.00 has not been released yet! This is a development snapshot! + +libffi-1.20 was released on October 5, 1998. Check the libffi web +page for updates: . + + +What is libffi? +=============== + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. Libffi can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The libffi library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + +Ffi stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +libffi library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above libffi that handles type conversions for values passed +between the two languages. + + +Supported Platforms and Prerequisites +===================================== + +Libffi has been ported to: + + SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) + + Irix 5.3 & 6.2 (System V/o32 & n32) + + Intel x86 - Linux (System V ABI) + + Alpha - Linux and OSF/1 + + m68k - Linux (System V ABI) + + PowerPC - Linux (System V ABI, Darwin, AIX) + + ARM - Linux (System V ABI) + +Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are +that other versions will work. Libffi has also been built and tested +with the SGI compiler tools. + +On PowerPC, the tests failed (see the note below). + +You must use GNU make to build libffi. SGI's make will not work. +Sun's probably won't either. + +If you port libffi to another platform, please let me know! I assume +that some will be easy (x86 NetBSD), and others will be more difficult +(HP). + + +Installing libffi +================= + +[Note: before actually performing any of these installation steps, + you may wish to read the "Platform Specific Notes" below.] + +First you must configure the distribution for your particular +system. Go to the directory you wish to build libffi in and run the +"configure" program found in the root directory of the libffi source +distribution. + +You may want to tell configure where to install the libffi library and +header files. To do that, use the --prefix configure switch. Libffi +will install under /usr/local by default. + +If you want to enable extra run-time debugging checks use the the +--enable-debug configure switch. This is useful when your program dies +mysteriously while using libffi. + +Another useful configure switch is --enable-purify-safety. Using this +will add some extra code which will suppress certain warnings when you +are using Purify with libffi. Only use this switch when using +Purify, as it will slow down the library. + +Configure has many other options. Use "configure --help" to see them all. + +Once configure has finished, type "make". Note that you must be using +GNU make. SGI's make will not work. Sun's probably won't either. +You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. + +To ensure that libffi is working as advertised, type "make test". + +To install the library and header files, type "make install". + + +Using libffi +============ + + The Basics + ---------- + +Libffi assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, +as well as the return type of the function. + +The first thing you must do is create an ffi_cif object that matches +the signature of the function you wish to call. The cif in ffi_cif +stands for Call InterFace. To prepare a call interface object, use the +following function: + +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, ffi_type **atypes); + + CIF is a pointer to the call interface object you wish + to initialize. + + ABI is an enum that specifies the calling convention + to use for the call. FFI_DEFAULT_ABI defaults + to the system's native calling convention. Other + ABI's may be used with care. They are system + specific. + + NARGS is the number of arguments this function accepts. + libffi does not yet support vararg functions. + + RTYPE is a pointer to an ffi_type structure that represents + the return type of the function. Ffi_type objects + describe the types of values. libffi provides + ffi_type objects for many of the native C types: + signed int, unsigned int, signed char, unsigned char, + etc. There is also a pointer ffi_type object and + a void ffi_type. Use &ffi_type_void for functions that + don't return values. + + ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. + If NARGS is 0, this is ignored. + + +ffi_prep_cif will return a status code that you are responsible +for checking. It will be one of the following: + + FFI_OK - All is good. + + FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif + came across is bad. + + +Before making the call, the VALUES vector should be initialized +with pointers to the appropriate argument values. + +To call the function using the initialized ffi_cif, use the +ffi_call function: + +void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); + + CIF is a pointer to the ffi_cif initialized specifically + for this function. + + FN is a pointer to the function you want to call. + + RVALUE is a pointer to a chunk of memory that is to hold the + result of the function call. Currently, it must be + at least one word in size (except for the n32 version + under Irix 6.x, which must be a pointer to an 8 byte + aligned value (a long long). It must also be at least + word aligned (depending on the return type, and the + system's alignment requirements). If RTYPE is + &ffi_type_void, this is ignored. If RVALUE is NULL, + the return value is discarded. + + AVALUES is a vector of void* that point to the memory locations + holding the argument values for a call. + If NARGS is 0, this is ignored. + + +If you are expecting a return value from FN it will have been stored +at RVALUE. + + + + An Example + ---------- + +Here is a trivial example that calls puts() a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_uint; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + + + Aggregate Types + --------------- + +Although libffi has no special support for unions or bit-fields, it is +perfectly happy passing structures back and forth. You must first +describe the structure to libffi by creating a new ffi_type object +for it. Here is the definition of ffi_type: + + typedef struct _ffi_type + { + unsigned size; + short alignment; + short type; + struct _ffi_type **elements; + } ffi_type; + +All structures must have type set to FFI_TYPE_STRUCT. You may set +size and alignment to 0. These will be calculated and reset to the +appropriate values by ffi_prep_cif(). + +elements is a NULL terminated array of pointers to ffi_type objects +that describe the type of the structure elements. These may, in turn, +be structure elements. + +The following example initializes a ffi_type object representing the +tm struct from Linux's time.h: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + + +Platform Specific Notes +======================= + + Intel x86 + --------- + +There are no known problems with the x86 port. + + Sun SPARC - SunOS 4.1.3 & Solaris 2.x + ------------------------------------- + +You must use GNU Make to build libffi on Sun platforms. + + MIPS - Irix 5.3 & 6.x + --------------------- + +Irix 6.2 and better supports three different calling conventions: o32, +n32 and n64. Currently, libffi only supports both o32 and n32 under +Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be +configured for whichever calling convention it was built for. + +By default, the configure script will try to build libffi with the GNU +development tools. To build libffi with the SGI development tools, set +the environment variable CC to either "cc -32" or "cc -n32" before +running configure under Irix 6.x (depending on whether you want an o32 +or n32 library), or just "cc" for Irix 5.3. + +With the n32 calling convention, when returning structures smaller +than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. +Here's one way of forcing this: + + double struct_storage[2]; + my_small_struct *s = (my_small_struct *) struct_storage; + /* Use s for RVALUE */ + +If you don't do this you are liable to get spurious bus errors. + +"long long" values are not supported yet. + +You must use GNU Make to build libffi on SGI platforms. + + ARM - System V ABI + ------------------ + +The ARM port was performed on a NetWinder running ARM Linux ELF +(2.0.31) and gcc 2.8.1. + + + + PowerPC System V ABI + -------------------- + +There are two `System V ABI's which libffi implements for PowerPC. +They differ only in how small structures are returned from functions. + +In the FFI_SYSV version, structures that are 8 bytes or smaller are +returned in registers. This is what GCC does when it is configured +for solaris, and is what the System V ABI I have (dated September +1995) says. + +In the FFI_GCC_SYSV version, all structures are returned the same way: +by passing a pointer as the first argument to the function. This is +what GCC does when it is configured for linux or a generic sysv +target. + +EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a +inconsistency with the SysV ABI: When a procedure is called with many +floating-point arguments, some of them get put on the stack. They are +all supposed to be stored in double-precision format, even if they are +only single-precision, but EGCS stores single-precision arguments as +single-precision anyway. This causes one test to fail (the `many +arguments' test). + + +What's With The Crazy Comments? +=============================== + +You might notice a number of cryptic comments in the code, delimited +by /*@ and @*/. These are annotations read by the program LCLint, a +tool for statically checking C programs. You can read all about it at +. + + +History +======= + +1.20 Oct-5-98 + Raffaele Sena produces ARM port. + +1.19 Oct-5-98 + Fixed x86 long double and long long return support. + m68k bug fixes from Andreas Schwab. + Patch for DU assembler compatibility for the Alpha from Richard + Henderson. + +1.18 Apr-17-98 + Bug fixes and MIPS configuration changes. + +1.17 Feb-24-98 + Bug fixes and m68k port from Andreas Schwab. PowerPC port from + Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + +1.16 Feb-11-98 + Richard Henderson produces Alpha port. + +1.15 Dec-4-97 + Fixed an n32 ABI bug. New libtool, auto* support. + +1.14 May-13-97 + libtool is now used to generate shared and static libraries. + Fixed a minor portability problem reported by Russ McManus + . + +1.13 Dec-2-96 + Added --enable-purify-safety to keep Purify from complaining + about certain low level code. + Sparc fix for calling functions with < 6 args. + Linux x86 a.out fix. + +1.12 Nov-22-96 + Added missing ffi_type_void, needed for supporting void return + types. Fixed test case for non MIPS machines. Cygnus Support + is now Cygnus Solutions. + +1.11 Oct-30-96 + Added notes about GNU make. + +1.10 Oct-29-96 + Added configuration fix for non GNU compilers. + +1.09 Oct-29-96 + Added --enable-debug configure switch. Clean-ups based on LCLint + feedback. ffi_mips.h is always installed. Many configuration + fixes. Fixed ffitest.c for sparc builds. + +1.08 Oct-15-96 + Fixed n32 problem. Many clean-ups. + +1.07 Oct-14-96 + Gordon Irlam rewrites v8.S again. Bug fixes. + +1.06 Oct-14-96 + Gordon Irlam improved the sparc port. + +1.05 Oct-14-96 + Interface changes based on feedback. + +1.04 Oct-11-96 + Sparc port complete (modulo struct passing bug). + +1.03 Oct-10-96 + Passing struct args, and returning struct values works for + all architectures/calling conventions. Expanded tests. + +1.02 Oct-9-96 + Added SGI n32 support. Fixed bugs in both o32 and Linux support. + Added "make test". + +1.01 Oct-8-96 + Fixed float passing bug in mips version. Restructured some + of the code. Builds cleanly with SGI tools. + +1.00 Oct-7-96 + First release. No public announcement. + + +Authors & Credits +================= + +libffi was written by Anthony Green . + +Portions of libffi were derived from Gianni Mariani's free gencall +library for Silicon Graphics machines. + +The closure mechanism was designed and implemented by Kresten Krab +Thorup. + +The Sparc port was derived from code contributed by the fine folks at +Visible Decisions Inc . Further enhancements were +made by Gordon Irlam at Cygnus Solutions . + +The Alpha port was written by Richard Henderson at Cygnus Solutions. + +Andreas Schwab ported libffi to m68k Linux and provided a number of +bug fixes. + +Geoffrey Keating ported libffi to the PowerPC. + +Raffaele Sena ported libffi to the ARM. + +Jesper Skov and Andrew Haley both did more than their fair share of +stepping through the code and tracking down bugs. + +Thanks also to Tom Tromey for bug fixes and configuration help. + +Thanks to Jim Blandy, who provided some useful feedback on the libffi +interface. + +If you have a problem, or have found a bug, please send a note to +green@cygnus.com. diff -r -u ./Modules/_ctypes/libffi_osx/README.pyobjc ./Modules/_ctypes/libffi_osx/README.pyobjc new file mode 100644 index 0000000..405d85f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README.pyobjc @@ -0,0 +1,5 @@ +This directory contains a slightly modified version of libffi, extracted from +the GCC source-tree. + +The only modifications are those that are necessary to compile libffi using +the Apple provided compiler and outside of the GCC source tree. diff -r -u ./Modules/_ctypes/libffi_osx/ffi.c ./Modules/_ctypes/libffi_osx/ffi.c new file mode 100644 index 0000000..bf42093 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/ffi.c @@ -0,0 +1,226 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +/* Round up to FFI_SIZEOF_ARG. */ +#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + +/* Perform machine independent initialization of aggregate type + specifications. */ + +static ffi_status +initialize_aggregate( +/*@out@*/ ffi_type* arg) +{ +/*@-usedef@*/ + + if (arg == NULL || arg->elements == NULL || + arg->size != 0 || arg->alignment != 0) + return FFI_BAD_TYPEDEF; + + ffi_type** ptr = &(arg->elements[0]); + + while ((*ptr) != NULL) + { + if (((*ptr)->size == 0) && (initialize_aggregate(*ptr) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#ifdef POWERPC_DARWIN + int curalign = (*ptr)->alignment; + + if (ptr != &(arg->elements[0])) + { + if (curalign > 4 && curalign != 16) + curalign = 4; + } + + arg->size = ALIGN(arg->size, curalign); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > curalign) ? + arg->alignment : curalign; +#else + arg->size = ALIGN(arg->size, (*ptr)->alignment); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > (*ptr)->alignment) ? + arg->alignment : (*ptr)->alignment; +#endif + + ptr++; + } + + /* Structure size includes tail padding. This is important for + structures that fit in one register on ABIs like the PowerPC64 + Linux ABI that right justify small structs in a register. + It's also needed for nested structure layout, for example + struct A { long a; char b; }; struct B { struct A x; char y; }; + should find y at an offset of 2*sizeof(long) and result in a + total size of 3*sizeof(long). */ + arg->size = ALIGN(arg->size, arg->alignment); + + if (arg->size == 0) + return FFI_BAD_TYPEDEF; + + return FFI_OK; + +/*@=usedef@*/ +} + +#ifndef __CRIS__ +/* The CRIS ABI specifies structure elements to have byte + alignment only, so it completely overrides this functions, + which assumes "natural" alignment and padding. */ + +/* Perform machine independent ffi_cif preparation, then call + machine dependent routine. */ + +#if defined(X86_DARWIN) + +static inline bool +struct_on_stack( + int size) +{ + if (size > 8) + return true; + + /* This is not what the ABI says, but is what is really implemented */ + switch (size) + { + case 1: + case 2: + case 4: + case 8: + return false; + + default: + return true; + } +} + +#endif // defined(X86_DARWIN) + +// Arguments' ffi_type->alignment must be nonzero. +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes) +{ + if (cif == NULL) + return FFI_BAD_TYPEDEF; + + if (abi <= FFI_FIRST_ABI || abi > FFI_DEFAULT_ABI) + return FFI_BAD_ABI; + + unsigned int bytes = 0; + unsigned int i; + ffi_type** ptr; + + cif->abi = abi; + cif->arg_types = atypes; + cif->nargs = nargs; + cif->rtype = rtype; + cif->flags = 0; + + /* Initialize the return type if necessary */ + /*@-usedef@*/ + if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) + return FFI_BAD_TYPEDEF; + /*@=usedef@*/ + + /* Perform a sanity check on the return type */ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT +#ifdef SPARC + && (cif->abi != FFI_V9 || cif->rtype->size > 32) +#endif +#ifdef X86_DARWIN + && (struct_on_stack(cif->rtype->size)) +#endif + ) + bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + /* Initialize any uninitialized aggregate type definitions */ + if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + if ((*ptr)->alignment == 0) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type, do this + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#if defined(X86_DARWIN) + { + int align = (*ptr)->alignment; + + if (align > 4) + align = 4; + + if ((align - 1) & bytes) + bytes = ALIGN(bytes, align); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#elif !defined __x86_64__ && !defined S390 && !defined PA +#ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) + || ((*ptr)->type == FFI_TYPE_LONGDOUBLE + && cif->abi != FFI_V9)) + bytes += sizeof(void*); + else +#endif + { + /* Add any padding if necessary */ + if (((*ptr)->alignment - 1) & bytes) + bytes = ALIGN(bytes, (*ptr)->alignment); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#endif + } + + cif->bytes = bytes; + + /* Perform machine dependent cif processing */ + return ffi_prep_cif_machdep(cif); +} +#endif /* not __CRIS__ */ diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi.h ./Modules/_ctypes/libffi_osx/include/ffi.h new file mode 100644 index 0000000..c104a5c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi.h @@ -0,0 +1,355 @@ +/* -----------------------------------------------------------------*-C-*- + libffi PyOBJC - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and closure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifdef MACOSX +# if defined(__i386__) || defined(__x86_64__) +# define X86_DARWIN +# elif defined(__ppc__) || defined(__ppc64__) +# define POWERPC_DARWIN +# else +# error "Unsupported MacOS X CPU type" +# endif +#else +#error "Unsupported OS type" +#endif + +/* ---- System configuration information --------------------------------- */ + +#include "ffitarget.h" +#include "fficonfig.h" + +#ifndef LIBFFI_ASM + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# endif +#endif + +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +#error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +#error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +#error "int size not supported" +#endif + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != 9223372036854775807 +# error "no 64-bit data type supported" +# endif +#elif LONG_MAX != 9223372036854775807 +#error "long size not supported" +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t + can hold a pointer. */ + +typedef struct _ffi_type { + size_t size; + unsigned short alignment; + unsigned short type; +/*@null@*/ struct _ffi_type** elements; +} ffi_type; + +/* These are defined in types.c */ +extern ffi_type ffi_type_void; +extern ffi_type ffi_type_uint8; +extern ffi_type ffi_type_sint8; +extern ffi_type ffi_type_uint16; +extern ffi_type ffi_type_sint16; +extern ffi_type ffi_type_uint32; +extern ffi_type ffi_type_sint32; +extern ffi_type ffi_type_uint64; +extern ffi_type ffi_type_sint64; +extern ffi_type ffi_type_float; +extern ffi_type ffi_type_double; +extern ffi_type ffi_type_longdouble; +extern ffi_type ffi_type_pointer; + +typedef enum ffi_status { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct ffi_cif { + ffi_abi abi; + unsigned nargs; +/*@dependent@*/ ffi_type** arg_types; +/*@dependent@*/ ffi_type* rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +void +ffi_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_raw_size( + ffi_cif* cif); + +/* This is analogous to the raw API, except it uses Java parameter + packing, even on 64-bit machines. I.e. on 64-bit machines + longs and doubles are followed by an empty 64-bit word. */ +void +ffi_java_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_java_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_java_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_java_raw_size( + ffi_cif* cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +typedef struct ffi_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void* user_data; +} ffi_closure; + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void* user_data); + +void ffi_closure_free(void *); +void *ffi_closure_alloc (size_t size, void **code); + +typedef struct ffi_raw_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + +#if !FFI_NATIVE_RAW_API + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + void (*translate_args)(ffi_cif*,void*,void**,void*); + void* this_closure; +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void* user_data; +} ffi_raw_closure; + +ffi_status +ffi_prep_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +ffi_status +ffi_prep_java_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +#endif // FFI_CLOSURES + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes); + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +#endif // #ifndef LIBFFI_ASM +/* ---- Definitions shared with assembly code ---------------------------- */ + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 + +#ifdef HAVE_LONG_DOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#else +# define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif + +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_POINTER + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef LIBFFI_H diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi_common.h ./Modules/_ctypes/libffi_osx/include/ffi_common.h new file mode 100644 index 0000000..685a358 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi_common.h @@ -0,0 +1,102 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fficonfig.h" + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char* alloca(); +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy((s), (d), (n)) +# endif +#endif + +/*#if defined(FFI_DEBUG) +#include +#endif*/ + +#ifdef FFI_DEBUG +#include + +/*@exits@*/ void +ffi_assert( +/*@temp@*/ char* expr, +/*@temp@*/ char* file, + int line); +void +ffi_stop_here(void); +void +ffi_type_test( +/*@temp@*/ /*@out@*/ ffi_type* a, +/*@temp@*/ char* file, + int line); + +# define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +# define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +# define FFI_ASSERT_VALID_TYPE(x) ffi_type_test(x, __FILE__, __LINE__) +#else +# define FFI_ASSERT(x) +# define FFI_ASSERT_AT(x, f, l) +# define FFI_ASSERT_VALID_TYPE(x) +#endif // #ifdef FFI_DEBUG + +#define ALIGN(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) + +/* Perform machine dependent cif processing */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif); + +/* Extended cif, used in callback from assembly routine */ +typedef struct extended_cif { +/*@dependent@*/ ffi_cif* cif; +/*@dependent@*/ void* rvalue; +/*@dependent@*/ void** avalue; +} extended_cif; + +/* Terse sized type definitions. */ +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +typedef float FLOAT32; + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef FFI_COMMON_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/fficonfig.h ./Modules/_ctypes/libffi_osx/include/fficonfig.h new file mode 100644 index 0000000..2172490 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/fficonfig.h @@ -0,0 +1,150 @@ +/* Manually created fficonfig.h for Darwin on PowerPC or Intel + + This file is manually generated to do away with the need for autoconf and + therefore make it easier to cross-compile and build fat binaries. + + NOTE: This file was added by PyObjC. +*/ + +#ifndef MACOSX +#error "This file is only supported on Mac OS X" +#endif + +#if defined(__i386__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__x86_64__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__ppc__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# if __GNUC__ >= 4 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 +# else +# undef HAVE_LONG_DOUBLE +# define SIZEOF_LONG_DOUBLE 8 +# endif + +#elif defined(__ppc64__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#else +#error "Unknown CPU type" +#endif + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "aw" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Define this is you do not want support for the raw API. */ +#define FFI_NO_RAW_API 1 + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +/* #undef HAVE_MMAP_DEV_ZERO */ + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +/* #undef HAVE_RO_EH_FRAME */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://gcc.gnu.org/bugs.html" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.1" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if you are using Purify and want to suppress spurious messages. */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "2.1-pyobjc" + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) .hidden name +# else +# define FFI_HIDDEN __attribute__((visibility ("hidden"))) +# endif +#else +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) +# else +# define FFI_HIDDEN +# endif +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ffitarget.h ./Modules/_ctypes/libffi_osx/include/ffitarget.h new file mode 100644 index 0000000..faaa30d --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffitarget.h @@ -0,0 +1,13 @@ +/* Dispatch to the right ffitarget file. This file is PyObjC specific; in a + normal build, the build environment copies the file to the right location or + sets up the right include flags. We want to do neither because that would + make building fat binaries harder. +*/ + +#if defined(__i386__) || defined(__x86_64__) +#include "x86-ffitarget.h" +#elif defined(__ppc__) || defined(__ppc64__) +#include "ppc-ffitarget.h" +#else +#error "Unsupported CPU type" +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h new file mode 100644 index 0000000..2318421 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h @@ -0,0 +1,104 @@ +/* -----------------------------------------------------------------*-C-*- + ppc-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if (defined(POWERPC) && defined(__powerpc64__)) || \ + (defined(POWERPC_DARWIN) && defined(__ppc64__)) +#define POWERPC64 +#endif + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef POWERPC + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, +# ifdef POWERPC64 + FFI_DEFAULT_ABI = FFI_LINUX64, +# else + FFI_DEFAULT_ABI = FFI_GCC_SYSV, +# endif +#endif + +#ifdef POWERPC_AIX + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_AIX, +#endif + +#ifdef POWERPC_DARWIN + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_DARWIN, +#endif + +#ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_NATIVE_RAW_API 0 + +/* Needed for FFI_SYSV small structure returns. */ +#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + +#if defined(POWERPC64) /*|| defined(POWERPC_AIX)*/ +# define FFI_TRAMPOLINE_SIZE 48 +#elif defined(POWERPC_AIX) +# define FFI_TRAMPOLINE_SIZE 24 +#else +# define FFI_TRAMPOLINE_SIZE 40 +#endif + +#ifndef LIBFFI_ASM +# if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) +typedef struct ffi_aix_trampoline_struct { + void* code_pointer; /* Pointer to ffi_closure_ASM */ + void* toc; /* TOC */ + void* static_chain; /* Pointer to closure */ +} ffi_aix_trampoline_struct; +# endif +#endif // #ifndef LIBFFI_ASM + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h new file mode 100644 index 0000000..55c2b6c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h @@ -0,0 +1,88 @@ +/* -----------------------------------------------------------------*-C-*- + x86-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if defined(X86_64) && defined(__i386__) +# undef X86_64 +# define X86 +#endif + +#if defined(__x86_64__) +# ifndef X86_64 +# define X86_64 +# endif +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + + /* ---- Intel x86 Win32 ---------- */ +#ifdef X86_WIN32 + FFI_SYSV, + FFI_STDCALL, + /* TODO: Add fastcall support for the sake of completeness */ + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + /* ---- Intel x86 and AMD x86-64 - */ +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) + FFI_SYSV, + FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ +# ifdef __i386__ + FFI_DEFAULT_ABI = FFI_SYSV, +# else + FFI_DEFAULT_ABI = FFI_UNIX64, +# endif +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 + +#if defined(X86_64) || (defined(__x86_64__) && defined(X86_DARWIN)) +# define FFI_TRAMPOLINE_SIZE 24 +# define FFI_NATIVE_RAW_API 0 +#else +# define FFI_TRAMPOLINE_SIZE 10 +# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S new file mode 100644 index 0000000..f143dbd --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S @@ -0,0 +1,365 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc-darwin.S - Copyright (c) 2000 John Hornkvist + Copyright (c) 2004 Free Software Foundation, Inc. + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include +#include +#include + +.text + .align 2 +.globl _ffi_prep_args + +.text + .align 2 +.globl _ffi_call_DARWIN + +.text + .align 2 +_ffi_call_DARWIN: +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved. */ + +LFB1: + /* Save the old stack pointer as AP. */ + mr r8,r1 + +LCFI0: +#if defined(__ppc64__) + /* Allocate the stack space we need. + r4 (size of input data) + 48 bytes (linkage area) + 40 bytes (saved registers) + 8 bytes (extra FPR) + r4 + 96 bytes total + */ + + addi r4,r4,-96 // Add our overhead. + li r0,-32 // Align to 32 bytes. + and r4,r4,r0 +#endif + stgux r1,r1,r4 // Grow the stack. + mflr r9 + + /* Save registers we use. */ +#if defined(__ppc64__) + std r27,-40(r8) +#endif + stg r28,MODE_CHOICE(-16,-32)(r8) + stg r29,MODE_CHOICE(-12,-24)(r8) + stg r30,MODE_CHOICE(-8,-16)(r8) + stg r31,MODE_CHOICE(-4,-8)(r8) + stg r9,SF_RETURN(r8) /* return address */ +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + stg r2,MODE_CHOICE(20,40)(r1) +#endif + +LCFI1: +#if defined(__ppc64__) + mr r27,r3 // our extended_cif +#endif + /* Save arguments over call. */ + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ + +LCFI2: + /* Call ffi_prep_args. */ + mr r4,r1 + li r9,0 + mtctr r12 /* r12 holds address of _ffi_prep_args. */ + bctrl +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + lg r2,MODE_CHOICE(20,40)(r1) +#endif + + /* Now do the call. + Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40,r31 + + /* Load all those argument registers. + We have set up a nice stack frame, just load it into registers. */ + lg r3,SF_ARG1(r1) + lg r4,SF_ARG2(r1) + lg r5,SF_ARG3(r1) + lg r6,SF_ARG4(r1) + nop + lg r7,SF_ARG5(r1) + lg r8,SF_ARG6(r1) + lg r9,SF_ARG7(r1) + lg r10,SF_ARG8(r1) + + /* Load all the FP registers. */ + bf 6,L2 /* No floats to load. */ +#if defined(__ppc64__) + lfd f1,MODE_CHOICE(-16,-40)-(14*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(11*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(10*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(7*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(6*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(3*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(2*8)(r28) + lfd f14,MODE_CHOICE(-16,-40)-(1*8)(r28) +#elif defined(__ppc__) + lfd f1,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(11*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(10*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(7*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(6*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(3*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(2*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(1*8)(r28) +#else +#error undefined architecture +#endif + +L2: + mr r12,r29 // Put the target address in r12 as specified. + mtctr r12 // Get the address to call into CTR. + nop + nop + bctrl // Make the call. + + // Deal with the return value. +#if defined(__ppc64__) + mtcrf 0x3,r31 // flags in cr6 and cr7 + bt 27,L(st_return_value) +#elif defined(__ppc__) + mtcrf 0x1,r31 // flags in cr7 +#else +#error undefined architecture +#endif + + bt 30,L(done_return_value) + bt 29,L(fp_return_value) + stg r3,0(r30) +#if defined(__ppc__) + bf 28,L(done_return_value) // Store the second long if necessary. + stg r4,4(r30) +#endif + // Fall through + +L(done_return_value): + lg r1,0(r1) // Restore stack pointer. + // Restore the registers we used. + lg r9,SF_RETURN(r1) // return address + lg r31,MODE_CHOICE(-4,-8)(r1) + mtlr r9 + lg r30,MODE_CHOICE(-8,-16)(r1) + lg r29,MODE_CHOICE(-12,-24)(r1) + lg r28,MODE_CHOICE(-16,-32)(r1) +#if defined(__ppc64__) + ld r27,-40(r1) +#endif + blr + +#if defined(__ppc64__) +L(st_return_value): + // Grow the stack enough to fit the registers. Leave room for 8 args + // to trample the 1st 8 slots in param area. + stgu r1,-SF_ROUND(280)(r1) // 64 + 104 + 48 + 64 + + // Store GPRs + std r3,SF_ARG9(r1) + std r4,SF_ARG10(r1) + std r5,SF_ARG11(r1) + std r6,SF_ARG12(r1) + nop + std r7,SF_ARG13(r1) + std r8,SF_ARG14(r1) + std r9,SF_ARG15(r1) + std r10,SF_ARG16(r1) + + // Store FPRs + nop + bf 26,L(call_struct_to_ram_form) + stfd f1,SF_ARG17(r1) + stfd f2,SF_ARG18(r1) + stfd f3,SF_ARG19(r1) + stfd f4,SF_ARG20(r1) + nop + stfd f5,SF_ARG21(r1) + stfd f6,SF_ARG22(r1) + stfd f7,SF_ARG23(r1) + stfd f8,SF_ARG24(r1) + nop + stfd f9,SF_ARG25(r1) + stfd f10,SF_ARG26(r1) + stfd f11,SF_ARG27(r1) + stfd f12,SF_ARG28(r1) + nop + stfd f13,SF_ARG29(r1) + +L(call_struct_to_ram_form): + ld r3,0(r27) // extended_cif->cif* + ld r3,16(r3) // ffi_cif->rtype* + addi r4,r1,SF_ARG9 // stored GPRs + addi r6,r1,SF_ARG17 // stored FPRs + li r5,0 // GPR size ptr (NULL) + li r7,0 // FPR size ptr (NULL) + li r8,0 // FPR count ptr (NULL) + li r10,0 // struct offset (NULL) + mr r9,r30 // return area + bl Lffi64_struct_to_ram_form$stub + lg r1,0(r1) // Restore stack pointer. + b L(done_return_value) +#endif + +L(fp_return_value): + /* Do we have long double to store? */ + bf 31,L(fd_return_value) + stfd f1,0(r30) + stfd f2,8(r30) + b L(done_return_value) + +L(fd_return_value): + /* Do we have double to store? */ + bf 28,L(float_return_value) + stfd f1,0(r30) + b L(done_return_value) + +L(float_return_value): + /* We only have a float to store. */ + stfs f1,0(r30) + b L(done_return_value) + +LFE1: +/* END(_ffi_call_DARWIN) */ + +/* Provide a null definition of _ffi_call_AIX. */ +.text + .align 2 +.globl _ffi_call_AIX +.text + .align 2 +_ffi_call_AIX: + blr +/* END(_ffi_call_AIX) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_call_DARWIN.eh +_ffi_call_DARWIN.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align LOG2_GPR_BYTES +LEFDE1: + +#if defined(__ppc64__) +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_ram_form$stub: + .indirect_symbol _ffi64_struct_to_ram_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_ram_form + +LO$ffi64_struct_to_ram_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_ram_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_ram_form + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ +#endif // __ppc__ || __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h new file mode 100644 index 0000000..cf4bd50 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h @@ -0,0 +1,85 @@ +/* ----------------------------------------------------------------------- + ppc-darwin.h - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define L(x) x + +#define SF_ARG9 MODE_CHOICE(56,112) +#define SF_ARG10 MODE_CHOICE(60,120) +#define SF_ARG11 MODE_CHOICE(64,128) +#define SF_ARG12 MODE_CHOICE(68,136) +#define SF_ARG13 MODE_CHOICE(72,144) +#define SF_ARG14 MODE_CHOICE(76,152) +#define SF_ARG15 MODE_CHOICE(80,160) +#define SF_ARG16 MODE_CHOICE(84,168) +#define SF_ARG17 MODE_CHOICE(88,176) +#define SF_ARG18 MODE_CHOICE(92,184) +#define SF_ARG19 MODE_CHOICE(96,192) +#define SF_ARG20 MODE_CHOICE(100,200) +#define SF_ARG21 MODE_CHOICE(104,208) +#define SF_ARG22 MODE_CHOICE(108,216) +#define SF_ARG23 MODE_CHOICE(112,224) +#define SF_ARG24 MODE_CHOICE(116,232) +#define SF_ARG25 MODE_CHOICE(120,240) +#define SF_ARG26 MODE_CHOICE(124,248) +#define SF_ARG27 MODE_CHOICE(128,256) +#define SF_ARG28 MODE_CHOICE(132,264) +#define SF_ARG29 MODE_CHOICE(136,272) + +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 +#define NUM_FPR_ARG_REGISTERS 13 + +#define FFI_TYPE_1_BYTE(x) ((x) == FFI_TYPE_UINT8 || (x) == FFI_TYPE_SINT8) +#define FFI_TYPE_2_BYTE(x) ((x) == FFI_TYPE_UINT16 || (x) == FFI_TYPE_SINT16) +#define FFI_TYPE_4_BYTE(x) \ + ((x) == FFI_TYPE_UINT32 || (x) == FFI_TYPE_SINT32 ||\ + (x) == FFI_TYPE_INT || (x) == FFI_TYPE_FLOAT) + +#if !defined(LIBFFI_ASM) + +enum { + FLAG_RETURNS_NOTHING = 1 << (31 - 30), // cr7 + FLAG_RETURNS_FP = 1 << (31 - 29), + FLAG_RETURNS_64BITS = 1 << (31 - 28), + FLAG_RETURNS_128BITS = 1 << (31 - 31), + + FLAG_RETURNS_STRUCT = 1 << (31 - 27), // cr6 + FLAG_STRUCT_CONTAINS_FP = 1 << (31 - 26), + + FLAG_ARG_NEEDS_COPY = 1 << (31 - 7), + FLAG_FP_ARGUMENTS = 1 << (31 - 6), // cr1.eq; specified by ABI + FLAG_4_GPR_ARGUMENTS = 1 << (31 - 5), + FLAG_RETVAL_REFERENCE = 1 << (31 - 4) +}; + +#if defined(__ppc64__) +void ffi64_struct_to_ram_form(const ffi_type*, const char*, unsigned int*, + const char*, unsigned int*, unsigned int*, char*, unsigned int*); +void ffi64_struct_to_reg_form(const ffi_type*, const char*, unsigned int*, + unsigned int*, char*, unsigned int*, char*, unsigned int*); +bool ffi64_stret_needs_ptr(const ffi_type* inType, + unsigned short*, unsigned short*); +#endif + +#endif // !defined(LIBFFI_ASM) \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S new file mode 100644 index 0000000..c3d30c2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S @@ -0,0 +1,308 @@ +#if defined(__ppc__) + +/* ----------------------------------------------------------------------- + ppc-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 // Save return address + stg r0,SF_RETURN(r1) + +LCFI0: + /* 24/48 bytes (Linkage Area) + 32/64 bytes (outgoing parameter area, always reserved) + 104 bytes (13*8 from FPR) + 16/32 bytes (result) + 176/232 total bytes */ + + /* skip over caller save area and keep stack aligned to 16/32. */ + stgu r1,-SF_ROUND(176)(r1) + +LCFI1: + /* We want to build up an area for the parameters passed + in registers. (both floating point and integer) */ + + /* 176/256 bytes (callee stack frame aligned to 16/32) + 24/48 bytes (caller linkage area) + 200/304 (start of caller parameter area aligned to 4/8) + */ + + /* Save GPRs 3 - 10 (aligned to 4/8) + in the parents outgoing area. */ + stg r3,200(r1) + stg r4,204(r1) + stg r5,208(r1) + stg r6,212(r1) + stg r7,216(r1) + stg r8,220(r1) + stg r9,224(r1) + stg r10,228(r1) + + /* Save FPRs 1 - 13. (aligned to 8) */ + stfd f1,56(r1) + stfd f2,64(r1) + stfd f3,72(r1) + stfd f4,80(r1) + stfd f5,88(r1) + stfd f6,96(r1) + stfd f7,104(r1) + stfd f8,112(r1) + stfd f9,120(r1) + stfd f10,128(r1) + stfd f11,136(r1) + stfd f12,144(r1) + stfd f13,152(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,160 // result storage + addi r5,r1,200 // saved GPRs + addi r6,r1,56 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + /* Now r3 contains the return type. Use it to look up in a table + so we know how to deal with each type. */ + addi r5,r1,160 // Copy result storage pointer. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: +/* Each of the ret_typeX code fragments has to be exactly 16 bytes long + (4 instructions). For cache effectiveness we align to a 16 byte boundary + first. */ + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +/* case FFI_TYPE_VOID */ +Lret_type0: + b Lfinish + nop + nop + nop + +/* case FFI_TYPE_INT */ +Lret_type1: + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_FLOAT */ +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_DOUBLE */ +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_LONGDOUBLE */ +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +/* case FFI_TYPE_UINT8 */ +Lret_type5: + lbz r3,3(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT8 */ +Lret_type6: + lbz r3,3(r5) + extsb r3,r3 + b Lfinish + nop + +/* case FFI_TYPE_UINT16 */ +Lret_type7: + lhz r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT16 */ +Lret_type8: + lha r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT32 */ +Lret_type9: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT32 */ +Lret_type10: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT64 */ +Lret_type11: + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_SINT64 */ +Lret_type12: // same as Lret_type11 + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_STRUCT */ +Lret_type13: + b Lfinish + nop + nop + nop + +/* End 16-byte aligned cases */ +/* case FFI_TYPE_POINTER */ +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + // fall through + +/* case done */ +Lfinish: + addi r1,r1,SF_ROUND(176) // Restore stack pointer. + lg r0,SF_RETURN(r1) // Restore return address. + mtlr r0 // Restore link register. + blr + +/* END(ffi_closure_ASM) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + + +#endif // __ppc__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c new file mode 100644 index 0000000..8953d5f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c @@ -0,0 +1,1776 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1998 Geoffrey Keating + + PowerPC Foreign Function Interface + + Darwin ABI support (c) 2001 John Hornkvist + AIX ABI support (c) 2002 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include +#include +#include +#include + +#if 0 +#if defined(POWERPC_DARWIN) +#include // for sys_icache_invalidate() +#endif + +#else + +#pragma weak sys_icache_invalidate +extern void sys_icache_invalidate(void *start, size_t len); + +#endif + + +extern void ffi_closure_ASM(void); + +// The layout of a function descriptor. A C function pointer really +// points to one of these. +typedef struct aix_fd_struct { + void* code_pointer; + void* toc; +} aix_fd; + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments. + + The stack layout we want looks like this: + + | Return address from ffi_call_DARWIN | higher addresses + |--------------------------------------------| + | Previous backchain pointer 4/8 | stack pointer here + |--------------------------------------------|-\ <<< on entry to + | Saved r28-r31 (4/8)*4 | | ffi_call_DARWIN + |--------------------------------------------| | + | Parameters (at least 8*(4/8)=32/64) | | (176) +112 - +288 + |--------------------------------------------| | + | Space for GPR2 4/8 | | + |--------------------------------------------| | stack | + | Reserved (4/8)*2 | | grows | + |--------------------------------------------| | down V + | Space for callee's LR 4/8 | | + |--------------------------------------------| | lower addresses + | Saved CR 4/8 | | + |--------------------------------------------| | stack pointer here + | Current backchain pointer 4/8 | | during + |--------------------------------------------|-/ <<< ffi_call_DARWIN + + Note: ppc64 CR is saved in the low word of a long on the stack. +*/ + +/*@-exportheader@*/ +void +ffi_prep_args( + extended_cif* inEcif, + unsigned *const stack) +/*@=exportheader@*/ +{ + /* Copy the ecif to a local var so we can trample the arg. + BC note: test this with GP later for possible problems... */ + volatile extended_cif* ecif = inEcif; + + const unsigned bytes = ecif->cif->bytes; + const unsigned flags = ecif->cif->flags; + + /* Cast the stack arg from int* to long*. sizeof(long) == 4 in 32-bit mode + and 8 in 64-bit mode. */ + unsigned long *const longStack = (unsigned long *const)stack; + + /* 'stacktop' points at the previous backchain pointer. */ +#if defined(__ppc64__) + // In ppc-darwin.s, an extra 96 bytes is reserved for the linkage area, + // saved registers, and an extra FPR. + unsigned long *const stacktop = + (unsigned long *)(unsigned long)((char*)longStack + bytes + 96); +#elif defined(__ppc__) + unsigned long *const stacktop = longStack + (bytes / sizeof(long)); +#else +#error undefined architecture +#endif + + /* 'fpr_base' points at the space for fpr1, and grows upwards as + we use FPR registers. */ + double* fpr_base = (double*)(stacktop - ASM_NEEDS_REGISTERS) - + NUM_FPR_ARG_REGISTERS; + +#if defined(__ppc64__) + // 64-bit saves an extra register, and uses an extra FPR. Knock fpr_base + // down a couple pegs. + fpr_base -= 2; +#endif + + unsigned int fparg_count = 0; + + /* 'next_arg' grows up as we put parameters in it. */ + unsigned long* next_arg = longStack + 6; /* 6 reserved positions. */ + + int i; + double double_tmp; + void** p_argv = ecif->avalue; + unsigned long gprvalue; + ffi_type** ptr = ecif->cif->arg_types; + + /* Check that everything starts aligned properly. */ + FFI_ASSERT(stack == SF_ROUND(stack)); + FFI_ASSERT(stacktop == SF_ROUND(stacktop)); + FFI_ASSERT(bytes == SF_ROUND(bytes)); + + /* Deal with return values that are actually pass-by-reference. + Rule: + Return values are referenced by r3, so r4 is the first parameter. */ + + if (flags & FLAG_RETVAL_REFERENCE) + *next_arg++ = (unsigned long)(char*)ecif->rvalue; + + /* Now for the arguments. */ + for (i = ecif->cif->nargs; i > 0; i--, ptr++, p_argv++) + { + switch ((*ptr)->type) + { + /* If a floating-point parameter appears before all of the general- + purpose registers are filled, the corresponding GPRs that match + the size of the floating-point parameter are shadowed for the + benefit of vararg and pre-ANSI functions. */ + case FFI_TYPE_FLOAT: + double_tmp = *(float*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg++; + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + + case FFI_TYPE_DOUBLE: + double_tmp = *(double*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg += MODE_CHOICE(2,1); + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double*)fpr_base = *(long double*)*p_argv; +#elif defined(__ppc__) + if (fparg_count < NUM_FPR_ARG_REGISTERS - 1) + *(long double*)fpr_base = *(long double*)*p_argv; + else if (fparg_count == NUM_FPR_ARG_REGISTERS - 1) + *(double*)fpr_base = *(double*)*p_argv; +#else +#error undefined architecture +#endif + + *(long double*)next_arg = *(long double*)*p_argv; + fparg_count += 2; + fpr_base += 2; + next_arg += MODE_CHOICE(4,2); + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: +#if defined(__ppc64__) + gprvalue = *(long long*)*p_argv; + goto putgpr; +#elif defined(__ppc__) + *(long long*)next_arg = *(long long*)*p_argv; + next_arg += 2; + break; +#else +#error undefined architecture +#endif + + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT8: + gprvalue = *(unsigned char*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT8: + gprvalue = *(signed char*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT16: + gprvalue = *(unsigned short*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT16: + gprvalue = *(signed short*)*p_argv; + goto putgpr; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + + ffi64_struct_to_reg_form(*ptr, (char*)*p_argv, NULL, &fparg_count, + (char*)next_arg, &gprSize, (char*)fpr_base, &fprSize); + next_arg += gprSize / sizeof(long); + fpr_base += fprSize / sizeof(double); + +#elif defined(__ppc__) + char* dest_cpy = (char*)next_arg; + + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. + Structures with 3 byte in size are padded upwards. */ + unsigned size_al = (*ptr)->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + + if (ecif->cif->abi == FFI_DARWIN) + { + if (size_al < 3) + dest_cpy += 4 - size_al; + } + + memcpy((char*)dest_cpy, (char*)*p_argv, size_al); + next_arg += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + gprvalue = *(unsigned*)*p_argv; + +putgpr: + *next_arg++ = gprvalue; + break; + + default: + break; + } + } + + /* Check that we didn't overrun the stack... */ + //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); + //FFI_ASSERT((unsigned *)fpr_base + // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); + //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); +} + +#if defined(__ppc64__) + +bool +ffi64_struct_contains_fp( + const ffi_type* inType) +{ + bool containsFP = false; + unsigned int i; + + for (i = 0; inType->elements[i] != NULL && !containsFP; i++) + { + if (inType->elements[i]->type == FFI_TYPE_FLOAT || + inType->elements[i]->type == FFI_TYPE_DOUBLE || + inType->elements[i]->type == FFI_TYPE_LONGDOUBLE) + containsFP = true; + else if (inType->elements[i]->type == FFI_TYPE_STRUCT) + containsFP = ffi64_struct_contains_fp(inType->elements[i]); + } + + return containsFP; +} + +#endif // defined(__ppc64__) + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + /* All this is for the DARWIN ABI. */ + int i; + ffi_type** ptr; + int intarg_count = 0; + int fparg_count = 0; + unsigned int flags = 0; + unsigned int size_al = 0; + + /* All the machine-independent calculation of cif->bytes will be wrong. + Redo the calculation for DARWIN. */ + + /* Space for the frame pointer, callee's LR, CR, etc, and for + the asm's temp regs. */ + unsigned int bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long); + + /* Return value handling. The rules are as follows: + - 32-bit (or less) integer values are returned in gpr3; + - Structures of size <= 4 bytes also returned in gpr3; + - 64-bit integer values and structures between 5 and 8 bytes are + returned in gpr3 and gpr4; + - Single/double FP values are returned in fpr1; + - Long double FP (if not equivalent to double) values are returned in + fpr1 and fpr2; + - Larger structures values are allocated space and a pointer is passed + as the first argument. */ + switch (cif->rtype->type) + { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_DOUBLE: + flags |= FLAG_RETURNS_64BITS; + /* Fall through. */ + case FFI_TYPE_FLOAT: + flags |= FLAG_RETURNS_FP; + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + flags |= FLAG_RETURNS_64BITS; + break; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + + if (ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) + { + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + } + else + { + flags |= FLAG_RETURNS_STRUCT; + + if (ffi64_struct_contains_fp(cif->rtype)) + flags |= FLAG_STRUCT_CONTAINS_FP; + } + +#elif defined(__ppc__) + + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_VOID: + flags |= FLAG_RETURNS_NOTHING; + break; + + default: + /* Returns 32-bit integer, or similar. Nothing to do here. */ + break; + } + + /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the + first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest + goes on the stack. Structures are passed as a pointer to a copy of + the structure. Stuff on the stack needs to keep proper alignment. */ + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + switch ((*ptr)->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + fparg_count++; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + if (fparg_count > NUM_FPR_ARG_REGISTERS + && intarg_count % 2 != 0) + intarg_count++; + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + fparg_count += 2; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + + if ( +#if defined(__ppc64__) + fparg_count > NUM_FPR_ARG_REGISTERS + 1 +#elif defined(__ppc__) + fparg_count > NUM_FPR_ARG_REGISTERS +#else +#error undefined architecture +#endif + && intarg_count % 2 != 0) + intarg_count++; + + intarg_count += 2; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + /* 'long long' arguments are passed as two words, but + either both words must fit in registers or both go + on the stack. If they go on the stack, they must + be 8-byte-aligned. */ + if (intarg_count == NUM_GPR_ARG_REGISTERS - 1 + || (intarg_count >= NUM_GPR_ARG_REGISTERS + && intarg_count % 2 != 0)) + intarg_count++; + + intarg_count += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_STRUCT: + size_al = (*ptr)->size; + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + +#if defined(__ppc64__) + // Look for FP struct members. + unsigned int j; + + for (j = 0; (*ptr)->elements[j] != NULL; j++) + { + if ((*ptr)->elements[j]->type == FFI_TYPE_FLOAT || + (*ptr)->elements[j]->type == FFI_TYPE_DOUBLE) + { + fparg_count++; + + if (fparg_count > NUM_FPR_ARG_REGISTERS) + intarg_count++; + } + else if ((*ptr)->elements[j]->type == FFI_TYPE_LONGDOUBLE) + { + fparg_count += 2; + + if (fparg_count > NUM_FPR_ARG_REGISTERS + 1) + intarg_count += 2; + } + else + intarg_count++; + } +#elif defined(__ppc__) + intarg_count += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + + break; + + default: + /* Everything else is passed as a 4/8-byte word in a GPR, either + the object itself or a pointer to it. */ + intarg_count++; + break; + } + } + + /* Space for the FPR registers, if needed. */ + if (fparg_count != 0) + { + flags |= FLAG_FP_ARGUMENTS; +#if defined(__ppc64__) + bytes += (NUM_FPR_ARG_REGISTERS + 1) * sizeof(double); +#elif defined(__ppc__) + bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); +#else +#error undefined architecture +#endif + } + + /* Stack space. */ +#if defined(__ppc64__) + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#elif defined(__ppc__) + if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#else +#error undefined architecture +#endif + else + bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); + + /* The stack space allocated needs to be a multiple of 16/32 bytes. */ + bytes = SF_ROUND(bytes); + + cif->flags = flags; + cif->bytes = bytes; + + return FFI_OK; +} + +/*@-declundef@*/ +/*@-exportheader@*/ +extern void +ffi_call_AIX( +/*@out@*/ extended_cif*, + unsigned, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); + +extern void +ffi_call_DARWIN( +/*@out@*/ extended_cif*, + unsigned long, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); +/*@=declundef@*/ +/*@=exportheader@*/ + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return + value address then we need to make one. */ + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + /*@-sysunrecog@*/ + ecif.rvalue = alloca(cif->rtype->size); + /*@=sysunrecog@*/ + } + else + ecif.rvalue = rvalue; + + switch (cif->abi) + { + case FFI_AIX: + /*@-usedef@*/ + ffi_call_AIX(&ecif, -cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + case FFI_DARWIN: + /*@-usedef@*/ + ffi_call_DARWIN(&ecif, -(long)cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + default: + FFI_ASSERT(0); + break; + } +} + +/* here I'd like to add the stack frame layout we use in darwin_closure.S + and aix_clsoure.S + + SP previous -> +---------------------------------------+ <--- child frame + | back chain to caller 4 | + +---------------------------------------+ 4 + | saved CR 4 | + +---------------------------------------+ 8 + | saved LR 4 | + +---------------------------------------+ 12 + | reserved for compilers 4 | + +---------------------------------------+ 16 + | reserved for binders 4 | + +---------------------------------------+ 20 + | saved TOC pointer 4 | + +---------------------------------------+ 24 + | always reserved 8*4=32 (previous GPRs)| + | according to the linkage convention | + | from AIX | + +---------------------------------------+ 56 + | our FPR area 13*8=104 | + | f1 | + | . | + | f13 | + +---------------------------------------+ 160 + | result area 8 | + +---------------------------------------+ 168 + | alignement to the next multiple of 16 | +SP current --> +---------------------------------------+ 176 <- parent frame + | back chain to caller 4 | + +---------------------------------------+ 180 + | saved CR 4 | + +---------------------------------------+ 184 + | saved LR 4 | + +---------------------------------------+ 188 + | reserved for compilers 4 | + +---------------------------------------+ 192 + | reserved for binders 4 | + +---------------------------------------+ 196 + | saved TOC pointer 4 | + +---------------------------------------+ 200 + | always reserved 8*4=32 we store our | + | GPRs here | + | r3 | + | . | + | r10 | + +---------------------------------------+ 232 + | overflow part | + +---------------------------------------+ xxx + | ???? | + +---------------------------------------+ xxx +*/ + +#if !defined(POWERPC_DARWIN) + +#define MIN_LINE_SIZE 32 + +static void +flush_icache( + char* addr) +{ +#ifndef _AIX + __asm__ volatile ( + "dcbf 0,%0\n" + "sync\n" + "icbi 0,%0\n" + "sync\n" + "isync" + : : "r" (addr) : "memory"); +#endif +} + +static void +flush_range( + char* addr, + int size) +{ + int i; + + for (i = 0; i < size; i += MIN_LINE_SIZE) + flush_icache(addr + i); + + flush_icache(addr + size - 1); +} + +#endif // !defined(POWERPC_DARWIN) + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + switch (cif->abi) + { + case FFI_DARWIN: + { + FFI_ASSERT (cif->abi == FFI_DARWIN); + + unsigned int* tramp = (unsigned int*)&closure->tramp[0]; + +#if defined(__ppc64__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0xe98b0018; // ld r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0xe96b0020; // ld r11,32(r11) + tramp[7] = 0x4e800420; // bctr + *(unsigned long*)&tramp[8] = (unsigned long)ffi_closure_ASM; + *(unsigned long*)&tramp[10] = (unsigned long)closure; +#elif defined(__ppc__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0x818b0018; // lwz r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0x816b001c; // lwz r11,28(r11) + tramp[7] = 0x4e800420; // bctr + tramp[8] = (unsigned long)ffi_closure_ASM; + tramp[9] = (unsigned long)closure; +#else +#error undefined architecture +#endif + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + // Flush the icache. Only necessary on Darwin. +#if defined(POWERPC_DARWIN) + sys_icache_invalidate(closure->tramp, FFI_TRAMPOLINE_SIZE); +#else + flush_range(closure->tramp, FFI_TRAMPOLINE_SIZE); +#endif + + break; + } + + case FFI_AIX: + { + FFI_ASSERT (cif->abi == FFI_AIX); + + ffi_aix_trampoline_struct* tramp_aix = + (ffi_aix_trampoline_struct*)(closure->tramp); + aix_fd* fd = (aix_fd*)(void*)ffi_closure_ASM; + + tramp_aix->code_pointer = fd->code_pointer; + tramp_aix->toc = fd->toc; + tramp_aix->static_chain = closure; + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + break; + } + + default: + return FFI_BAD_ABI; + } + + return FFI_OK; +} + +#if defined(__ppc__) + typedef double ldbits[2]; + + typedef union + { + ldbits lb; + long double ld; + } ldu; +#endif + +typedef union +{ + float f; + double d; +} ffi_dblfl; + +/* The trampoline invokes ffi_closure_ASM, and on entry, r11 holds the + address of the closure. After storing the registers that could possibly + contain parameters to be passed into the stack frame and setting up space + for a return value, ffi_closure_ASM invokes the following helper function + to do most of the work. */ +int +ffi_closure_helper_DARWIN( + ffi_closure* closure, + void* rvalue, + unsigned long* pgr, + ffi_dblfl* pfr) +{ + /* rvalue is the pointer to space for return value in closure assembly + pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM + pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ + +#if defined(__ppc__) + ldu temp_ld; +#endif + + double temp; + unsigned int i; + unsigned int nf = 0; /* number of FPRs already used. */ + unsigned int ng = 0; /* number of GPRs already used. */ + ffi_cif* cif = closure->cif; + long avn = cif->nargs; + void** avalue = alloca(cif->nargs * sizeof(void*)); + ffi_type** arg_types = cif->arg_types; + + /* Copy the caller's structure return value address so that the closure + returns the data directly to the caller. */ +#if defined(__ppc64__) + if (cif->rtype->type == FFI_TYPE_STRUCT && + ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) +#elif defined(__ppc__) + if (cif->rtype->type == FFI_TYPE_STRUCT) +#else +#error undefined architecture +#endif + { + rvalue = (void*)*pgr; + pgr++; + ng++; + } + + /* Grab the addresses of the arguments from the stack frame. */ + for (i = 0; i < avn; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = (char*)pgr + MODE_CHOICE(3,7); + ng++; + pgr++; + break; + + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = (char*)pgr + MODE_CHOICE(2,6); + ng++; + pgr++; + break; + +#if defined(__ppc__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + avalue[i] = (char*)pgr + MODE_CHOICE(0,4); + ng++; + pgr++; + + break; + + case FFI_TYPE_STRUCT: + if (cif->abi == FFI_DARWIN) + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + unsigned int savedFPRSize = fprSize; + + avalue[i] = alloca(arg_types[i]->size); + ffi64_struct_to_ram_form(arg_types[i], (const char*)pgr, + &gprSize, (const char*)pfr, &fprSize, &nf, avalue[i], NULL); + + ng += gprSize / sizeof(long); + pgr += gprSize / sizeof(long); + pfr += (fprSize - savedFPRSize) / sizeof(double); + +#elif defined(__ppc__) + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. */ + unsigned int size_al = size_al = arg_types[i]->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN(arg_types[i]->size, 8); + + if (size_al < 3) + avalue[i] = (void*)pgr + MODE_CHOICE(4,8) - size_al; + else + avalue[i] = (void*)pgr; + + ng += (size_al + 3) / sizeof(long); + pgr += (size_al + 3) / sizeof(long); +#else +#error undefined architecture +#endif + } + + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + /* Long long ints are passed in 1 or 2 GPRs. */ + avalue[i] = pgr; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_FLOAT: + /* A float value consumes a GPR. + There are 13 64-bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + temp = pfr->d; + pfr->f = (float)temp; + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng++; + pgr++; + break; + + case FFI_TYPE_DOUBLE: + /* A double value consumes one or two GPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr += 2; + } +#elif defined(__ppc__) + /* A long double value consumes 2/4 GPRs and 2 FPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS - 1) + { + avalue[i] = pfr; + pfr += 2; + } + /* Here we have the situation where one part of the long double + is stored in fpr13 and the other part is already on the stack. + We use a union to pass the long double to avalue[i]. */ + else if (nf == NUM_FPR_ARG_REGISTERS - 1) + { + memcpy (&temp_ld.lb[0], pfr, sizeof(temp_ld.lb[0])); + memcpy (&temp_ld.lb[1], pgr + 2, sizeof(temp_ld.lb[1])); + avalue[i] = &temp_ld.ld; + } +#else +#error undefined architecture +#endif + else + avalue[i] = pgr; + + nf += 2; + ng += MODE_CHOICE(4,2); + pgr += MODE_CHOICE(4,2); + + break; + +#endif /* FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE */ + + default: + FFI_ASSERT(0); + break; + } + } + + (closure->fun)(cif, rvalue, avalue, closure->user_data); + + /* Tell ffi_closure_ASM to perform return type promotions. */ + return cif->rtype->type; +} + +#if defined(__ppc64__) + +/* ffi64_struct_to_ram_form + + Rebuild a struct's natural layout from buffers of concatenated registers. + Return the number of registers used. + inGPRs[0-7] == r3, inFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_ram_form( + const ffi_type* inType, + const char* inGPRs, + unsigned int* ioGPRMarker, + const char* inFPRs, + unsigned int* ioFPRMarker, + unsigned int* ioFPRsUsed, + char* outStruct, // caller-allocated + unsigned int* ioStructMarker) +{ + unsigned int srcGMarker = 0; + unsigned int srcFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + unsigned int destMarker = 0; + + static unsigned int recurseCount = 0; + + if (ioGPRMarker) + srcGMarker = *ioGPRMarker; + + if (ioFPRMarker) + { + srcFMarker = *ioFPRMarker; + savedFMarker = srcFMarker; + } + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioStructMarker) + destMarker = *ioStructMarker; + + size_t i; + + switch (inType->size) + { + case 1: case 2: case 4: + srcGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + srcFMarker = ALIGN(srcFMarker, 4); + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(float*)&outStruct[destMarker] = + (float)*(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(float*)&outStruct[destMarker] = + (float)*(double*)&inGPRs[srcGMarker]; + + srcGMarker += 4; + destMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcFMarker = ALIGN(srcFMarker, 8); + destMarker = ALIGN(destMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(double*)&outStruct[destMarker] = + *(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(double*)&outStruct[destMarker] = + *(double*)&inGPRs[srcGMarker]; + + destMarker += 8; + + // Skip next GPR + srcGMarker += 8; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + destMarker = ALIGN(destMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + srcFMarker = ALIGN(srcFMarker, 8); + srcGMarker = ALIGN(srcGMarker, 8); + *(long double*)&outStruct[destMarker] = + *(long double*)&inFPRs[srcFMarker]; + srcFMarker += 16; + fprsUsed += 2; + } + else + { + srcFMarker = ALIGN(srcFMarker, 16); + srcGMarker = ALIGN(srcGMarker, 16); + *(long double*)&outStruct[destMarker] = + *(long double*)&inGPRs[srcGMarker]; + } + + destMarker += 16; + + // Skip next 2 GPRs + srcGMarker += 16; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + if (inType->alignment == 1) // chars only + { + if (inType->size == 1) + outStruct[destMarker++] = inGPRs[srcGMarker++]; + else if (inType->size == 2) + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + outStruct[destMarker++] = inGPRs[srcGMarker++]; + i++; + } + else + { + memcpy(&outStruct[destMarker], + &inGPRs[srcGMarker], inType->size); + srcGMarker += inType->size; + destMarker += inType->size; + i += inType->size - 1; + } + } + else // chars and other stuff + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, inType->alignment); // was 8 + } + } + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcGMarker = ALIGN(srcGMarker, 2); + destMarker = ALIGN(destMarker, 2); + + *(short*)&outStruct[destMarker] = + *(short*)&inGPRs[srcGMarker]; + srcGMarker += 2; + destMarker += 2; + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + *(int*)&outStruct[destMarker] = + *(int*)&inGPRs[srcGMarker]; + srcGMarker += 4; + destMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcGMarker = ALIGN(srcGMarker, 8); + destMarker = ALIGN(destMarker, 8); + + *(long long*)&outStruct[destMarker] = + *(long long*)&inGPRs[srcGMarker]; + srcGMarker += 8; + destMarker += 8; + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_ram_form(inType->elements[i], inGPRs, + &srcGMarker, inFPRs, &srcFMarker, &fprsUsed, + outStruct, &destMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); // unknown element type + break; + } + } + + srcGMarker = ALIGN(srcGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && srcGMarker == 16) + { + *(long double*)&outStruct[0] = *(long double*)&inGPRs[0]; + srcFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioGPRMarker) + *ioGPRMarker = ALIGN(srcGMarker, 8); + + if (ioFPRMarker) + *ioFPRMarker = srcFMarker; + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioStructMarker) + *ioStructMarker = ALIGN(destMarker, 8); +} + +/* ffi64_struct_to_reg_form + + Copy a struct's elements into buffers that can be sliced into registers. + Return the sizes of the output buffers in bytes. Pass NULL buffer pointers + to calculate size only. + outGPRs[0-7] == r3, outFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_reg_form( + const ffi_type* inType, + const char* inStruct, + unsigned int* ioStructMarker, + unsigned int* ioFPRsUsed, + char* outGPRs, // caller-allocated + unsigned int* ioGPRSize, + char* outFPRs, // caller-allocated + unsigned int* ioFPRSize) +{ + size_t i; + unsigned int srcMarker = 0; + unsigned int destGMarker = 0; + unsigned int destFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + + static unsigned int recurseCount = 0; + + if (ioStructMarker) + srcMarker = *ioStructMarker; + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioGPRSize) + destGMarker = *ioGPRSize; + + if (ioFPRSize) + { + destFMarker = *ioFPRSize; + savedFMarker = destFMarker; + } + + switch (inType->size) + { + case 1: case 2: case 4: + destGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + // Shadow floating-point types in GPRs for vararg and pre-ANSI + // functions. + case FFI_TYPE_FLOAT: + // Nudge markers to next 4/8-byte boundary + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + (double)*(float*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + (double)*(float*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcMarker = ALIGN(srcMarker, 8); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + *(double*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + *(double*)&inStruct[srcMarker]; + + srcMarker += 8; + + // Skip next GPR + destGMarker += 8; + destGMarker = ALIGN(destGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + srcMarker = ALIGN(srcMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + destFMarker = ALIGN(destFMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outFPRs != NULL && inStruct != NULL) + *(long double*)&outFPRs[destFMarker] = + *(long double*)&inStruct[srcMarker]; + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + + destFMarker += 16; + fprsUsed += 2; + } + else + { + destGMarker = ALIGN(destGMarker, 16); + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + } + + srcMarker += 16; + destGMarker += 16; // Skip next 2 GPRs + destGMarker = ALIGN(destGMarker, 8); // was 16 + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + if (inType->alignment == 1) // bytes only + { + if (inType->size == 1) + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + } + else if (inType->size == 2) + { + if (outGPRs != NULL && inStruct != NULL) + { + outGPRs[destGMarker] = inStruct[srcMarker]; + outGPRs[destGMarker + 1] = inStruct[srcMarker + 1]; + } + + srcMarker += 2; + destGMarker += 2; + + i++; + } + else + { + if (outGPRs != NULL && inStruct != NULL) + { + // Avoid memcpy for small chunks. + if (inType->size <= sizeof(long)) + *(long*)&outGPRs[destGMarker] = + *(long*)&inStruct[srcMarker]; + else + memcpy(&outGPRs[destGMarker], + &inStruct[srcMarker], inType->size); + } + + srcMarker += inType->size; + destGMarker += inType->size; + i += inType->size - 1; + } + } + else // bytes and other stuff + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, inType->alignment); // was 8 + } + } + + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcMarker = ALIGN(srcMarker, 2); + destGMarker = ALIGN(destGMarker, 2); + + if (outGPRs != NULL && inStruct != NULL) + *(short*)&outGPRs[destGMarker] = + *(short*)&inStruct[srcMarker]; + + srcMarker += 2; + destGMarker += 2; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + + if (outGPRs != NULL && inStruct != NULL) + *(int*)&outGPRs[destGMarker] = + *(int*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcMarker = ALIGN(srcMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outGPRs != NULL && inStruct != NULL) + *(long long*)&outGPRs[destGMarker] = + *(long long*)&inStruct[srcMarker]; + + srcMarker += 8; + destGMarker += 8; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_reg_form(inType->elements[i], + inStruct, &srcMarker, &fprsUsed, outGPRs, + &destGMarker, outFPRs, &destFMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); + break; + } + } + + destGMarker = ALIGN(destGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && destGMarker == 16) + { + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[0] = *(long double*)&inStruct[0]; + + destFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioStructMarker) + *ioStructMarker = ALIGN(srcMarker, 8); + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioGPRSize) + *ioGPRSize = ALIGN(destGMarker, 8); + + if (ioFPRSize) + *ioFPRSize = ALIGN(destFMarker, 8); +} + +/* ffi64_stret_needs_ptr + + Determine whether a returned struct needs a pointer in r3 or can fit + in registers. +*/ + +bool +ffi64_stret_needs_ptr( + const ffi_type* inType, + unsigned short* ioGPRCount, + unsigned short* ioFPRCount) +{ + // Obvious case first- struct is larger than combined FPR size. + if (inType->size > 14 * 8) + return true; + + // Now the struct can physically fit in registers, determine if it + // also fits logically. + bool needsPtr = false; + unsigned short gprsUsed = 0; + unsigned short fprsUsed = 0; + size_t i; + + if (ioGPRCount) + gprsUsed = *ioGPRCount; + + if (ioFPRCount) + fprsUsed = *ioFPRCount; + + for (i = 0; inType->elements[i] != NULL && !needsPtr; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + gprsUsed++; + fprsUsed++; + + if (fprsUsed > 13) + needsPtr = true; + + break; + + case FFI_TYPE_LONGDOUBLE: + gprsUsed += 2; + fprsUsed += 2; + + if (fprsUsed > 14) + needsPtr = true; + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + gprsUsed++; + + if (gprsUsed > 8) + { + needsPtr = true; + break; + } + + if (inType->elements[i + 1] == NULL) // last byte in the struct + break; + + // Count possible contiguous bytes ahead, up to 8. + unsigned short j; + + for (j = 1; j < 8; j++) + { + if (inType->elements[i + j] == NULL || + !FFI_TYPE_1_BYTE(inType->elements[i + j]->type)) + break; + } + + i += j - 1; // allow for i++ before the test condition + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + gprsUsed++; + + if (gprsUsed > 8) + needsPtr = true; + + break; + + case FFI_TYPE_STRUCT: + needsPtr = ffi64_stret_needs_ptr( + inType->elements[i], &gprsUsed, &fprsUsed); + + break; + + default: + FFI_ASSERT(0); + break; + } + } + + if (ioGPRCount) + *ioGPRCount = gprsUsed; + + if (ioFPRCount) + *ioFPRCount = fprsUsed; + + return needsPtr; +} + +/* ffi64_data_size + + Calculate the size in bytes of an ffi type. +*/ + +unsigned int +ffi64_data_size( + const ffi_type* inType) +{ + unsigned int size = 0; + + switch (inType->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + size = 1; + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + size = 2; + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_FLOAT: + size = 4; + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + size = 8; + break; + + case FFI_TYPE_LONGDOUBLE: + size = 16; + break; + + case FFI_TYPE_STRUCT: + ffi64_struct_to_reg_form( + inType, NULL, NULL, NULL, NULL, &size, NULL, NULL); + break; + + case FFI_TYPE_VOID: + break; + + default: + FFI_ASSERT(0); + break; + } + + return size; +} + +#endif /* defined(__ppc64__) */ +#endif /* __ppc__ || __ppc64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S new file mode 100644 index 0000000..7162fa1 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S @@ -0,0 +1,418 @@ +#if defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc64-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc64-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 + stg r0,SF_RETURN(r1) // save return address + + // Save GPRs 3 - 10 (aligned to 8) in the parents outgoing area. + stg r3,SF_ARG1(r1) + stg r4,SF_ARG2(r1) + stg r5,SF_ARG3(r1) + stg r6,SF_ARG4(r1) + stg r7,SF_ARG5(r1) + stg r8,SF_ARG6(r1) + stg r9,SF_ARG7(r1) + stg r10,SF_ARG8(r1) + +LCFI0: +/* 48 bytes (Linkage Area) + 64 bytes (outgoing parameter area, always reserved) + 112 bytes (14*8 for incoming FPR) + ? bytes (result) + 112 bytes (14*8 for outgoing FPR) + 16 bytes (2 saved registers) + 352 + ? total bytes +*/ + + std r31,-8(r1) // Save registers we use. + std r30,-16(r1) + mr r30,r1 // Save the old SP. + mr r31,r11 // Save the ffi_closure around ffi64_data_size. + + // Calculate the space we need. + stdu r1,-SF_MINSIZE(r1) + ld r3,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r3) // ffi_cif->rtype* + bl Lffi64_data_size$stub + ld r1,0(r1) + + addi r3,r3,352 // Add our overhead. + neg r3,r3 + li r0,-32 // Align to 32 bytes. + and r3,r3,r0 + stdux r1,r1,r3 // Grow the stack. + + mr r11,r31 // Copy the ffi_closure back. + +LCFI1: + // We want to build up an area for the parameters passed + // in registers. (both floating point and integer) + +/* 320 bytes (callee stack frame aligned to 32) + 48 bytes (caller linkage area) + 368 (start of caller parameter area aligned to 8) +*/ + + // Save FPRs 1 - 14. (aligned to 8) + stfd f1,112(r1) + stfd f2,120(r1) + stfd f3,128(r1) + stfd f4,136(r1) + stfd f5,144(r1) + stfd f6,152(r1) + stfd f7,160(r1) + stfd f8,168(r1) + stfd f9,176(r1) + stfd f10,184(r1) + stfd f11,192(r1) + stfd f12,200(r1) + stfd f13,208(r1) + stfd f14,216(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,224 // result storage + addi r5,r30,SF_ARG1 // saved GPRs + addi r6,r1,112 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + // Look the proper starting point in table + // by using return type as an offset. + addi r5,r1,224 // Get pointer to results area. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Now multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: + // Each of the ret_typeX code fragments has to be exactly 16 bytes long + // (4 instructions). For cache effectiveness we align to a 16 byte + // boundary first. + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +// case FFI_TYPE_VOID +Lret_type0: + b Lfinish + nop + nop + nop + +// case FFI_TYPE_INT +Lret_type1: + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_FLOAT +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_DOUBLE +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_LONGDOUBLE +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +// case FFI_TYPE_UINT8 +Lret_type5: + lbz r3,7(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT8 +Lret_type6: + lbz r3,7(r5) + extsb r3,r3 + b Lfinish + nop + +// case FFI_TYPE_UINT16 +Lret_type7: + lhz r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT16 +Lret_type8: + lha r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT32 +Lret_type9: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT32 +Lret_type10: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT64 +Lret_type11: + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT64 +Lret_type12: // same as Lret_type11 + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_STRUCT +Lret_type13: + b Lret_struct + nop + nop + nop + +// ** End 16-byte aligned cases ** +// case FFI_TYPE_POINTER +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + b Lfinish + +// copy struct into registers +Lret_struct: + ld r31,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r31) // ffi_cif->rtype* + ld r31,24(r31) // ffi_cif->flags + mr r4,r5 // copy struct* to 2nd arg + addi r7,r1,SF_ARG9 // GPR return area + addi r9,r30,-16-(14*8) // FPR return area + li r5,0 // struct offset ptr (NULL) + li r6,0 // FPR used count ptr (NULL) + li r8,0 // GPR return area size ptr (NULL) + li r10,0 // FPR return area size ptr (NULL) + bl Lffi64_struct_to_reg_form$stub + + // Load GPRs + ld r3,SF_ARG9(r1) + ld r4,SF_ARG10(r1) + ld r5,SF_ARG11(r1) + ld r6,SF_ARG12(r1) + nop + ld r7,SF_ARG13(r1) + ld r8,SF_ARG14(r1) + ld r9,SF_ARG15(r1) + ld r10,SF_ARG16(r1) + nop + + // Load FPRs + mtcrf 0x2,r31 + bf 26,Lfinish + lfd f1,-16-(14*8)(r30) + lfd f2,-16-(13*8)(r30) + lfd f3,-16-(12*8)(r30) + lfd f4,-16-(11*8)(r30) + nop + lfd f5,-16-(10*8)(r30) + lfd f6,-16-(9*8)(r30) + lfd f7,-16-(8*8)(r30) + lfd f8,-16-(7*8)(r30) + nop + lfd f9,-16-(6*8)(r30) + lfd f10,-16-(5*8)(r30) + lfd f11,-16-(4*8)(r30) + lfd f12,-16-(3*8)(r30) + nop + lfd f13,-16-(2*8)(r30) + lfd f14,-16-(1*8)(r30) + // Fall through + +// case done +Lfinish: + lg r1,0(r1) // Restore stack pointer. + ld r31,-8(r1) // Restore registers we used. + ld r30,-16(r1) + lg r0,SF_RETURN(r1) // Get return address. + mtlr r0 // Reset link register. + blr + +// END(ffi_closure_ASM) + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_reg_form$stub: + .indirect_symbol _ffi64_struct_to_reg_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_reg_form + +LO$ffi64_struct_to_reg_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form)(r11) + mtctr r12 + bctr + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_data_size$stub: + .indirect_symbol _ffi64_data_size + mflr r0 + bcl 20,31,LO$ffi64_data_size + +LO$ffi64_data_size: + mflr r11 + addis r11,r11,ha16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size) + mtlr r0 + lgu r12,lo16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_reg_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_reg_form + .g_long dyld_stub_binding_helper + +L_ffi64_data_size$lazy_ptr: + .indirect_symbol _ffi64_data_size + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/types.c ./Modules/_ctypes/libffi_osx/types.c new file mode 100644 index 0000000..44806ae --- /dev/null +++ ./Modules/_ctypes/libffi_osx/types.c @@ -0,0 +1,115 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +/* Type definitions */ +#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) \ + ffi_type ffi_type_##n = { s, a, t, NULL } +#define FFI_AGGREGATE_TYPEDEF(n, e) \ + ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } + +FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); +FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); +FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); +FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); +FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); +FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); +FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); + +/* Size and alignment are fake here. They must not be 0. */ +FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); + +#if defined ALPHA || defined SPARC64 || defined X86_64 || \ + defined S390X || defined IA64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); +#else +FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); +#endif + +#if defined X86 || defined ARM || defined M68K || defined(X86_DARWIN) + +# ifdef X86_64 + FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +# else + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +# endif + +#elif defined(POWERPC_DARWIN) +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#elif defined SH +FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +#else +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#endif + +#if defined X86 || defined X86_WIN32 || defined M68K || defined(X86_DARWIN) + +# if defined X86_WIN32 || defined X86_64 + FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +# endif + +# ifdef X86_DARWIN + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined ARM || defined SH || defined POWERPC_AIX +FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); +#elif defined POWERPC_DARWIN +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# if __GNUC__ >= 4 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined SPARC +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# ifdef SPARC64 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined X86_64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +#else +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/x86/darwin64.S ./Modules/_ctypes/libffi_osx/x86/darwin64.S new file mode 100644 index 0000000..165d469 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -0,0 +1,417 @@ +/* ----------------------------------------------------------------------- + darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. + derived from unix64.S + + x86-64 Foreign Function Interface for Darwin. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifdef __x86_64__ +#define LIBFFI_ASM +#include +#include + + .file "darwin64.S" +.text + +/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, + void *raddr, void (*fnaddr)()); + + Bit o trickiness here -- ARGS+BYTES is the base of the stack frame + for this function. This has been allocated by ffi_call. We also + deallocate some of the stack that has been alloca'd. */ + + .align 3 + .globl _ffi_call_unix64 + +_ffi_call_unix64: +LUW0: + movq (%rsp), %r10 /* Load return address. */ + movq %rdi, %r12 /* Save a copy of the register area. */ + leaq (%rdi, %rsi), %rax /* Find local stack base. */ + movq %rdx, (%rax) /* Save flags. */ + movq %rcx, 8(%rax) /* Save raddr. */ + movq %rbp, 16(%rax) /* Save old frame pointer. */ + movq %r10, 24(%rax) /* Relocate return address. */ + movq %rax, %rbp /* Finalize local stack frame. */ +LUW1: + /* movq %rdi, %r10 // Save a copy of the register area. */ + movq %r12, %r10 + movq %r8, %r11 /* Save a copy of the target fn. */ + movl %r9d, %eax /* Set number of SSE registers. */ + + /* Load up all argument registers. */ + movq (%r10), %rdi + movq 8(%r10), %rsi + movq 16(%r10), %rdx + movq 24(%r10), %rcx + movq 32(%r10), %r8 + movq 40(%r10), %r9 + testl %eax, %eax + jnz Lload_sse +Lret_from_load_sse: + + /* Deallocate the reg arg area. */ + leaq 176(%r10), %rsp + + /* Call the user function. */ + call *%r11 + + /* Deallocate stack arg area; local stack frame in redzone. */ + leaq 24(%rbp), %rsp + + movq 0(%rbp), %rcx /* Reload flags. */ + movq 8(%rbp), %rdi /* Reload raddr. */ + movq 16(%rbp), %rbp /* Reload old frame pointer. */ +LUW2: + + /* The first byte of the flags contains the FFI_TYPE. */ + movzbl %cl, %r10d + leaq Lstore_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lstore_table: + .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ + .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ + .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ + .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ + .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ + .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ + .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ + .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ + .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ + .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ + .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lst_void: + ret + .align 3 +Lst_uint8: + movzbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_sint8: + movsbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint16: + movzwq %ax, %rax + movq %rax, (%rdi) + .align 3 +Lst_sint16: + movswq %ax, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint32: + movl %eax, %eax + movq %rax, (%rdi) + .align 3 +Lst_sint32: + cltq + movq %rax, (%rdi) + ret + .align 3 +Lst_int64: + movq %rax, (%rdi) + ret + .align 3 +Lst_float: + movss %xmm0, (%rdi) + ret + .align 3 +Lst_double: + movsd %xmm0, (%rdi) + ret +Lst_ldouble: + fstpt (%rdi) + ret + .align 3 +Lst_struct: + leaq -20(%rsp), %rsi /* Scratch area in redzone. */ + + /* We have to locate the values now, and since we don't want to + write too much data into the user's return value, we spill the + value to a 16 byte scratch area first. Bits 8, 9, and 10 + control where the values are located. Only one of the three + bits will be set; see ffi_prep_cif_machdep for the pattern. */ + movd %xmm0, %r10 + movd %xmm1, %r11 + testl $0x100, %ecx + cmovnz %rax, %rdx + cmovnz %r10, %rax + testl $0x200, %ecx + cmovnz %r10, %rdx + testl $0x400, %ecx + cmovnz %r10, %rax + cmovnz %r11, %rdx + movq %rax, (%rsi) + movq %rdx, 8(%rsi) + + /* Bits 12-31 contain the true size of the structure. Copy from + the scratch area to the true destination. */ + shrl $12, %ecx + rep movsb + ret + + /* Many times we can avoid loading any SSE registers at all. + It's not worth an indirect jump to load the exact set of + SSE registers needed; zero or all is a good compromise. */ + .align 3 +LUW3: +Lload_sse: + movdqa 48(%r10), %xmm0 + movdqa 64(%r10), %xmm1 + movdqa 80(%r10), %xmm2 + movdqa 96(%r10), %xmm3 + movdqa 112(%r10), %xmm4 + movdqa 128(%r10), %xmm5 + movdqa 144(%r10), %xmm6 + movdqa 160(%r10), %xmm7 + jmp Lret_from_load_sse + +LUW4: + .align 3 + .globl _ffi_closure_unix64 + +_ffi_closure_unix64: +LUW5: + /* The carry flag is set by the trampoline iff SSE registers + are used. Don't clobber it before the branch instruction. */ + leaq -200(%rsp), %rsp +LUW6: + movq %rdi, (%rsp) + movq %rsi, 8(%rsp) + movq %rdx, 16(%rsp) + movq %rcx, 24(%rsp) + movq %r8, 32(%rsp) + movq %r9, 40(%rsp) + jc Lsave_sse +Lret_from_save_sse: + + movq %r10, %rdi + leaq 176(%rsp), %rsi + movq %rsp, %rdx + leaq 208(%rsp), %rcx + call _ffi_closure_unix64_inner + + /* Deallocate stack frame early; return value is now in redzone. */ + addq $200, %rsp +LUW7: + + /* The first byte of the return value contains the FFI_TYPE. */ + movzbl %al, %r10d + leaq Lload_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lload_table: + .long Lld_void-Lload_table /* FFI_TYPE_VOID */ + .long Lld_int32-Lload_table /* FFI_TYPE_INT */ + .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ + .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ + .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ + .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ + .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ + .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ + .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ + .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ + .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ + .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ + .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ + .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ + .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lld_void: + ret + .align 3 +Lld_int8: + movzbl -24(%rsp), %eax + ret + .align 3 +Lld_int16: + movzwl -24(%rsp), %eax + ret + .align 3 +Lld_int32: + movl -24(%rsp), %eax + ret + .align 3 +Lld_int64: + movq -24(%rsp), %rax + ret + .align 3 +Lld_float: + movss -24(%rsp), %xmm0 + ret + .align 3 +Lld_double: + movsd -24(%rsp), %xmm0 + ret + .align 3 +Lld_ldouble: + fldt -24(%rsp) + ret + .align 3 +Lld_struct: + /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, + %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading + both rdx and xmm1 with the second word. For the remaining, + bit 8 set means xmm0 gets the second word, and bit 9 means + that rax gets the second word. */ + movq -24(%rsp), %rcx + movq -16(%rsp), %rdx + movq -16(%rsp), %xmm1 + testl $0x100, %eax + cmovnz %rdx, %rcx + movd %rcx, %xmm0 + testl $0x200, %eax + movq -24(%rsp), %rax + cmovnz %rdx, %rax + ret + + /* See the comment above Lload_sse; the same logic applies here. */ + .align 3 +LUW8: +Lsave_sse: + movdqa %xmm0, 48(%rsp) + movdqa %xmm1, 64(%rsp) + movdqa %xmm2, 80(%rsp) + movdqa %xmm3, 96(%rsp) + movdqa %xmm4, 112(%rsp) + movdqa %xmm5, 128(%rsp) + movdqa %xmm6, 144(%rsp) + movdqa %xmm7, 160(%rsp) + jmp Lret_from_save_sse + +LUW9: +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ + .long L$set$0 +LSCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "zR\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ + .byte 0x10 /* CIE RA Column */ + .byte 0x1 /* uleb128 0x1; Augmentation size */ + .byte 0x10 /* FDE Encoding (pcrel sdata4) */ + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 /* uleb128 0x7 */ + .byte 0x8 /* uleb128 0x8 */ + .byte 0x90 /* DW_CFA_offset, column 0x10 */ + .byte 0x1 + .align 3 +LECIE1: + .globl _ffi_call_unix64.eh +_ffi_call_unix64.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 /* FDE CIE offset */ + .quad LUW0-. /* FDE initial location */ + .set L$set$2,LUW4-LUW0 /* FDE address range */ + .quad L$set$2 + .byte 0x0 /* Augmentation size */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$3,LUW1-LUW0 + .long L$set$3 + + /* New stack frame based off rbp. This is a itty bit of unwind + trickery in that the CFA *has* changed. There is no easy way + to describe it correctly on entry to the function. Fortunately, + it doesn't matter too much since at all points we can correctly + unwind back to ffi_call. Note that the location to which we + moved the return address is (the new) CFA-8, so from the + perspective of the unwind info, it hasn't moved. */ + .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ + .byte 0x6 + .byte 0x20 + .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ + .byte 0x2 + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$4,LUW2-LUW1 + .long L$set$4 + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 + .byte 0x8 + .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$5,LUW3-LUW2 + .long L$set$5 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE1: + .globl _ffi_closure_unix64.eh +_ffi_closure_unix64.eh: +LSFDE3: + .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ + .long L$set$6 +LASFDE3: + .long LASFDE3-EH_frame1 /* FDE CIE offset */ + .quad LUW5-. /* FDE initial location */ + .set L$set$7,LUW9-LUW5 /* FDE address range */ + .quad L$set$7 + .byte 0x0 /* Augmentation size */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$8,LUW6-LUW5 + .long L$set$8 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 208,1 /* uleb128 208 */ + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$9,LUW7-LUW6 + .long L$set$9 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 0x8 + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$10,LUW8-LUW7 + .long L$set$10 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE3: + .subsections_via_symbols + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S new file mode 100644 index 0000000..925a841 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S @@ -0,0 +1,422 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. + + X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +/* + * This file is based on sysv.S and then hacked up by Ronald who hasn't done + * assembly programming in 8 years. + */ + +#ifndef __x86_64__ + +#define LIBFFI_ASM +#include +#include + +#ifdef PyObjC_STRICT_DEBUGGING + /* XXX: Debugging of stack alignment, to be removed */ +#define ASSERT_STACK_ALIGNED movdqa -16(%esp), %xmm0 +#else +#define ASSERT_STACK_ALIGNED +#endif + +.text + +.globl _ffi_prep_args + + .align 4 +.globl _ffi_call_SYSV + +_ffi_call_SYSV: +LFB1: + pushl %ebp +LCFI0: + movl %esp,%ebp +LCFI1: + subl $8,%esp + /* Make room for all of the new args. */ + movl 16(%ebp),%ecx + subl %ecx,%esp + + movl %esp,%eax + + /* Place all of the ffi_prep_args in position */ + subl $8,%esp + pushl 12(%ebp) + pushl %eax + call *8(%ebp) + + /* Return stack to previous state and call the function */ + addl $16,%esp + + call *28(%ebp) + + /* Remove the space we pushed for the args */ + movl 16(%ebp),%ecx + addl %ecx,%esp + + /* Load %ecx with the return type code */ + movl 20(%ebp),%ecx + + /* If the return value pointer is NULL, assume no return value. */ + cmpl $0,24(%ebp) + jne Lretint + + /* Even if there is no space for the return value, we are + obliged to handle floating-point values. */ + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lnoretval + fstp %st(0) + + jmp Lepilogue + +Lretint: + cmpl $FFI_TYPE_INT,%ecx + jne Lretfloat + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp Lepilogue + +Lretfloat: + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lretdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstps (%ecx) + jmp Lepilogue + +Lretdouble: + cmpl $FFI_TYPE_DOUBLE,%ecx + jne Lretlongdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpl (%ecx) + jmp Lepilogue + +Lretlongdouble: + cmpl $FFI_TYPE_LONGDOUBLE,%ecx + jne Lretint64 + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpt (%ecx) + jmp Lepilogue + +Lretint64: + cmpl $FFI_TYPE_SINT64,%ecx + jne Lretstruct1b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + movl %edx,4(%ecx) + jmp Lepilogue + +Lretstruct1b: + cmpl $FFI_TYPE_SINT8,%ecx + jne Lretstruct2b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movb %al,0(%ecx) + jmp Lepilogue + +Lretstruct2b: + cmpl $FFI_TYPE_SINT16,%ecx + jne Lretstruct + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movw %ax,0(%ecx) + jmp Lepilogue + +Lretstruct: + cmpl $FFI_TYPE_STRUCT,%ecx + jne Lnoretval + /* Nothing to do! */ + addl $4,%esp + popl %ebp + ret + +Lnoretval: +Lepilogue: + addl $8,%esp + movl %ebp,%esp + popl %ebp + ret +LFE1: +.ffi_call_SYSV_end: + + .align 4 +FFI_HIDDEN (ffi_closure_SYSV) +.globl _ffi_closure_SYSV + +_ffi_closure_SYSV: +LFB2: + pushl %ebp +LCFI2: + movl %esp, %ebp +LCFI3: + subl $56, %esp + leal -40(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 8(%ebp), %edx + movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + movl %ebx, 8(%esp) +LCFI7: + call L_ffi_closure_SYSV_inner$stub + movl 8(%esp), %ebx + movl -12(%ebp), %ecx + cmpl $FFI_TYPE_INT, %eax + je Lcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lcls_retllong + cmpl $FFI_TYPE_UINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_SINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_UINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_SINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_STRUCT, %eax + je Lcls_retstruct +Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret +Lcls_retint: + movl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retfloat: + flds (%ecx) + jmp Lcls_epilogue +Lcls_retdouble: + fldl (%ecx) + jmp Lcls_epilogue +Lcls_retldouble: + fldt (%ecx) + jmp Lcls_epilogue +Lcls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp Lcls_epilogue +Lcls_retstruct1: + movsbl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct2: + movswl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct: + lea -8(%ebp),%esp + movl %ebp, %esp + popl %ebp + ret $4 +LFE2: + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + + .align 4 +FFI_HIDDEN (ffi_closure_raw_SYSV) +.globl _ffi_closure_raw_SYSV + +_ffi_closure_raw_SYSV: +LFB3: + pushl %ebp +LCFI4: + movl %esp, %ebp +LCFI5: + pushl %esi +LCFI6: + subl $36, %esp + movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ + movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ + movl %edx, 12(%esp) /* user_data */ + leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ + movl %edx, 8(%esp) /* raw_args */ + leal -24(%ebp), %edx + movl %edx, 4(%esp) /* &res */ + movl %esi, (%esp) /* cif */ + call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ + movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ + cmpl $FFI_TYPE_INT, %eax + je Lrcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lrcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lrcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lrcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lrcls_retllong +Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret +Lrcls_retint: + movl -24(%ebp), %eax + jmp Lrcls_epilogue +Lrcls_retfloat: + flds -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retdouble: + fldl -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retldouble: + fldt -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retllong: + movl -24(%ebp), %eax + movl -20(%ebp), %edx + jmp Lrcls_epilogue +LFE3: +#endif + +.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 +L_ffi_closure_SYSV_inner$stub: + .indirect_symbol _ffi_closure_SYSV_inner + hlt ; hlt ; hlt ; hlt ; hlt + + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 +LSCIE1: + .long 0x0 + .byte 0x1 + .ascii "zR\0" + .byte 0x1 + .byte 0x7c + .byte 0x8 + .byte 0x1 + .byte 0x10 + .byte 0xc + .byte 0x5 + .byte 0x4 + .byte 0x88 + .byte 0x1 + .align 2 +LECIE1: +.globl _ffi_call_SYSV.eh +_ffi_call_SYSV.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 + .long LFB1-. + .set L$set$2,LFE1-LFB1 + .long L$set$2 + .byte 0x0 + .byte 0x4 + .set L$set$3,LCFI0-LFB1 + .long L$set$3 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$4,LCFI1-LCFI0 + .long L$set$4 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE1: +.globl _ffi_closure_SYSV.eh +_ffi_closure_SYSV.eh: +LSFDE2: + .set L$set$5,LEFDE2-LASFDE2 + .long L$set$5 +LASFDE2: + .long LASFDE2-EH_frame1 + .long LFB2-. + .set L$set$6,LFE2-LFB2 + .long L$set$6 + .byte 0x0 + .byte 0x4 + .set L$set$7,LCFI2-LFB2 + .long L$set$7 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$8,LCFI3-LCFI2 + .long L$set$8 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE2: + +#if !FFI_NO_RAW_API + +.globl _ffi_closure_raw_SYSV.eh +_ffi_closure_raw_SYSV.eh: +LSFDE3: + .set L$set$10,LEFDE3-LASFDE3 + .long L$set$10 +LASFDE3: + .long LASFDE3-EH_frame1 + .long LFB3-. + .set L$set$11,LFE3-LFB3 + .long L$set$11 + .byte 0x0 + .byte 0x4 + .set L$set$12,LCFI4-LFB3 + .long L$set$12 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$13,LCFI5-LCFI4 + .long L$set$13 + .byte 0xd + .byte 0x4 + .byte 0x4 + .set L$set$14,LCFI6-LCFI5 + .long L$set$14 + .byte 0x85 + .byte 0x3 + .align 2 +LEFDE3: + +#endif + +#endif /* ifndef __x86_64__ */ + +#endif /* defined __i386__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c new file mode 100644 index 0000000..06feaf2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c @@ -0,0 +1,734 @@ +#ifdef __x86_64__ + +/* ----------------------------------------------------------------------- + x86-ffi64.c - Copyright (c) 2002 Bo Thorsen + + x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#define MAX_GPR_REGS 6 +#define MAX_SSE_REGS 8 + +typedef struct RegisterArgs { + /* Registers for argument passing. */ + UINT64 gpr[MAX_GPR_REGS]; + __int128_t sse[MAX_SSE_REGS]; +} RegisterArgs; + +extern void +ffi_call_unix64( + void* args, + unsigned long bytes, + unsigned flags, + void* raddr, + void (*fnaddr)(), + unsigned ssecount); + +/* All reference to register classes here is identical to the code in + gcc/config/i386/i386.c. Do *not* change one without the other. */ + +/* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +enum x86_64_reg_class +{ + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_COMPLEX_X87_CLASS, + X86_64_MEMORY_CLASS +}; + +#define MAX_CLASSES 4 +#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + +/* x86-64 register passing implementation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + +/* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ +static enum x86_64_reg_class +merge_classes( + enum x86_64_reg_class class1, + enum x86_64_reg_class class2) +{ + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, + MEMORY is used. */ + if (class1 == X86_64_X87_CLASS + || class1 == X86_64_X87UP_CLASS + || class1 == X86_64_COMPLEX_X87_CLASS + || class2 == X86_64_X87_CLASS + || class2 == X86_64_X87UP_CLASS + || class2 == X86_64_COMPLEX_X87_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; +} + +/* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + See the x86-64 PS ABI for details. */ + +static int +classify_argument( + ffi_type* type, + enum x86_64_reg_class classes[], + size_t byte_offset) +{ + switch (type->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_POINTER: +#if 0 + if (byte_offset + type->size <= 4) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + + return 1; +#else + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } +#endif + + case FFI_TYPE_FLOAT: + if (byte_offset == 0) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + + return 1; + + case FFI_TYPE_DOUBLE: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + + case FFI_TYPE_LONGDOUBLE: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + + case FFI_TYPE_STRUCT: + { + ffi_type** ptr; + int i; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + const int UNITS_PER_WORD = 8; + int words = + (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + /* If the struct is larger than 16 bytes, pass it on the stack. */ + if (type->size > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Merge the fields of structure. */ + for (ptr = type->elements; *ptr != NULL; ptr++) + { + byte_offset = ALIGN(byte_offset, (*ptr)->alignment); + + int num = classify_argument(*ptr, subclasses, byte_offset % 8); + + if (num == 0) + return 0; + + int pos = byte_offset / 8; + + for (i = 0; i < num; i++) + { + classes[i + pos] = + merge_classes(subclasses[i], classes[i + pos]); + } + + byte_offset += (*ptr)->size; + } + + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && classes[i - 1] != X86_64_X87_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + } + + return words; + } + + default: + FFI_ASSERT(0); + } + + return 0; /* Never reached. */ +} + +/* Examine the argument and return set number of register required in each + class. Return zero if parameter should be passed in memory, otherwise + the number of registers. */ +static int +examine_argument( + ffi_type* type, + enum x86_64_reg_class classes[MAX_CLASSES], + _Bool in_return, + int* pngpr, + int* pnsse) +{ + int n = classify_argument(type, classes, 0); + int ngpr = 0; + int nsse = 0; + int i; + + if (n == 0) + return 0; + + for (i = 0; i < n; ++i) + { + switch (classes[i]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + ngpr++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + nsse++; + break; + + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + case X86_64_COMPLEX_X87_CLASS: + return in_return != 0; + + default: + abort(); + } + } + + *pngpr = ngpr; + *pnsse = nsse; + + return n; +} + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + int gprcount = 0; + int ssecount = 0; + int flags = cif->rtype->type; + int i, avn, n, ngpr, nsse; + enum x86_64_reg_class classes[MAX_CLASSES]; + size_t bytes; + + if (flags != FFI_TYPE_VOID) + { + n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value is passed in memory. A pointer to that + memory is the first argument. Allocate a register for it. */ + gprcount++; + + /* We don't have to do anything in asm for the return. */ + flags = FFI_TYPE_VOID; + } + else if (flags == FFI_TYPE_STRUCT) + { + /* Mark which registers the result appears in. */ + _Bool sse0 = SSE_CLASS_P(classes[0]); + _Bool sse1 = n == 2 && SSE_CLASS_P(classes[1]); + + if (sse0 && !sse1) + flags |= 1 << 8; + else if (!sse0 && sse1) + flags |= 1 << 9; + else if (sse0 && sse1) + flags |= 1 << 10; + + /* Mark the true size of the structure. */ + flags |= cif->rtype->size << 12; + } + } + + /* Go over all arguments and determine the way they should be passed. + If it's in a register and there is space for it, let that be so. If + not, add it's size to the stack byte count. */ + for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) + { + if (examine_argument(cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = cif->arg_types[i]->alignment; + + if (align < 8) + align = 8; + + bytes = ALIGN(bytes, align); + bytes += cif->arg_types[i]->size; + } + else + { + gprcount += ngpr; + ssecount += nsse; + } + } + + if (ssecount) + flags |= 1 << 11; + + cif->flags = flags; + cif->bytes = bytes; + cif->bytes = ALIGN(bytes,8); + + return FFI_OK; +} + +void +ffi_call( + ffi_cif* cif, + void (*fn)(), + void* rvalue, + void** avalue) +{ + enum x86_64_reg_class classes[MAX_CLASSES]; + char* stack; + char* argp; + ffi_type** arg_types; + int gprcount, ssecount, ngpr, nsse, i, avn; + _Bool ret_in_memory; + RegisterArgs* reg_args; + + /* Can't call 32-bit mode from 64-bit mode. */ + FFI_ASSERT(cif->abi == FFI_UNIX64); + + /* If the return value is a struct and we don't have a return value + address then we need to make one. Note the setting of flags to + VOID above in ffi_prep_cif_machdep. */ + ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT + && (cif->flags & 0xff) == FFI_TYPE_VOID); + + if (rvalue == NULL && ret_in_memory) + rvalue = alloca (cif->rtype->size); + + /* Allocate the space for the arguments, plus 4 words of temp space. */ + stack = alloca(sizeof(RegisterArgs) + cif->bytes + 4 * 8); + reg_args = (RegisterArgs*)stack; + argp = stack + sizeof(RegisterArgs); + + gprcount = ssecount = 0; + + /* If the return value is passed in memory, add the pointer as the + first integer argument. */ + if (ret_in_memory) + reg_args->gpr[gprcount++] = (long) rvalue; + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + size_t size = arg_types[i]->size; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + memcpy (argp, avalue[i], size); + argp += size; + } + else + { /* The argument is passed entirely in registers. */ + char *a = (char *) avalue[i]; + int j; + + for (j = 0; j < n; j++, a += 8, size -= 8) + { + switch (classes[j]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + reg_args->gpr[gprcount] = 0; + switch (arg_types[i]->type) { + case FFI_TYPE_SINT8: + { + int8_t shortval = *(int8_t*)a; + int64_t actval = (int64_t)shortval; + reg_args->gpr[gprcount] = actval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + break; + } + + case FFI_TYPE_SINT16: + { + int16_t shortval = *(int16_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_SINT32: + { + int32_t shortval = *(int32_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT8: + { + u_int8_t shortval = *(u_int8_t*)a; + u_int64_t actval = (u_int64_t)shortval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + reg_args->gpr[gprcount] = actval; + break; + } + + case FFI_TYPE_UINT16: + { + u_int16_t shortval = *(u_int16_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT32: + { + u_int32_t shortval = *(u_int32_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + default: + //memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); + reg_args->gpr[gprcount] = *(int64_t*)a; + } + gprcount++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSEDF_CLASS: + reg_args->sse[ssecount++] = *(UINT64 *) a; + break; + + case X86_64_SSESF_CLASS: + reg_args->sse[ssecount++] = *(UINT32 *) a; + break; + + default: + abort(); + } + } + } + } + + ffi_call_unix64 (stack, cif->bytes + sizeof(RegisterArgs), + cif->flags, rvalue, fn, ssecount); +} + +extern void ffi_closure_unix64(void); + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + if (cif->abi != FFI_UNIX64) + return FFI_BAD_ABI; + + volatile unsigned short* tramp = + (volatile unsigned short*)&closure->tramp[0]; + + tramp[0] = 0xbb49; /* mov , %r11 */ + *(void* volatile*)&tramp[1] = ffi_closure_unix64; + tramp[5] = 0xba49; /* mov , %r10 */ + *(void* volatile*)&tramp[6] = closure; + + /* Set the carry bit if the function uses any sse registers. + This is clc or stc, together with the first byte of the jmp. */ + tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + tramp[11] = 0xe3ff; /* jmp *%r11 */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmissing-prototypes" +int +ffi_closure_unix64_inner( + ffi_closure* closure, + void* rvalue, + RegisterArgs* reg_args, + char* argp) +#pragma clang diagnostic pop +{ + ffi_cif* cif = closure->cif; + void** avalue = alloca(cif->nargs * sizeof(void *)); + ffi_type** arg_types; + long i, avn; + int gprcount = 0; + int ssecount = 0; + int ngpr, nsse; + int ret; + + ret = cif->rtype->type; + + if (ret != FFI_TYPE_VOID) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value goes in memory. Arrange for the closure + return value to go directly back to the original caller. */ + rvalue = (void *) reg_args->gpr[gprcount++]; + + /* We don't have to do anything in asm for the return. */ + ret = FFI_TYPE_VOID; + } + else if (ret == FFI_TYPE_STRUCT && n == 2) + { + /* Mark which register the second word of the structure goes in. */ + _Bool sse0 = SSE_CLASS_P (classes[0]); + _Bool sse1 = SSE_CLASS_P (classes[1]); + + if (!sse0 && sse1) + ret |= 1 << 8; + else if (sse0 && !sse1) + ret |= 1 << 9; + } + } + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + avalue[i] = argp; + argp += arg_types[i]->size; + } + +#if !defined(X86_DARWIN) + /* If the argument is in a single register, or two consecutive + registers, then we can use that address directly. */ + else if (n == 1 || (n == 2 && + SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + { + // The argument is in a single register. + if (SSE_CLASS_P (classes[0])) + { + avalue[i] = ®_args->sse[ssecount]; + ssecount += n; + } + else + { + avalue[i] = ®_args->gpr[gprcount]; + gprcount += n; + } + } +#endif + + /* Otherwise, allocate space to make them consecutive. */ + else + { + char *a = alloca (16); + int j; + + avalue[i] = a; + + for (j = 0; j < n; j++, a += 8) + { + if (SSE_CLASS_P (classes[j])) + memcpy (a, ®_args->sse[ssecount++], 8); + else + memcpy (a, ®_args->gpr[gprcount++], 8); + } + } + } + + /* Invoke the closure. */ + closure->fun (cif, rvalue, avalue, closure->user_data); + + /* Tell assembly how to perform return type promotions. */ + return ret; +} + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c new file mode 100644 index 0000000..706ea0f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c @@ -0,0 +1,438 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2002 Bo Thorsen + Copyright (c) 2002 Roger Sayle + + x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void ffi_prep_args(char *stack, extended_cif *ecif); + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if (ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void **) argp = ecif->rvalue; + argp += 4; + } + + p_argv = ecif->avalue; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + i != 0; + i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) + argp = (char *) ALIGN(argp, sizeof(int)); + + z = (*p_arg)->size; + if (z < sizeof(int)) + { + z = sizeof(int); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } + else + { + memcpy(argp, *p_argv, z); + } + p_argv++; + argp += z; + } + + return; +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Set the return type flag */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: +#ifdef X86 + case FFI_TYPE_STRUCT: + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: +#endif + + case FFI_TYPE_SINT64: + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_UINT64: + cif->flags = FFI_TYPE_SINT64; + break; + +#ifndef X86 + case FFI_TYPE_STRUCT: + if (cif->rtype->size == 1) + { + cif->flags = FFI_TYPE_SINT8; /* same as char size */ + } + else if (cif->rtype->size == 2) + { + cif->flags = FFI_TYPE_SINT16; /* same as short size */ + } + else if (cif->rtype->size == 4) + { + cif->flags = FFI_TYPE_INT; /* same as int type */ + } + else if (cif->rtype->size == 8) + { + cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ + } + else + { + cif->flags = FFI_TYPE_STRUCT; + } + break; +#endif + + default: + cif->flags = FFI_TYPE_INT; + break; + } + +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + + return FFI_OK; +} + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#endif /* X86_WIN32 */ + +void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->flags == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, + fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + + +/** private members **/ + +static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) +__attribute__ ((regparm(1))); +unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) +__attribute__ ((regparm(1))); +void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) +__attribute__ ((regparm(1))); + +/* This function is jumped to by the trampoline */ + +unsigned int FFI_HIDDEN +ffi_closure_SYSV_inner (closure, respp, args) +ffi_closure *closure; +void **respp; +void *args; +{ + // our various things... + ffi_cif *cif; + void **arg_area; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will re-set RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun) (cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +static void +ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, + ffi_cif *cif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if ( cif->flags == FFI_TYPE_STRUCT ) { + *rvalue = *(void **) argp; + argp += 4; + } + + p_argv = avalue; + + for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, sizeof(int)); + } + + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + + p_argv++; + argp += z; + } + + return; +} + +/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ + +#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ +({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +unsigned int __fun = (unsigned int)(FUN); \ +unsigned int __ctx = (unsigned int)(CTX); \ +unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \ +*(unsigned char*) &__tramp[0] = 0xb8; \ +*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ +*(unsigned char *) &__tramp[5] = 0xe9; \ +*(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ +}) + + +/* the cif must already be prep'ed */ +ffi_status +ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data) +{ + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ + &ffi_closure_SYSV, \ + (void*)closure); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +/* ------- Native raw API support -------------------------------- */ + +#if !FFI_NO_RAW_API + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + int i; + + FFI_ASSERT (cif->abi == FFI_SYSV); + + // we currently don't support certain kinds of arguments for raw + // closures. This should be implemented by a separate assembly language + // routine, since it would require argument processing, something we + // don't do now for performance. + + for (i = cif->nargs-1; i >= 0; i--) + { + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); + } + + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, + codeloc); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +static void +ffi_prep_args_raw(char *stack, extended_cif *ecif) +{ + memcpy (stack, ecif->avalue, ecif->cif->bytes); +} + +/* we borrow this routine from libffi (it must be changed, though, to + * actually call the function passed in the first argument. as of + * libffi-1.20, this is not the case.) + */ + +extern void +ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void +ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); +#endif /* X86_WIN32 */ + +void +ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue) +{ + extended_cif ecif; + void **avalue = (void **)fake_avalue; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + +#endif +#endif // __i386__ diff -r -u ./setup.py ./setup.py index 46b92fe..2bf6b4b 100644 --- ./setup.py +++ ./setup.py @@ -98,8 +98,14 @@ class PyBuildExt(build_ext): self.detect_modules() # Remove modules that are present on the disabled list - self.extensions = [ext for ext in self.extensions - if ext.name not in disabled_module_list] + extensions = [ext for ext in self.extensions + if ext.name not in disabled_module_list] + # move ctypes to the end, it depends on other modules + ext_map = dict((ext.name, i) for i, ext in enumerate(extensions)) + if "_ctypes" in ext_map: + ctypes = extensions.pop(ext_map["_ctypes"]) + extensions.append(ctypes) + self.extensions = extensions # Fix up the autodetected modules, prefixing all the source files # with Modules/ and adding Python's include directory to the path. @@ -1330,9 +1336,39 @@ class PyBuildExt(build_ext): # *** Uncomment these for TOGL extension only: # -lGL -lGLU -lXext -lXmu \ + def configure_ctypes_darwin(self, ext): + # Darwin (OS X) uses preconfigured files, in + # the Modules/_ctypes/libffi_osx directory. + srcdir = sysconfig.get_config_var('srcdir') + ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', + '_ctypes', 'libffi_osx')) + sources = [os.path.join(ffi_srcdir, p) + for p in ['ffi.c', + 'x86/darwin64.S', + 'x86/x86-darwin.S', + 'x86/x86-ffi_darwin.c', + 'x86/x86-ffi64.c', + 'powerpc/ppc-darwin.S', + 'powerpc/ppc-darwin_closure.S', + 'powerpc/ppc-ffi_darwin.c', + 'powerpc/ppc64-darwin_closure.S', + ]] + + # Add .S (preprocessed assembly) to C compiler source extensions. + self.compiler.src_extensions.append('.S') + + include_dirs = [os.path.join(ffi_srcdir, 'include'), + os.path.join(ffi_srcdir, 'powerpc')] + ext.include_dirs.extend(include_dirs) + ext.sources.extend(sources) + return True + def configure_ctypes(self, ext): if not self.use_system_libffi: - (srcdir,) = sysconfig.get_config_vars('srcdir') + if sys.platform == 'darwin': + return self.configure_ctypes_darwin(ext) + + srcdir = sysconfig.get_config_var('srcdir') ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', '_ctypes', 'libffi')) @@ -1347,7 +1383,10 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = [arg for arg in sysconfig.get_config_var("CONFIG_ARGS").split() + if (('--host=' in arg) or ('--build=' in arg))] + if not self.verbose: + config_args.append("-q") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. @@ -1367,10 +1406,12 @@ class PyBuildExt(build_ext): self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), - ffi_builddir, ffi_srcdir] + ffi_builddir, + os.path.join(ffi_srcdir, 'src')] extra_compile_args = fficonfig['ffi_cflags'].split() - ext.sources.extend(fficonfig['ffi_sources']) + ext.sources.extend(os.path.join(ffi_srcdir, f) for f in + fficonfig['ffi_sources']) ext.include_dirs.extend(include_dirs) ext.extra_compile_args.extend(extra_compile_args) return True @@ -1390,6 +1431,7 @@ class PyBuildExt(build_ext): if sys.platform == 'darwin': sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') # XXX Is this still needed? ## extra_link_args.extend(['-read_only_relocs', 'warning']) @@ -1419,7 +1461,14 @@ class PyBuildExt(build_ext): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = find_file('ffi.h', [], inc_dirs) + if sys.platform == 'darwin': + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + if not ffi_inc or ffi_inc[0] == '': + ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' fp = open(ffi_h) 005_osx_failed_modules.patch000066400000000000000000000076331476513315000337310ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.2/Python-2.5.2diff -r -u ./Mac/Modules/cg/_CGmodule.c ./Mac/Modules/cg/_CGmodule.c index 8115614..e36fce9 100755 --- ./Mac/Modules/cg/_CGmodule.c +++ ./Mac/Modules/cg/_CGmodule.c @@ -1025,6 +1025,7 @@ static PyObject *CGContextRefObj_CGContextSetShouldAntialias(CGContextRefObject return _res; } +#ifndef __LP64__ static PyObject *CGContextRefObj_SyncCGContextOriginWithPort(CGContextRefObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1055,6 +1056,7 @@ static PyObject *CGContextRefObj_ClipCGContextToRegion(CGContextRefObject *_self _res = Py_None; return _res; } +#endif static PyMethodDef CGContextRefObj_methods[] = { {"CGContextSaveGState", (PyCFunction)CGContextRefObj_CGContextSaveGState, 1, @@ -1173,10 +1175,12 @@ static PyMethodDef CGContextRefObj_methods[] = { PyDoc_STR("() -> None")}, {"CGContextSetShouldAntialias", (PyCFunction)CGContextRefObj_CGContextSetShouldAntialias, 1, PyDoc_STR("(int shouldAntialias) -> None")}, +#ifndef __LP64__ {"SyncCGContextOriginWithPort", (PyCFunction)CGContextRefObj_SyncCGContextOriginWithPort, 1, PyDoc_STR("(CGrafPtr port) -> None")}, {"ClipCGContextToRegion", (PyCFunction)CGContextRefObj_ClipCGContextToRegion, 1, PyDoc_STR("(Rect portRect, RgnHandle region) -> None")}, +#endif {NULL, NULL, 0} }; @@ -1254,6 +1258,7 @@ PyTypeObject CGContextRef_Type = { /* ------------------ End object type CGContextRef ------------------ */ +#ifndef __LP64__ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1271,10 +1276,13 @@ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) return _res; } +#endif static PyMethodDef CG_methods[] = { +#ifndef __LP64__ {"CreateCGContextForPort", (PyCFunction)CG_CreateCGContextForPort, 1, PyDoc_STR("(CGrafPtr) -> CGContextRef")}, +#endif {NULL, NULL, 0} }; diff -r -u ./Modules/_curses_panel.c ./Modules/_curses_panel.c index 0acf3fd..1728b59 100644 --- ./Modules/_curses_panel.c +++ ./Modules/_curses_panel.c @@ -56,7 +56,7 @@ typedef struct { PyTypeObject PyCursesPanel_Type; -#define PyCursesPanel_Check(v) ((v)->ob_type == &PyCursesPanel_Type) +#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type) /* Some helper functions. The problem is that there's always a window associated with a panel. To ensure that Python's GC doesn't pull @@ -178,12 +178,13 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo) po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); - return NULL; + po->wo = NULL; + Py_DECREF(po); + return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ static void PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } @@ -338,11 +341,10 @@ PyCursesPanel_GetAttr(PyCursesPanelObject *self, char *name) /* -------------------------------------------------------*/ PyTypeObject PyCursesPanel_Type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "_curses_panel.curses panel", /*tp_name*/ - sizeof(PyCursesPanelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + "_curses_panel.curses panel", /*tp_name*/ + sizeof(PyCursesPanelObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/ 0, /*tp_print*/ @@ -458,7 +460,7 @@ init_curses_panel(void) PyObject *m, *d, *v; /* Initialize object type */ - PyCursesPanel_Type.ob_type = &PyType_Type; + Py_TYPE(&PyCursesPanel_Type) = &PyType_Type; import_curses(); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/000077500000000000000000000000001476513315000246035ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/Python-2.5.3/000077500000000000000000000000001476513315000265275ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325460ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/Python-2.5.3--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-svnversion.patch000066400000000000000000000023661476513315000333710ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/Python-2.5.3--- configure.in +++ configure.in @@ -767,7 +767,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in --- Makefile.pre.in +++ Makefile.pre.in @@ -501,7 +501,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ --- Modules/getbuildinfo.c +++ Modules/getbuildinfo.c @@ -48,5 +48,5 @@ static const char svnversion[] = SVNVERSION; if (svnversion[0] != '$') return svnversion; /* it was interpolated, or passed on command line */ - return "exported"; + return "Unversioned directory"; } --- Python/sysmodule.c +++ Python/sysmodule.c @@ -1161,7 +1161,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0 && strcmp(svnversion, "exported") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); 002_darwin_c_source.patch000066400000000000000000000132671476513315000332310ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/Python-2.5.3diff -r -u ./configure ../Python-2.5/configure --- ./configure 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure 2013-07-19 15:27:46.000000000 +0900 @@ -1396,6 +1396,16 @@ _ACEOF +# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable +# them. + +cat >>confdefs.h <<\_ACEOF +#define _DARWIN_C_SOURCE 1 +_ACEOF + + + define_xopen_source=yes # Arguments passed to configure. @@ -3885,11 +3895,110 @@ ;; # is there any other compiler on Darwin besides gcc? Darwin*) - BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" + # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd + # used to be here, but non-Apple gcc doesn't accept them. + if test "${CC}" = gcc + then + { echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +echo -n "checking which compiler should be used... " >&6; } + case "${UNIVERSALSDK}" in + */MacOSX10.4u.sdk) + # Build using 10.4 SDK, force usage of gcc when the + # compiler is gcc, otherwise the user will get very + # confusing error messages when building on OSX 10.6 + CC=gcc-4.0 + CPP=cpp-4.0 + ;; + esac + { echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +echo "$CC" >&6; } + fi + + if test "${enable_universalsdk}"; then - BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + UNIVERSAL_ARCH_FLAGS="" + if test "$UNIVERSAL_ARCHS" = "32-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" + ARCH_RUN_32BIT="" + LIPO_32BIT_FLAGS="" + elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + + elif test "$UNIVERSAL_ARCHS" = "all" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + elif test "$UNIVERSAL_ARCHS" = "intel" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386" + + elif test "$UNIVERSAL_ARCHS" = "3-way" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + else + as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + + fi + + + CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}" + if test "${UNIVERSALSDK}" != "/" + then + CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}" + LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}" + CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}" + fi fi + # Calculate the right deployment target for this build. + # + cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` + if test ${cur_target} '>' 10.2 && \ + test ${cur_target} '<' 10.6 + then + cur_target=10.3 + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "3-way"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "intel"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then + cur_target='10.5' + fi + else + if test `/usr/bin/arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi + fi + CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} + + # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the + # environment with a value that is the same as what we'll use + # in the Makefile to ensure that we'll get the same compiler + # environment during configure and build time. + MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" + export MACOSX_DEPLOYMENT_TARGET + EXPORT_MACOSX_DEPLOYMENT_TARGET='' + ;; OSF*) BASECFLAGS="$BASECFLAGS -mieee" @@ -10851,7 +10960,7 @@ if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -10863,7 +10972,7 @@ else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac diff -r -u ./pyconfig.h.in ../Python-2.5/pyconfig.h.in --- ./pyconfig.h.in 2006-07-30 23:09:47.000000000 +0900 +++ ../Python-2.5/pyconfig.h.in 2013-07-17 23:12:31.000000000 +0900 @@ -912,6 +912,11 @@ /* Define on Irix to enable u_int */ #undef _BSD_TYPES +/* Define on Darwin to activate all library features */ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE +#endif + /* This must be set to 64 on some systems to enable large file support. */ #undef _FILE_OFFSET_BITS pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/Python-2.5.3/003_osx_lp64.patch000066400000000000000000000215441476513315000316160ustar00rootroot00000000000000diff -r -u ./Include/pymactoolbox.h ../Python-2.5/Include/pymactoolbox.h --- ./Include/pymactoolbox.h 2004-11-05 16:02:59.000000000 +0900 +++ ../Python-2.5/Include/pymactoolbox.h 2013-07-17 23:38:51.000000000 +0900 @@ -8,7 +8,10 @@ #endif #include + +#ifndef __LP64__ #include +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +21,11 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* __LP64__ */ + /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,8 +89,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +109,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +169,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +178,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); diff -r -u ./Mac/Modules/res/_Resmodule.c ../Python-2.5/Mac/Modules/res/_Resmodule.c --- ./Mac/Modules/res/_Resmodule.c 2005-07-04 05:59:44.000000000 +0900 +++ ../Python-2.5/Mac/Modules/res/_Resmodule.c 2013-07-17 23:38:51.000000000 +0900 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -1152,6 +1154,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1290,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1331,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1418,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1444,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1541,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* __LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1645,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1656,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1670,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* __LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* __LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, diff -r -u ./Modules/_ctypes/libffi/src/darwin/ffitarget.h ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h --- ./Modules/_ctypes/libffi/src/darwin/ffitarget.h 2006-05-26 06:58:05.000000000 +0900 +++ ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h 2013-07-17 23:38:51.000000000 +0900 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN diff -r -u ./Python/mactoolboxglue.c ../Python-2.5/Python/mactoolboxglue.c --- ./Python/mactoolboxglue.c 2006-07-12 01:44:25.000000000 +0900 +++ ../Python-2.5/Python/mactoolboxglue.c 2013-07-17 23:39:09.000000000 +0900 @@ -106,6 +106,7 @@ } +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +154,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +419,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +432,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/Python-2.5.3/004_osx_libffi.patch000066400000000000000000005661361476513315000323000ustar00rootroot00000000000000diff -r -u ./Modules/_ctypes/libffi_osx/LICENSE ./Modules/_ctypes/libffi_osx/LICENSE new file mode 100644 index 0000000..f591795 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/LICENSE @@ -0,0 +1,20 @@ +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff -r -u ./Modules/_ctypes/libffi_osx/README ./Modules/_ctypes/libffi_osx/README new file mode 100644 index 0000000..1fc2747 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README @@ -0,0 +1,500 @@ +This directory contains the libffi package, which is not part of GCC but +shipped with GCC as convenience. + +Status +====== + +libffi-2.00 has not been released yet! This is a development snapshot! + +libffi-1.20 was released on October 5, 1998. Check the libffi web +page for updates: . + + +What is libffi? +=============== + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. Libffi can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The libffi library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + +Ffi stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +libffi library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above libffi that handles type conversions for values passed +between the two languages. + + +Supported Platforms and Prerequisites +===================================== + +Libffi has been ported to: + + SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) + + Irix 5.3 & 6.2 (System V/o32 & n32) + + Intel x86 - Linux (System V ABI) + + Alpha - Linux and OSF/1 + + m68k - Linux (System V ABI) + + PowerPC - Linux (System V ABI, Darwin, AIX) + + ARM - Linux (System V ABI) + +Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are +that other versions will work. Libffi has also been built and tested +with the SGI compiler tools. + +On PowerPC, the tests failed (see the note below). + +You must use GNU make to build libffi. SGI's make will not work. +Sun's probably won't either. + +If you port libffi to another platform, please let me know! I assume +that some will be easy (x86 NetBSD), and others will be more difficult +(HP). + + +Installing libffi +================= + +[Note: before actually performing any of these installation steps, + you may wish to read the "Platform Specific Notes" below.] + +First you must configure the distribution for your particular +system. Go to the directory you wish to build libffi in and run the +"configure" program found in the root directory of the libffi source +distribution. + +You may want to tell configure where to install the libffi library and +header files. To do that, use the --prefix configure switch. Libffi +will install under /usr/local by default. + +If you want to enable extra run-time debugging checks use the the +--enable-debug configure switch. This is useful when your program dies +mysteriously while using libffi. + +Another useful configure switch is --enable-purify-safety. Using this +will add some extra code which will suppress certain warnings when you +are using Purify with libffi. Only use this switch when using +Purify, as it will slow down the library. + +Configure has many other options. Use "configure --help" to see them all. + +Once configure has finished, type "make". Note that you must be using +GNU make. SGI's make will not work. Sun's probably won't either. +You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. + +To ensure that libffi is working as advertised, type "make test". + +To install the library and header files, type "make install". + + +Using libffi +============ + + The Basics + ---------- + +Libffi assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, +as well as the return type of the function. + +The first thing you must do is create an ffi_cif object that matches +the signature of the function you wish to call. The cif in ffi_cif +stands for Call InterFace. To prepare a call interface object, use the +following function: + +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, ffi_type **atypes); + + CIF is a pointer to the call interface object you wish + to initialize. + + ABI is an enum that specifies the calling convention + to use for the call. FFI_DEFAULT_ABI defaults + to the system's native calling convention. Other + ABI's may be used with care. They are system + specific. + + NARGS is the number of arguments this function accepts. + libffi does not yet support vararg functions. + + RTYPE is a pointer to an ffi_type structure that represents + the return type of the function. Ffi_type objects + describe the types of values. libffi provides + ffi_type objects for many of the native C types: + signed int, unsigned int, signed char, unsigned char, + etc. There is also a pointer ffi_type object and + a void ffi_type. Use &ffi_type_void for functions that + don't return values. + + ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. + If NARGS is 0, this is ignored. + + +ffi_prep_cif will return a status code that you are responsible +for checking. It will be one of the following: + + FFI_OK - All is good. + + FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif + came across is bad. + + +Before making the call, the VALUES vector should be initialized +with pointers to the appropriate argument values. + +To call the function using the initialized ffi_cif, use the +ffi_call function: + +void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); + + CIF is a pointer to the ffi_cif initialized specifically + for this function. + + FN is a pointer to the function you want to call. + + RVALUE is a pointer to a chunk of memory that is to hold the + result of the function call. Currently, it must be + at least one word in size (except for the n32 version + under Irix 6.x, which must be a pointer to an 8 byte + aligned value (a long long). It must also be at least + word aligned (depending on the return type, and the + system's alignment requirements). If RTYPE is + &ffi_type_void, this is ignored. If RVALUE is NULL, + the return value is discarded. + + AVALUES is a vector of void* that point to the memory locations + holding the argument values for a call. + If NARGS is 0, this is ignored. + + +If you are expecting a return value from FN it will have been stored +at RVALUE. + + + + An Example + ---------- + +Here is a trivial example that calls puts() a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_uint; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + + + Aggregate Types + --------------- + +Although libffi has no special support for unions or bit-fields, it is +perfectly happy passing structures back and forth. You must first +describe the structure to libffi by creating a new ffi_type object +for it. Here is the definition of ffi_type: + + typedef struct _ffi_type + { + unsigned size; + short alignment; + short type; + struct _ffi_type **elements; + } ffi_type; + +All structures must have type set to FFI_TYPE_STRUCT. You may set +size and alignment to 0. These will be calculated and reset to the +appropriate values by ffi_prep_cif(). + +elements is a NULL terminated array of pointers to ffi_type objects +that describe the type of the structure elements. These may, in turn, +be structure elements. + +The following example initializes a ffi_type object representing the +tm struct from Linux's time.h: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + + +Platform Specific Notes +======================= + + Intel x86 + --------- + +There are no known problems with the x86 port. + + Sun SPARC - SunOS 4.1.3 & Solaris 2.x + ------------------------------------- + +You must use GNU Make to build libffi on Sun platforms. + + MIPS - Irix 5.3 & 6.x + --------------------- + +Irix 6.2 and better supports three different calling conventions: o32, +n32 and n64. Currently, libffi only supports both o32 and n32 under +Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be +configured for whichever calling convention it was built for. + +By default, the configure script will try to build libffi with the GNU +development tools. To build libffi with the SGI development tools, set +the environment variable CC to either "cc -32" or "cc -n32" before +running configure under Irix 6.x (depending on whether you want an o32 +or n32 library), or just "cc" for Irix 5.3. + +With the n32 calling convention, when returning structures smaller +than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. +Here's one way of forcing this: + + double struct_storage[2]; + my_small_struct *s = (my_small_struct *) struct_storage; + /* Use s for RVALUE */ + +If you don't do this you are liable to get spurious bus errors. + +"long long" values are not supported yet. + +You must use GNU Make to build libffi on SGI platforms. + + ARM - System V ABI + ------------------ + +The ARM port was performed on a NetWinder running ARM Linux ELF +(2.0.31) and gcc 2.8.1. + + + + PowerPC System V ABI + -------------------- + +There are two `System V ABI's which libffi implements for PowerPC. +They differ only in how small structures are returned from functions. + +In the FFI_SYSV version, structures that are 8 bytes or smaller are +returned in registers. This is what GCC does when it is configured +for solaris, and is what the System V ABI I have (dated September +1995) says. + +In the FFI_GCC_SYSV version, all structures are returned the same way: +by passing a pointer as the first argument to the function. This is +what GCC does when it is configured for linux or a generic sysv +target. + +EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a +inconsistency with the SysV ABI: When a procedure is called with many +floating-point arguments, some of them get put on the stack. They are +all supposed to be stored in double-precision format, even if they are +only single-precision, but EGCS stores single-precision arguments as +single-precision anyway. This causes one test to fail (the `many +arguments' test). + + +What's With The Crazy Comments? +=============================== + +You might notice a number of cryptic comments in the code, delimited +by /*@ and @*/. These are annotations read by the program LCLint, a +tool for statically checking C programs. You can read all about it at +. + + +History +======= + +1.20 Oct-5-98 + Raffaele Sena produces ARM port. + +1.19 Oct-5-98 + Fixed x86 long double and long long return support. + m68k bug fixes from Andreas Schwab. + Patch for DU assembler compatibility for the Alpha from Richard + Henderson. + +1.18 Apr-17-98 + Bug fixes and MIPS configuration changes. + +1.17 Feb-24-98 + Bug fixes and m68k port from Andreas Schwab. PowerPC port from + Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + +1.16 Feb-11-98 + Richard Henderson produces Alpha port. + +1.15 Dec-4-97 + Fixed an n32 ABI bug. New libtool, auto* support. + +1.14 May-13-97 + libtool is now used to generate shared and static libraries. + Fixed a minor portability problem reported by Russ McManus + . + +1.13 Dec-2-96 + Added --enable-purify-safety to keep Purify from complaining + about certain low level code. + Sparc fix for calling functions with < 6 args. + Linux x86 a.out fix. + +1.12 Nov-22-96 + Added missing ffi_type_void, needed for supporting void return + types. Fixed test case for non MIPS machines. Cygnus Support + is now Cygnus Solutions. + +1.11 Oct-30-96 + Added notes about GNU make. + +1.10 Oct-29-96 + Added configuration fix for non GNU compilers. + +1.09 Oct-29-96 + Added --enable-debug configure switch. Clean-ups based on LCLint + feedback. ffi_mips.h is always installed. Many configuration + fixes. Fixed ffitest.c for sparc builds. + +1.08 Oct-15-96 + Fixed n32 problem. Many clean-ups. + +1.07 Oct-14-96 + Gordon Irlam rewrites v8.S again. Bug fixes. + +1.06 Oct-14-96 + Gordon Irlam improved the sparc port. + +1.05 Oct-14-96 + Interface changes based on feedback. + +1.04 Oct-11-96 + Sparc port complete (modulo struct passing bug). + +1.03 Oct-10-96 + Passing struct args, and returning struct values works for + all architectures/calling conventions. Expanded tests. + +1.02 Oct-9-96 + Added SGI n32 support. Fixed bugs in both o32 and Linux support. + Added "make test". + +1.01 Oct-8-96 + Fixed float passing bug in mips version. Restructured some + of the code. Builds cleanly with SGI tools. + +1.00 Oct-7-96 + First release. No public announcement. + + +Authors & Credits +================= + +libffi was written by Anthony Green . + +Portions of libffi were derived from Gianni Mariani's free gencall +library for Silicon Graphics machines. + +The closure mechanism was designed and implemented by Kresten Krab +Thorup. + +The Sparc port was derived from code contributed by the fine folks at +Visible Decisions Inc . Further enhancements were +made by Gordon Irlam at Cygnus Solutions . + +The Alpha port was written by Richard Henderson at Cygnus Solutions. + +Andreas Schwab ported libffi to m68k Linux and provided a number of +bug fixes. + +Geoffrey Keating ported libffi to the PowerPC. + +Raffaele Sena ported libffi to the ARM. + +Jesper Skov and Andrew Haley both did more than their fair share of +stepping through the code and tracking down bugs. + +Thanks also to Tom Tromey for bug fixes and configuration help. + +Thanks to Jim Blandy, who provided some useful feedback on the libffi +interface. + +If you have a problem, or have found a bug, please send a note to +green@cygnus.com. diff -r -u ./Modules/_ctypes/libffi_osx/README.pyobjc ./Modules/_ctypes/libffi_osx/README.pyobjc new file mode 100644 index 0000000..405d85f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README.pyobjc @@ -0,0 +1,5 @@ +This directory contains a slightly modified version of libffi, extracted from +the GCC source-tree. + +The only modifications are those that are necessary to compile libffi using +the Apple provided compiler and outside of the GCC source tree. diff -r -u ./Modules/_ctypes/libffi_osx/ffi.c ./Modules/_ctypes/libffi_osx/ffi.c new file mode 100644 index 0000000..bf42093 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/ffi.c @@ -0,0 +1,226 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +/* Round up to FFI_SIZEOF_ARG. */ +#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + +/* Perform machine independent initialization of aggregate type + specifications. */ + +static ffi_status +initialize_aggregate( +/*@out@*/ ffi_type* arg) +{ +/*@-usedef@*/ + + if (arg == NULL || arg->elements == NULL || + arg->size != 0 || arg->alignment != 0) + return FFI_BAD_TYPEDEF; + + ffi_type** ptr = &(arg->elements[0]); + + while ((*ptr) != NULL) + { + if (((*ptr)->size == 0) && (initialize_aggregate(*ptr) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#ifdef POWERPC_DARWIN + int curalign = (*ptr)->alignment; + + if (ptr != &(arg->elements[0])) + { + if (curalign > 4 && curalign != 16) + curalign = 4; + } + + arg->size = ALIGN(arg->size, curalign); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > curalign) ? + arg->alignment : curalign; +#else + arg->size = ALIGN(arg->size, (*ptr)->alignment); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > (*ptr)->alignment) ? + arg->alignment : (*ptr)->alignment; +#endif + + ptr++; + } + + /* Structure size includes tail padding. This is important for + structures that fit in one register on ABIs like the PowerPC64 + Linux ABI that right justify small structs in a register. + It's also needed for nested structure layout, for example + struct A { long a; char b; }; struct B { struct A x; char y; }; + should find y at an offset of 2*sizeof(long) and result in a + total size of 3*sizeof(long). */ + arg->size = ALIGN(arg->size, arg->alignment); + + if (arg->size == 0) + return FFI_BAD_TYPEDEF; + + return FFI_OK; + +/*@=usedef@*/ +} + +#ifndef __CRIS__ +/* The CRIS ABI specifies structure elements to have byte + alignment only, so it completely overrides this functions, + which assumes "natural" alignment and padding. */ + +/* Perform machine independent ffi_cif preparation, then call + machine dependent routine. */ + +#if defined(X86_DARWIN) + +static inline bool +struct_on_stack( + int size) +{ + if (size > 8) + return true; + + /* This is not what the ABI says, but is what is really implemented */ + switch (size) + { + case 1: + case 2: + case 4: + case 8: + return false; + + default: + return true; + } +} + +#endif // defined(X86_DARWIN) + +// Arguments' ffi_type->alignment must be nonzero. +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes) +{ + if (cif == NULL) + return FFI_BAD_TYPEDEF; + + if (abi <= FFI_FIRST_ABI || abi > FFI_DEFAULT_ABI) + return FFI_BAD_ABI; + + unsigned int bytes = 0; + unsigned int i; + ffi_type** ptr; + + cif->abi = abi; + cif->arg_types = atypes; + cif->nargs = nargs; + cif->rtype = rtype; + cif->flags = 0; + + /* Initialize the return type if necessary */ + /*@-usedef@*/ + if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) + return FFI_BAD_TYPEDEF; + /*@=usedef@*/ + + /* Perform a sanity check on the return type */ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT +#ifdef SPARC + && (cif->abi != FFI_V9 || cif->rtype->size > 32) +#endif +#ifdef X86_DARWIN + && (struct_on_stack(cif->rtype->size)) +#endif + ) + bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + /* Initialize any uninitialized aggregate type definitions */ + if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + if ((*ptr)->alignment == 0) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type, do this + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#if defined(X86_DARWIN) + { + int align = (*ptr)->alignment; + + if (align > 4) + align = 4; + + if ((align - 1) & bytes) + bytes = ALIGN(bytes, align); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#elif !defined __x86_64__ && !defined S390 && !defined PA +#ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) + || ((*ptr)->type == FFI_TYPE_LONGDOUBLE + && cif->abi != FFI_V9)) + bytes += sizeof(void*); + else +#endif + { + /* Add any padding if necessary */ + if (((*ptr)->alignment - 1) & bytes) + bytes = ALIGN(bytes, (*ptr)->alignment); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#endif + } + + cif->bytes = bytes; + + /* Perform machine dependent cif processing */ + return ffi_prep_cif_machdep(cif); +} +#endif /* not __CRIS__ */ diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi.h ./Modules/_ctypes/libffi_osx/include/ffi.h new file mode 100644 index 0000000..c104a5c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi.h @@ -0,0 +1,355 @@ +/* -----------------------------------------------------------------*-C-*- + libffi PyOBJC - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and closure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifdef MACOSX +# if defined(__i386__) || defined(__x86_64__) +# define X86_DARWIN +# elif defined(__ppc__) || defined(__ppc64__) +# define POWERPC_DARWIN +# else +# error "Unsupported MacOS X CPU type" +# endif +#else +#error "Unsupported OS type" +#endif + +/* ---- System configuration information --------------------------------- */ + +#include "ffitarget.h" +#include "fficonfig.h" + +#ifndef LIBFFI_ASM + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# endif +#endif + +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +#error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +#error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +#error "int size not supported" +#endif + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != 9223372036854775807 +# error "no 64-bit data type supported" +# endif +#elif LONG_MAX != 9223372036854775807 +#error "long size not supported" +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t + can hold a pointer. */ + +typedef struct _ffi_type { + size_t size; + unsigned short alignment; + unsigned short type; +/*@null@*/ struct _ffi_type** elements; +} ffi_type; + +/* These are defined in types.c */ +extern ffi_type ffi_type_void; +extern ffi_type ffi_type_uint8; +extern ffi_type ffi_type_sint8; +extern ffi_type ffi_type_uint16; +extern ffi_type ffi_type_sint16; +extern ffi_type ffi_type_uint32; +extern ffi_type ffi_type_sint32; +extern ffi_type ffi_type_uint64; +extern ffi_type ffi_type_sint64; +extern ffi_type ffi_type_float; +extern ffi_type ffi_type_double; +extern ffi_type ffi_type_longdouble; +extern ffi_type ffi_type_pointer; + +typedef enum ffi_status { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct ffi_cif { + ffi_abi abi; + unsigned nargs; +/*@dependent@*/ ffi_type** arg_types; +/*@dependent@*/ ffi_type* rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +void +ffi_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_raw_size( + ffi_cif* cif); + +/* This is analogous to the raw API, except it uses Java parameter + packing, even on 64-bit machines. I.e. on 64-bit machines + longs and doubles are followed by an empty 64-bit word. */ +void +ffi_java_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_java_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_java_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_java_raw_size( + ffi_cif* cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +typedef struct ffi_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void* user_data; +} ffi_closure; + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void* user_data); + +void ffi_closure_free(void *); +void *ffi_closure_alloc (size_t size, void **code); + +typedef struct ffi_raw_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + +#if !FFI_NATIVE_RAW_API + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + void (*translate_args)(ffi_cif*,void*,void**,void*); + void* this_closure; +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void* user_data; +} ffi_raw_closure; + +ffi_status +ffi_prep_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +ffi_status +ffi_prep_java_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +#endif // FFI_CLOSURES + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes); + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +#endif // #ifndef LIBFFI_ASM +/* ---- Definitions shared with assembly code ---------------------------- */ + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 + +#ifdef HAVE_LONG_DOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#else +# define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif + +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_POINTER + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef LIBFFI_H diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi_common.h ./Modules/_ctypes/libffi_osx/include/ffi_common.h new file mode 100644 index 0000000..685a358 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi_common.h @@ -0,0 +1,102 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fficonfig.h" + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char* alloca(); +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy((s), (d), (n)) +# endif +#endif + +/*#if defined(FFI_DEBUG) +#include +#endif*/ + +#ifdef FFI_DEBUG +#include + +/*@exits@*/ void +ffi_assert( +/*@temp@*/ char* expr, +/*@temp@*/ char* file, + int line); +void +ffi_stop_here(void); +void +ffi_type_test( +/*@temp@*/ /*@out@*/ ffi_type* a, +/*@temp@*/ char* file, + int line); + +# define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +# define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +# define FFI_ASSERT_VALID_TYPE(x) ffi_type_test(x, __FILE__, __LINE__) +#else +# define FFI_ASSERT(x) +# define FFI_ASSERT_AT(x, f, l) +# define FFI_ASSERT_VALID_TYPE(x) +#endif // #ifdef FFI_DEBUG + +#define ALIGN(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) + +/* Perform machine dependent cif processing */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif); + +/* Extended cif, used in callback from assembly routine */ +typedef struct extended_cif { +/*@dependent@*/ ffi_cif* cif; +/*@dependent@*/ void* rvalue; +/*@dependent@*/ void** avalue; +} extended_cif; + +/* Terse sized type definitions. */ +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +typedef float FLOAT32; + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef FFI_COMMON_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/fficonfig.h ./Modules/_ctypes/libffi_osx/include/fficonfig.h new file mode 100644 index 0000000..2172490 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/fficonfig.h @@ -0,0 +1,150 @@ +/* Manually created fficonfig.h for Darwin on PowerPC or Intel + + This file is manually generated to do away with the need for autoconf and + therefore make it easier to cross-compile and build fat binaries. + + NOTE: This file was added by PyObjC. +*/ + +#ifndef MACOSX +#error "This file is only supported on Mac OS X" +#endif + +#if defined(__i386__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__x86_64__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__ppc__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# if __GNUC__ >= 4 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 +# else +# undef HAVE_LONG_DOUBLE +# define SIZEOF_LONG_DOUBLE 8 +# endif + +#elif defined(__ppc64__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#else +#error "Unknown CPU type" +#endif + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "aw" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Define this is you do not want support for the raw API. */ +#define FFI_NO_RAW_API 1 + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +/* #undef HAVE_MMAP_DEV_ZERO */ + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +/* #undef HAVE_RO_EH_FRAME */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://gcc.gnu.org/bugs.html" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.1" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if you are using Purify and want to suppress spurious messages. */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "2.1-pyobjc" + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) .hidden name +# else +# define FFI_HIDDEN __attribute__((visibility ("hidden"))) +# endif +#else +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) +# else +# define FFI_HIDDEN +# endif +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ffitarget.h ./Modules/_ctypes/libffi_osx/include/ffitarget.h new file mode 100644 index 0000000..faaa30d --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffitarget.h @@ -0,0 +1,13 @@ +/* Dispatch to the right ffitarget file. This file is PyObjC specific; in a + normal build, the build environment copies the file to the right location or + sets up the right include flags. We want to do neither because that would + make building fat binaries harder. +*/ + +#if defined(__i386__) || defined(__x86_64__) +#include "x86-ffitarget.h" +#elif defined(__ppc__) || defined(__ppc64__) +#include "ppc-ffitarget.h" +#else +#error "Unsupported CPU type" +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h new file mode 100644 index 0000000..2318421 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h @@ -0,0 +1,104 @@ +/* -----------------------------------------------------------------*-C-*- + ppc-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if (defined(POWERPC) && defined(__powerpc64__)) || \ + (defined(POWERPC_DARWIN) && defined(__ppc64__)) +#define POWERPC64 +#endif + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef POWERPC + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, +# ifdef POWERPC64 + FFI_DEFAULT_ABI = FFI_LINUX64, +# else + FFI_DEFAULT_ABI = FFI_GCC_SYSV, +# endif +#endif + +#ifdef POWERPC_AIX + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_AIX, +#endif + +#ifdef POWERPC_DARWIN + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_DARWIN, +#endif + +#ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_NATIVE_RAW_API 0 + +/* Needed for FFI_SYSV small structure returns. */ +#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + +#if defined(POWERPC64) /*|| defined(POWERPC_AIX)*/ +# define FFI_TRAMPOLINE_SIZE 48 +#elif defined(POWERPC_AIX) +# define FFI_TRAMPOLINE_SIZE 24 +#else +# define FFI_TRAMPOLINE_SIZE 40 +#endif + +#ifndef LIBFFI_ASM +# if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) +typedef struct ffi_aix_trampoline_struct { + void* code_pointer; /* Pointer to ffi_closure_ASM */ + void* toc; /* TOC */ + void* static_chain; /* Pointer to closure */ +} ffi_aix_trampoline_struct; +# endif +#endif // #ifndef LIBFFI_ASM + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h new file mode 100644 index 0000000..55c2b6c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h @@ -0,0 +1,88 @@ +/* -----------------------------------------------------------------*-C-*- + x86-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if defined(X86_64) && defined(__i386__) +# undef X86_64 +# define X86 +#endif + +#if defined(__x86_64__) +# ifndef X86_64 +# define X86_64 +# endif +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + + /* ---- Intel x86 Win32 ---------- */ +#ifdef X86_WIN32 + FFI_SYSV, + FFI_STDCALL, + /* TODO: Add fastcall support for the sake of completeness */ + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + /* ---- Intel x86 and AMD x86-64 - */ +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) + FFI_SYSV, + FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ +# ifdef __i386__ + FFI_DEFAULT_ABI = FFI_SYSV, +# else + FFI_DEFAULT_ABI = FFI_UNIX64, +# endif +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 + +#if defined(X86_64) || (defined(__x86_64__) && defined(X86_DARWIN)) +# define FFI_TRAMPOLINE_SIZE 24 +# define FFI_NATIVE_RAW_API 0 +#else +# define FFI_TRAMPOLINE_SIZE 10 +# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S new file mode 100644 index 0000000..f143dbd --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S @@ -0,0 +1,365 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc-darwin.S - Copyright (c) 2000 John Hornkvist + Copyright (c) 2004 Free Software Foundation, Inc. + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include +#include +#include + +.text + .align 2 +.globl _ffi_prep_args + +.text + .align 2 +.globl _ffi_call_DARWIN + +.text + .align 2 +_ffi_call_DARWIN: +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved. */ + +LFB1: + /* Save the old stack pointer as AP. */ + mr r8,r1 + +LCFI0: +#if defined(__ppc64__) + /* Allocate the stack space we need. + r4 (size of input data) + 48 bytes (linkage area) + 40 bytes (saved registers) + 8 bytes (extra FPR) + r4 + 96 bytes total + */ + + addi r4,r4,-96 // Add our overhead. + li r0,-32 // Align to 32 bytes. + and r4,r4,r0 +#endif + stgux r1,r1,r4 // Grow the stack. + mflr r9 + + /* Save registers we use. */ +#if defined(__ppc64__) + std r27,-40(r8) +#endif + stg r28,MODE_CHOICE(-16,-32)(r8) + stg r29,MODE_CHOICE(-12,-24)(r8) + stg r30,MODE_CHOICE(-8,-16)(r8) + stg r31,MODE_CHOICE(-4,-8)(r8) + stg r9,SF_RETURN(r8) /* return address */ +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + stg r2,MODE_CHOICE(20,40)(r1) +#endif + +LCFI1: +#if defined(__ppc64__) + mr r27,r3 // our extended_cif +#endif + /* Save arguments over call. */ + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ + +LCFI2: + /* Call ffi_prep_args. */ + mr r4,r1 + li r9,0 + mtctr r12 /* r12 holds address of _ffi_prep_args. */ + bctrl +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + lg r2,MODE_CHOICE(20,40)(r1) +#endif + + /* Now do the call. + Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40,r31 + + /* Load all those argument registers. + We have set up a nice stack frame, just load it into registers. */ + lg r3,SF_ARG1(r1) + lg r4,SF_ARG2(r1) + lg r5,SF_ARG3(r1) + lg r6,SF_ARG4(r1) + nop + lg r7,SF_ARG5(r1) + lg r8,SF_ARG6(r1) + lg r9,SF_ARG7(r1) + lg r10,SF_ARG8(r1) + + /* Load all the FP registers. */ + bf 6,L2 /* No floats to load. */ +#if defined(__ppc64__) + lfd f1,MODE_CHOICE(-16,-40)-(14*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(11*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(10*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(7*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(6*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(3*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(2*8)(r28) + lfd f14,MODE_CHOICE(-16,-40)-(1*8)(r28) +#elif defined(__ppc__) + lfd f1,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(11*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(10*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(7*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(6*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(3*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(2*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(1*8)(r28) +#else +#error undefined architecture +#endif + +L2: + mr r12,r29 // Put the target address in r12 as specified. + mtctr r12 // Get the address to call into CTR. + nop + nop + bctrl // Make the call. + + // Deal with the return value. +#if defined(__ppc64__) + mtcrf 0x3,r31 // flags in cr6 and cr7 + bt 27,L(st_return_value) +#elif defined(__ppc__) + mtcrf 0x1,r31 // flags in cr7 +#else +#error undefined architecture +#endif + + bt 30,L(done_return_value) + bt 29,L(fp_return_value) + stg r3,0(r30) +#if defined(__ppc__) + bf 28,L(done_return_value) // Store the second long if necessary. + stg r4,4(r30) +#endif + // Fall through + +L(done_return_value): + lg r1,0(r1) // Restore stack pointer. + // Restore the registers we used. + lg r9,SF_RETURN(r1) // return address + lg r31,MODE_CHOICE(-4,-8)(r1) + mtlr r9 + lg r30,MODE_CHOICE(-8,-16)(r1) + lg r29,MODE_CHOICE(-12,-24)(r1) + lg r28,MODE_CHOICE(-16,-32)(r1) +#if defined(__ppc64__) + ld r27,-40(r1) +#endif + blr + +#if defined(__ppc64__) +L(st_return_value): + // Grow the stack enough to fit the registers. Leave room for 8 args + // to trample the 1st 8 slots in param area. + stgu r1,-SF_ROUND(280)(r1) // 64 + 104 + 48 + 64 + + // Store GPRs + std r3,SF_ARG9(r1) + std r4,SF_ARG10(r1) + std r5,SF_ARG11(r1) + std r6,SF_ARG12(r1) + nop + std r7,SF_ARG13(r1) + std r8,SF_ARG14(r1) + std r9,SF_ARG15(r1) + std r10,SF_ARG16(r1) + + // Store FPRs + nop + bf 26,L(call_struct_to_ram_form) + stfd f1,SF_ARG17(r1) + stfd f2,SF_ARG18(r1) + stfd f3,SF_ARG19(r1) + stfd f4,SF_ARG20(r1) + nop + stfd f5,SF_ARG21(r1) + stfd f6,SF_ARG22(r1) + stfd f7,SF_ARG23(r1) + stfd f8,SF_ARG24(r1) + nop + stfd f9,SF_ARG25(r1) + stfd f10,SF_ARG26(r1) + stfd f11,SF_ARG27(r1) + stfd f12,SF_ARG28(r1) + nop + stfd f13,SF_ARG29(r1) + +L(call_struct_to_ram_form): + ld r3,0(r27) // extended_cif->cif* + ld r3,16(r3) // ffi_cif->rtype* + addi r4,r1,SF_ARG9 // stored GPRs + addi r6,r1,SF_ARG17 // stored FPRs + li r5,0 // GPR size ptr (NULL) + li r7,0 // FPR size ptr (NULL) + li r8,0 // FPR count ptr (NULL) + li r10,0 // struct offset (NULL) + mr r9,r30 // return area + bl Lffi64_struct_to_ram_form$stub + lg r1,0(r1) // Restore stack pointer. + b L(done_return_value) +#endif + +L(fp_return_value): + /* Do we have long double to store? */ + bf 31,L(fd_return_value) + stfd f1,0(r30) + stfd f2,8(r30) + b L(done_return_value) + +L(fd_return_value): + /* Do we have double to store? */ + bf 28,L(float_return_value) + stfd f1,0(r30) + b L(done_return_value) + +L(float_return_value): + /* We only have a float to store. */ + stfs f1,0(r30) + b L(done_return_value) + +LFE1: +/* END(_ffi_call_DARWIN) */ + +/* Provide a null definition of _ffi_call_AIX. */ +.text + .align 2 +.globl _ffi_call_AIX +.text + .align 2 +_ffi_call_AIX: + blr +/* END(_ffi_call_AIX) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_call_DARWIN.eh +_ffi_call_DARWIN.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align LOG2_GPR_BYTES +LEFDE1: + +#if defined(__ppc64__) +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_ram_form$stub: + .indirect_symbol _ffi64_struct_to_ram_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_ram_form + +LO$ffi64_struct_to_ram_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_ram_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_ram_form + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ +#endif // __ppc__ || __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h new file mode 100644 index 0000000..cf4bd50 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h @@ -0,0 +1,85 @@ +/* ----------------------------------------------------------------------- + ppc-darwin.h - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define L(x) x + +#define SF_ARG9 MODE_CHOICE(56,112) +#define SF_ARG10 MODE_CHOICE(60,120) +#define SF_ARG11 MODE_CHOICE(64,128) +#define SF_ARG12 MODE_CHOICE(68,136) +#define SF_ARG13 MODE_CHOICE(72,144) +#define SF_ARG14 MODE_CHOICE(76,152) +#define SF_ARG15 MODE_CHOICE(80,160) +#define SF_ARG16 MODE_CHOICE(84,168) +#define SF_ARG17 MODE_CHOICE(88,176) +#define SF_ARG18 MODE_CHOICE(92,184) +#define SF_ARG19 MODE_CHOICE(96,192) +#define SF_ARG20 MODE_CHOICE(100,200) +#define SF_ARG21 MODE_CHOICE(104,208) +#define SF_ARG22 MODE_CHOICE(108,216) +#define SF_ARG23 MODE_CHOICE(112,224) +#define SF_ARG24 MODE_CHOICE(116,232) +#define SF_ARG25 MODE_CHOICE(120,240) +#define SF_ARG26 MODE_CHOICE(124,248) +#define SF_ARG27 MODE_CHOICE(128,256) +#define SF_ARG28 MODE_CHOICE(132,264) +#define SF_ARG29 MODE_CHOICE(136,272) + +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 +#define NUM_FPR_ARG_REGISTERS 13 + +#define FFI_TYPE_1_BYTE(x) ((x) == FFI_TYPE_UINT8 || (x) == FFI_TYPE_SINT8) +#define FFI_TYPE_2_BYTE(x) ((x) == FFI_TYPE_UINT16 || (x) == FFI_TYPE_SINT16) +#define FFI_TYPE_4_BYTE(x) \ + ((x) == FFI_TYPE_UINT32 || (x) == FFI_TYPE_SINT32 ||\ + (x) == FFI_TYPE_INT || (x) == FFI_TYPE_FLOAT) + +#if !defined(LIBFFI_ASM) + +enum { + FLAG_RETURNS_NOTHING = 1 << (31 - 30), // cr7 + FLAG_RETURNS_FP = 1 << (31 - 29), + FLAG_RETURNS_64BITS = 1 << (31 - 28), + FLAG_RETURNS_128BITS = 1 << (31 - 31), + + FLAG_RETURNS_STRUCT = 1 << (31 - 27), // cr6 + FLAG_STRUCT_CONTAINS_FP = 1 << (31 - 26), + + FLAG_ARG_NEEDS_COPY = 1 << (31 - 7), + FLAG_FP_ARGUMENTS = 1 << (31 - 6), // cr1.eq; specified by ABI + FLAG_4_GPR_ARGUMENTS = 1 << (31 - 5), + FLAG_RETVAL_REFERENCE = 1 << (31 - 4) +}; + +#if defined(__ppc64__) +void ffi64_struct_to_ram_form(const ffi_type*, const char*, unsigned int*, + const char*, unsigned int*, unsigned int*, char*, unsigned int*); +void ffi64_struct_to_reg_form(const ffi_type*, const char*, unsigned int*, + unsigned int*, char*, unsigned int*, char*, unsigned int*); +bool ffi64_stret_needs_ptr(const ffi_type* inType, + unsigned short*, unsigned short*); +#endif + +#endif // !defined(LIBFFI_ASM) \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S new file mode 100644 index 0000000..c3d30c2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S @@ -0,0 +1,308 @@ +#if defined(__ppc__) + +/* ----------------------------------------------------------------------- + ppc-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 // Save return address + stg r0,SF_RETURN(r1) + +LCFI0: + /* 24/48 bytes (Linkage Area) + 32/64 bytes (outgoing parameter area, always reserved) + 104 bytes (13*8 from FPR) + 16/32 bytes (result) + 176/232 total bytes */ + + /* skip over caller save area and keep stack aligned to 16/32. */ + stgu r1,-SF_ROUND(176)(r1) + +LCFI1: + /* We want to build up an area for the parameters passed + in registers. (both floating point and integer) */ + + /* 176/256 bytes (callee stack frame aligned to 16/32) + 24/48 bytes (caller linkage area) + 200/304 (start of caller parameter area aligned to 4/8) + */ + + /* Save GPRs 3 - 10 (aligned to 4/8) + in the parents outgoing area. */ + stg r3,200(r1) + stg r4,204(r1) + stg r5,208(r1) + stg r6,212(r1) + stg r7,216(r1) + stg r8,220(r1) + stg r9,224(r1) + stg r10,228(r1) + + /* Save FPRs 1 - 13. (aligned to 8) */ + stfd f1,56(r1) + stfd f2,64(r1) + stfd f3,72(r1) + stfd f4,80(r1) + stfd f5,88(r1) + stfd f6,96(r1) + stfd f7,104(r1) + stfd f8,112(r1) + stfd f9,120(r1) + stfd f10,128(r1) + stfd f11,136(r1) + stfd f12,144(r1) + stfd f13,152(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,160 // result storage + addi r5,r1,200 // saved GPRs + addi r6,r1,56 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + /* Now r3 contains the return type. Use it to look up in a table + so we know how to deal with each type. */ + addi r5,r1,160 // Copy result storage pointer. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: +/* Each of the ret_typeX code fragments has to be exactly 16 bytes long + (4 instructions). For cache effectiveness we align to a 16 byte boundary + first. */ + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +/* case FFI_TYPE_VOID */ +Lret_type0: + b Lfinish + nop + nop + nop + +/* case FFI_TYPE_INT */ +Lret_type1: + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_FLOAT */ +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_DOUBLE */ +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_LONGDOUBLE */ +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +/* case FFI_TYPE_UINT8 */ +Lret_type5: + lbz r3,3(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT8 */ +Lret_type6: + lbz r3,3(r5) + extsb r3,r3 + b Lfinish + nop + +/* case FFI_TYPE_UINT16 */ +Lret_type7: + lhz r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT16 */ +Lret_type8: + lha r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT32 */ +Lret_type9: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT32 */ +Lret_type10: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT64 */ +Lret_type11: + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_SINT64 */ +Lret_type12: // same as Lret_type11 + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_STRUCT */ +Lret_type13: + b Lfinish + nop + nop + nop + +/* End 16-byte aligned cases */ +/* case FFI_TYPE_POINTER */ +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + // fall through + +/* case done */ +Lfinish: + addi r1,r1,SF_ROUND(176) // Restore stack pointer. + lg r0,SF_RETURN(r1) // Restore return address. + mtlr r0 // Restore link register. + blr + +/* END(ffi_closure_ASM) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + + +#endif // __ppc__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c new file mode 100644 index 0000000..8953d5f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c @@ -0,0 +1,1776 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1998 Geoffrey Keating + + PowerPC Foreign Function Interface + + Darwin ABI support (c) 2001 John Hornkvist + AIX ABI support (c) 2002 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include +#include +#include +#include + +#if 0 +#if defined(POWERPC_DARWIN) +#include // for sys_icache_invalidate() +#endif + +#else + +#pragma weak sys_icache_invalidate +extern void sys_icache_invalidate(void *start, size_t len); + +#endif + + +extern void ffi_closure_ASM(void); + +// The layout of a function descriptor. A C function pointer really +// points to one of these. +typedef struct aix_fd_struct { + void* code_pointer; + void* toc; +} aix_fd; + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments. + + The stack layout we want looks like this: + + | Return address from ffi_call_DARWIN | higher addresses + |--------------------------------------------| + | Previous backchain pointer 4/8 | stack pointer here + |--------------------------------------------|-\ <<< on entry to + | Saved r28-r31 (4/8)*4 | | ffi_call_DARWIN + |--------------------------------------------| | + | Parameters (at least 8*(4/8)=32/64) | | (176) +112 - +288 + |--------------------------------------------| | + | Space for GPR2 4/8 | | + |--------------------------------------------| | stack | + | Reserved (4/8)*2 | | grows | + |--------------------------------------------| | down V + | Space for callee's LR 4/8 | | + |--------------------------------------------| | lower addresses + | Saved CR 4/8 | | + |--------------------------------------------| | stack pointer here + | Current backchain pointer 4/8 | | during + |--------------------------------------------|-/ <<< ffi_call_DARWIN + + Note: ppc64 CR is saved in the low word of a long on the stack. +*/ + +/*@-exportheader@*/ +void +ffi_prep_args( + extended_cif* inEcif, + unsigned *const stack) +/*@=exportheader@*/ +{ + /* Copy the ecif to a local var so we can trample the arg. + BC note: test this with GP later for possible problems... */ + volatile extended_cif* ecif = inEcif; + + const unsigned bytes = ecif->cif->bytes; + const unsigned flags = ecif->cif->flags; + + /* Cast the stack arg from int* to long*. sizeof(long) == 4 in 32-bit mode + and 8 in 64-bit mode. */ + unsigned long *const longStack = (unsigned long *const)stack; + + /* 'stacktop' points at the previous backchain pointer. */ +#if defined(__ppc64__) + // In ppc-darwin.s, an extra 96 bytes is reserved for the linkage area, + // saved registers, and an extra FPR. + unsigned long *const stacktop = + (unsigned long *)(unsigned long)((char*)longStack + bytes + 96); +#elif defined(__ppc__) + unsigned long *const stacktop = longStack + (bytes / sizeof(long)); +#else +#error undefined architecture +#endif + + /* 'fpr_base' points at the space for fpr1, and grows upwards as + we use FPR registers. */ + double* fpr_base = (double*)(stacktop - ASM_NEEDS_REGISTERS) - + NUM_FPR_ARG_REGISTERS; + +#if defined(__ppc64__) + // 64-bit saves an extra register, and uses an extra FPR. Knock fpr_base + // down a couple pegs. + fpr_base -= 2; +#endif + + unsigned int fparg_count = 0; + + /* 'next_arg' grows up as we put parameters in it. */ + unsigned long* next_arg = longStack + 6; /* 6 reserved positions. */ + + int i; + double double_tmp; + void** p_argv = ecif->avalue; + unsigned long gprvalue; + ffi_type** ptr = ecif->cif->arg_types; + + /* Check that everything starts aligned properly. */ + FFI_ASSERT(stack == SF_ROUND(stack)); + FFI_ASSERT(stacktop == SF_ROUND(stacktop)); + FFI_ASSERT(bytes == SF_ROUND(bytes)); + + /* Deal with return values that are actually pass-by-reference. + Rule: + Return values are referenced by r3, so r4 is the first parameter. */ + + if (flags & FLAG_RETVAL_REFERENCE) + *next_arg++ = (unsigned long)(char*)ecif->rvalue; + + /* Now for the arguments. */ + for (i = ecif->cif->nargs; i > 0; i--, ptr++, p_argv++) + { + switch ((*ptr)->type) + { + /* If a floating-point parameter appears before all of the general- + purpose registers are filled, the corresponding GPRs that match + the size of the floating-point parameter are shadowed for the + benefit of vararg and pre-ANSI functions. */ + case FFI_TYPE_FLOAT: + double_tmp = *(float*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg++; + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + + case FFI_TYPE_DOUBLE: + double_tmp = *(double*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg += MODE_CHOICE(2,1); + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double*)fpr_base = *(long double*)*p_argv; +#elif defined(__ppc__) + if (fparg_count < NUM_FPR_ARG_REGISTERS - 1) + *(long double*)fpr_base = *(long double*)*p_argv; + else if (fparg_count == NUM_FPR_ARG_REGISTERS - 1) + *(double*)fpr_base = *(double*)*p_argv; +#else +#error undefined architecture +#endif + + *(long double*)next_arg = *(long double*)*p_argv; + fparg_count += 2; + fpr_base += 2; + next_arg += MODE_CHOICE(4,2); + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: +#if defined(__ppc64__) + gprvalue = *(long long*)*p_argv; + goto putgpr; +#elif defined(__ppc__) + *(long long*)next_arg = *(long long*)*p_argv; + next_arg += 2; + break; +#else +#error undefined architecture +#endif + + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT8: + gprvalue = *(unsigned char*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT8: + gprvalue = *(signed char*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT16: + gprvalue = *(unsigned short*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT16: + gprvalue = *(signed short*)*p_argv; + goto putgpr; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + + ffi64_struct_to_reg_form(*ptr, (char*)*p_argv, NULL, &fparg_count, + (char*)next_arg, &gprSize, (char*)fpr_base, &fprSize); + next_arg += gprSize / sizeof(long); + fpr_base += fprSize / sizeof(double); + +#elif defined(__ppc__) + char* dest_cpy = (char*)next_arg; + + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. + Structures with 3 byte in size are padded upwards. */ + unsigned size_al = (*ptr)->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + + if (ecif->cif->abi == FFI_DARWIN) + { + if (size_al < 3) + dest_cpy += 4 - size_al; + } + + memcpy((char*)dest_cpy, (char*)*p_argv, size_al); + next_arg += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + gprvalue = *(unsigned*)*p_argv; + +putgpr: + *next_arg++ = gprvalue; + break; + + default: + break; + } + } + + /* Check that we didn't overrun the stack... */ + //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); + //FFI_ASSERT((unsigned *)fpr_base + // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); + //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); +} + +#if defined(__ppc64__) + +bool +ffi64_struct_contains_fp( + const ffi_type* inType) +{ + bool containsFP = false; + unsigned int i; + + for (i = 0; inType->elements[i] != NULL && !containsFP; i++) + { + if (inType->elements[i]->type == FFI_TYPE_FLOAT || + inType->elements[i]->type == FFI_TYPE_DOUBLE || + inType->elements[i]->type == FFI_TYPE_LONGDOUBLE) + containsFP = true; + else if (inType->elements[i]->type == FFI_TYPE_STRUCT) + containsFP = ffi64_struct_contains_fp(inType->elements[i]); + } + + return containsFP; +} + +#endif // defined(__ppc64__) + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + /* All this is for the DARWIN ABI. */ + int i; + ffi_type** ptr; + int intarg_count = 0; + int fparg_count = 0; + unsigned int flags = 0; + unsigned int size_al = 0; + + /* All the machine-independent calculation of cif->bytes will be wrong. + Redo the calculation for DARWIN. */ + + /* Space for the frame pointer, callee's LR, CR, etc, and for + the asm's temp regs. */ + unsigned int bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long); + + /* Return value handling. The rules are as follows: + - 32-bit (or less) integer values are returned in gpr3; + - Structures of size <= 4 bytes also returned in gpr3; + - 64-bit integer values and structures between 5 and 8 bytes are + returned in gpr3 and gpr4; + - Single/double FP values are returned in fpr1; + - Long double FP (if not equivalent to double) values are returned in + fpr1 and fpr2; + - Larger structures values are allocated space and a pointer is passed + as the first argument. */ + switch (cif->rtype->type) + { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_DOUBLE: + flags |= FLAG_RETURNS_64BITS; + /* Fall through. */ + case FFI_TYPE_FLOAT: + flags |= FLAG_RETURNS_FP; + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + flags |= FLAG_RETURNS_64BITS; + break; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + + if (ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) + { + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + } + else + { + flags |= FLAG_RETURNS_STRUCT; + + if (ffi64_struct_contains_fp(cif->rtype)) + flags |= FLAG_STRUCT_CONTAINS_FP; + } + +#elif defined(__ppc__) + + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_VOID: + flags |= FLAG_RETURNS_NOTHING; + break; + + default: + /* Returns 32-bit integer, or similar. Nothing to do here. */ + break; + } + + /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the + first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest + goes on the stack. Structures are passed as a pointer to a copy of + the structure. Stuff on the stack needs to keep proper alignment. */ + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + switch ((*ptr)->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + fparg_count++; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + if (fparg_count > NUM_FPR_ARG_REGISTERS + && intarg_count % 2 != 0) + intarg_count++; + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + fparg_count += 2; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + + if ( +#if defined(__ppc64__) + fparg_count > NUM_FPR_ARG_REGISTERS + 1 +#elif defined(__ppc__) + fparg_count > NUM_FPR_ARG_REGISTERS +#else +#error undefined architecture +#endif + && intarg_count % 2 != 0) + intarg_count++; + + intarg_count += 2; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + /* 'long long' arguments are passed as two words, but + either both words must fit in registers or both go + on the stack. If they go on the stack, they must + be 8-byte-aligned. */ + if (intarg_count == NUM_GPR_ARG_REGISTERS - 1 + || (intarg_count >= NUM_GPR_ARG_REGISTERS + && intarg_count % 2 != 0)) + intarg_count++; + + intarg_count += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_STRUCT: + size_al = (*ptr)->size; + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + +#if defined(__ppc64__) + // Look for FP struct members. + unsigned int j; + + for (j = 0; (*ptr)->elements[j] != NULL; j++) + { + if ((*ptr)->elements[j]->type == FFI_TYPE_FLOAT || + (*ptr)->elements[j]->type == FFI_TYPE_DOUBLE) + { + fparg_count++; + + if (fparg_count > NUM_FPR_ARG_REGISTERS) + intarg_count++; + } + else if ((*ptr)->elements[j]->type == FFI_TYPE_LONGDOUBLE) + { + fparg_count += 2; + + if (fparg_count > NUM_FPR_ARG_REGISTERS + 1) + intarg_count += 2; + } + else + intarg_count++; + } +#elif defined(__ppc__) + intarg_count += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + + break; + + default: + /* Everything else is passed as a 4/8-byte word in a GPR, either + the object itself or a pointer to it. */ + intarg_count++; + break; + } + } + + /* Space for the FPR registers, if needed. */ + if (fparg_count != 0) + { + flags |= FLAG_FP_ARGUMENTS; +#if defined(__ppc64__) + bytes += (NUM_FPR_ARG_REGISTERS + 1) * sizeof(double); +#elif defined(__ppc__) + bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); +#else +#error undefined architecture +#endif + } + + /* Stack space. */ +#if defined(__ppc64__) + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#elif defined(__ppc__) + if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#else +#error undefined architecture +#endif + else + bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); + + /* The stack space allocated needs to be a multiple of 16/32 bytes. */ + bytes = SF_ROUND(bytes); + + cif->flags = flags; + cif->bytes = bytes; + + return FFI_OK; +} + +/*@-declundef@*/ +/*@-exportheader@*/ +extern void +ffi_call_AIX( +/*@out@*/ extended_cif*, + unsigned, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); + +extern void +ffi_call_DARWIN( +/*@out@*/ extended_cif*, + unsigned long, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); +/*@=declundef@*/ +/*@=exportheader@*/ + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return + value address then we need to make one. */ + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + /*@-sysunrecog@*/ + ecif.rvalue = alloca(cif->rtype->size); + /*@=sysunrecog@*/ + } + else + ecif.rvalue = rvalue; + + switch (cif->abi) + { + case FFI_AIX: + /*@-usedef@*/ + ffi_call_AIX(&ecif, -cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + case FFI_DARWIN: + /*@-usedef@*/ + ffi_call_DARWIN(&ecif, -(long)cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + default: + FFI_ASSERT(0); + break; + } +} + +/* here I'd like to add the stack frame layout we use in darwin_closure.S + and aix_clsoure.S + + SP previous -> +---------------------------------------+ <--- child frame + | back chain to caller 4 | + +---------------------------------------+ 4 + | saved CR 4 | + +---------------------------------------+ 8 + | saved LR 4 | + +---------------------------------------+ 12 + | reserved for compilers 4 | + +---------------------------------------+ 16 + | reserved for binders 4 | + +---------------------------------------+ 20 + | saved TOC pointer 4 | + +---------------------------------------+ 24 + | always reserved 8*4=32 (previous GPRs)| + | according to the linkage convention | + | from AIX | + +---------------------------------------+ 56 + | our FPR area 13*8=104 | + | f1 | + | . | + | f13 | + +---------------------------------------+ 160 + | result area 8 | + +---------------------------------------+ 168 + | alignement to the next multiple of 16 | +SP current --> +---------------------------------------+ 176 <- parent frame + | back chain to caller 4 | + +---------------------------------------+ 180 + | saved CR 4 | + +---------------------------------------+ 184 + | saved LR 4 | + +---------------------------------------+ 188 + | reserved for compilers 4 | + +---------------------------------------+ 192 + | reserved for binders 4 | + +---------------------------------------+ 196 + | saved TOC pointer 4 | + +---------------------------------------+ 200 + | always reserved 8*4=32 we store our | + | GPRs here | + | r3 | + | . | + | r10 | + +---------------------------------------+ 232 + | overflow part | + +---------------------------------------+ xxx + | ???? | + +---------------------------------------+ xxx +*/ + +#if !defined(POWERPC_DARWIN) + +#define MIN_LINE_SIZE 32 + +static void +flush_icache( + char* addr) +{ +#ifndef _AIX + __asm__ volatile ( + "dcbf 0,%0\n" + "sync\n" + "icbi 0,%0\n" + "sync\n" + "isync" + : : "r" (addr) : "memory"); +#endif +} + +static void +flush_range( + char* addr, + int size) +{ + int i; + + for (i = 0; i < size; i += MIN_LINE_SIZE) + flush_icache(addr + i); + + flush_icache(addr + size - 1); +} + +#endif // !defined(POWERPC_DARWIN) + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + switch (cif->abi) + { + case FFI_DARWIN: + { + FFI_ASSERT (cif->abi == FFI_DARWIN); + + unsigned int* tramp = (unsigned int*)&closure->tramp[0]; + +#if defined(__ppc64__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0xe98b0018; // ld r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0xe96b0020; // ld r11,32(r11) + tramp[7] = 0x4e800420; // bctr + *(unsigned long*)&tramp[8] = (unsigned long)ffi_closure_ASM; + *(unsigned long*)&tramp[10] = (unsigned long)closure; +#elif defined(__ppc__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0x818b0018; // lwz r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0x816b001c; // lwz r11,28(r11) + tramp[7] = 0x4e800420; // bctr + tramp[8] = (unsigned long)ffi_closure_ASM; + tramp[9] = (unsigned long)closure; +#else +#error undefined architecture +#endif + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + // Flush the icache. Only necessary on Darwin. +#if defined(POWERPC_DARWIN) + sys_icache_invalidate(closure->tramp, FFI_TRAMPOLINE_SIZE); +#else + flush_range(closure->tramp, FFI_TRAMPOLINE_SIZE); +#endif + + break; + } + + case FFI_AIX: + { + FFI_ASSERT (cif->abi == FFI_AIX); + + ffi_aix_trampoline_struct* tramp_aix = + (ffi_aix_trampoline_struct*)(closure->tramp); + aix_fd* fd = (aix_fd*)(void*)ffi_closure_ASM; + + tramp_aix->code_pointer = fd->code_pointer; + tramp_aix->toc = fd->toc; + tramp_aix->static_chain = closure; + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + break; + } + + default: + return FFI_BAD_ABI; + } + + return FFI_OK; +} + +#if defined(__ppc__) + typedef double ldbits[2]; + + typedef union + { + ldbits lb; + long double ld; + } ldu; +#endif + +typedef union +{ + float f; + double d; +} ffi_dblfl; + +/* The trampoline invokes ffi_closure_ASM, and on entry, r11 holds the + address of the closure. After storing the registers that could possibly + contain parameters to be passed into the stack frame and setting up space + for a return value, ffi_closure_ASM invokes the following helper function + to do most of the work. */ +int +ffi_closure_helper_DARWIN( + ffi_closure* closure, + void* rvalue, + unsigned long* pgr, + ffi_dblfl* pfr) +{ + /* rvalue is the pointer to space for return value in closure assembly + pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM + pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ + +#if defined(__ppc__) + ldu temp_ld; +#endif + + double temp; + unsigned int i; + unsigned int nf = 0; /* number of FPRs already used. */ + unsigned int ng = 0; /* number of GPRs already used. */ + ffi_cif* cif = closure->cif; + long avn = cif->nargs; + void** avalue = alloca(cif->nargs * sizeof(void*)); + ffi_type** arg_types = cif->arg_types; + + /* Copy the caller's structure return value address so that the closure + returns the data directly to the caller. */ +#if defined(__ppc64__) + if (cif->rtype->type == FFI_TYPE_STRUCT && + ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) +#elif defined(__ppc__) + if (cif->rtype->type == FFI_TYPE_STRUCT) +#else +#error undefined architecture +#endif + { + rvalue = (void*)*pgr; + pgr++; + ng++; + } + + /* Grab the addresses of the arguments from the stack frame. */ + for (i = 0; i < avn; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = (char*)pgr + MODE_CHOICE(3,7); + ng++; + pgr++; + break; + + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = (char*)pgr + MODE_CHOICE(2,6); + ng++; + pgr++; + break; + +#if defined(__ppc__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + avalue[i] = (char*)pgr + MODE_CHOICE(0,4); + ng++; + pgr++; + + break; + + case FFI_TYPE_STRUCT: + if (cif->abi == FFI_DARWIN) + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + unsigned int savedFPRSize = fprSize; + + avalue[i] = alloca(arg_types[i]->size); + ffi64_struct_to_ram_form(arg_types[i], (const char*)pgr, + &gprSize, (const char*)pfr, &fprSize, &nf, avalue[i], NULL); + + ng += gprSize / sizeof(long); + pgr += gprSize / sizeof(long); + pfr += (fprSize - savedFPRSize) / sizeof(double); + +#elif defined(__ppc__) + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. */ + unsigned int size_al = size_al = arg_types[i]->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN(arg_types[i]->size, 8); + + if (size_al < 3) + avalue[i] = (void*)pgr + MODE_CHOICE(4,8) - size_al; + else + avalue[i] = (void*)pgr; + + ng += (size_al + 3) / sizeof(long); + pgr += (size_al + 3) / sizeof(long); +#else +#error undefined architecture +#endif + } + + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + /* Long long ints are passed in 1 or 2 GPRs. */ + avalue[i] = pgr; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_FLOAT: + /* A float value consumes a GPR. + There are 13 64-bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + temp = pfr->d; + pfr->f = (float)temp; + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng++; + pgr++; + break; + + case FFI_TYPE_DOUBLE: + /* A double value consumes one or two GPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr += 2; + } +#elif defined(__ppc__) + /* A long double value consumes 2/4 GPRs and 2 FPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS - 1) + { + avalue[i] = pfr; + pfr += 2; + } + /* Here we have the situation where one part of the long double + is stored in fpr13 and the other part is already on the stack. + We use a union to pass the long double to avalue[i]. */ + else if (nf == NUM_FPR_ARG_REGISTERS - 1) + { + memcpy (&temp_ld.lb[0], pfr, sizeof(temp_ld.lb[0])); + memcpy (&temp_ld.lb[1], pgr + 2, sizeof(temp_ld.lb[1])); + avalue[i] = &temp_ld.ld; + } +#else +#error undefined architecture +#endif + else + avalue[i] = pgr; + + nf += 2; + ng += MODE_CHOICE(4,2); + pgr += MODE_CHOICE(4,2); + + break; + +#endif /* FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE */ + + default: + FFI_ASSERT(0); + break; + } + } + + (closure->fun)(cif, rvalue, avalue, closure->user_data); + + /* Tell ffi_closure_ASM to perform return type promotions. */ + return cif->rtype->type; +} + +#if defined(__ppc64__) + +/* ffi64_struct_to_ram_form + + Rebuild a struct's natural layout from buffers of concatenated registers. + Return the number of registers used. + inGPRs[0-7] == r3, inFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_ram_form( + const ffi_type* inType, + const char* inGPRs, + unsigned int* ioGPRMarker, + const char* inFPRs, + unsigned int* ioFPRMarker, + unsigned int* ioFPRsUsed, + char* outStruct, // caller-allocated + unsigned int* ioStructMarker) +{ + unsigned int srcGMarker = 0; + unsigned int srcFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + unsigned int destMarker = 0; + + static unsigned int recurseCount = 0; + + if (ioGPRMarker) + srcGMarker = *ioGPRMarker; + + if (ioFPRMarker) + { + srcFMarker = *ioFPRMarker; + savedFMarker = srcFMarker; + } + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioStructMarker) + destMarker = *ioStructMarker; + + size_t i; + + switch (inType->size) + { + case 1: case 2: case 4: + srcGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + srcFMarker = ALIGN(srcFMarker, 4); + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(float*)&outStruct[destMarker] = + (float)*(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(float*)&outStruct[destMarker] = + (float)*(double*)&inGPRs[srcGMarker]; + + srcGMarker += 4; + destMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcFMarker = ALIGN(srcFMarker, 8); + destMarker = ALIGN(destMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(double*)&outStruct[destMarker] = + *(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(double*)&outStruct[destMarker] = + *(double*)&inGPRs[srcGMarker]; + + destMarker += 8; + + // Skip next GPR + srcGMarker += 8; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + destMarker = ALIGN(destMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + srcFMarker = ALIGN(srcFMarker, 8); + srcGMarker = ALIGN(srcGMarker, 8); + *(long double*)&outStruct[destMarker] = + *(long double*)&inFPRs[srcFMarker]; + srcFMarker += 16; + fprsUsed += 2; + } + else + { + srcFMarker = ALIGN(srcFMarker, 16); + srcGMarker = ALIGN(srcGMarker, 16); + *(long double*)&outStruct[destMarker] = + *(long double*)&inGPRs[srcGMarker]; + } + + destMarker += 16; + + // Skip next 2 GPRs + srcGMarker += 16; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + if (inType->alignment == 1) // chars only + { + if (inType->size == 1) + outStruct[destMarker++] = inGPRs[srcGMarker++]; + else if (inType->size == 2) + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + outStruct[destMarker++] = inGPRs[srcGMarker++]; + i++; + } + else + { + memcpy(&outStruct[destMarker], + &inGPRs[srcGMarker], inType->size); + srcGMarker += inType->size; + destMarker += inType->size; + i += inType->size - 1; + } + } + else // chars and other stuff + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, inType->alignment); // was 8 + } + } + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcGMarker = ALIGN(srcGMarker, 2); + destMarker = ALIGN(destMarker, 2); + + *(short*)&outStruct[destMarker] = + *(short*)&inGPRs[srcGMarker]; + srcGMarker += 2; + destMarker += 2; + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + *(int*)&outStruct[destMarker] = + *(int*)&inGPRs[srcGMarker]; + srcGMarker += 4; + destMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcGMarker = ALIGN(srcGMarker, 8); + destMarker = ALIGN(destMarker, 8); + + *(long long*)&outStruct[destMarker] = + *(long long*)&inGPRs[srcGMarker]; + srcGMarker += 8; + destMarker += 8; + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_ram_form(inType->elements[i], inGPRs, + &srcGMarker, inFPRs, &srcFMarker, &fprsUsed, + outStruct, &destMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); // unknown element type + break; + } + } + + srcGMarker = ALIGN(srcGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && srcGMarker == 16) + { + *(long double*)&outStruct[0] = *(long double*)&inGPRs[0]; + srcFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioGPRMarker) + *ioGPRMarker = ALIGN(srcGMarker, 8); + + if (ioFPRMarker) + *ioFPRMarker = srcFMarker; + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioStructMarker) + *ioStructMarker = ALIGN(destMarker, 8); +} + +/* ffi64_struct_to_reg_form + + Copy a struct's elements into buffers that can be sliced into registers. + Return the sizes of the output buffers in bytes. Pass NULL buffer pointers + to calculate size only. + outGPRs[0-7] == r3, outFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_reg_form( + const ffi_type* inType, + const char* inStruct, + unsigned int* ioStructMarker, + unsigned int* ioFPRsUsed, + char* outGPRs, // caller-allocated + unsigned int* ioGPRSize, + char* outFPRs, // caller-allocated + unsigned int* ioFPRSize) +{ + size_t i; + unsigned int srcMarker = 0; + unsigned int destGMarker = 0; + unsigned int destFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + + static unsigned int recurseCount = 0; + + if (ioStructMarker) + srcMarker = *ioStructMarker; + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioGPRSize) + destGMarker = *ioGPRSize; + + if (ioFPRSize) + { + destFMarker = *ioFPRSize; + savedFMarker = destFMarker; + } + + switch (inType->size) + { + case 1: case 2: case 4: + destGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + // Shadow floating-point types in GPRs for vararg and pre-ANSI + // functions. + case FFI_TYPE_FLOAT: + // Nudge markers to next 4/8-byte boundary + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + (double)*(float*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + (double)*(float*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcMarker = ALIGN(srcMarker, 8); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + *(double*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + *(double*)&inStruct[srcMarker]; + + srcMarker += 8; + + // Skip next GPR + destGMarker += 8; + destGMarker = ALIGN(destGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + srcMarker = ALIGN(srcMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + destFMarker = ALIGN(destFMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outFPRs != NULL && inStruct != NULL) + *(long double*)&outFPRs[destFMarker] = + *(long double*)&inStruct[srcMarker]; + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + + destFMarker += 16; + fprsUsed += 2; + } + else + { + destGMarker = ALIGN(destGMarker, 16); + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + } + + srcMarker += 16; + destGMarker += 16; // Skip next 2 GPRs + destGMarker = ALIGN(destGMarker, 8); // was 16 + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + if (inType->alignment == 1) // bytes only + { + if (inType->size == 1) + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + } + else if (inType->size == 2) + { + if (outGPRs != NULL && inStruct != NULL) + { + outGPRs[destGMarker] = inStruct[srcMarker]; + outGPRs[destGMarker + 1] = inStruct[srcMarker + 1]; + } + + srcMarker += 2; + destGMarker += 2; + + i++; + } + else + { + if (outGPRs != NULL && inStruct != NULL) + { + // Avoid memcpy for small chunks. + if (inType->size <= sizeof(long)) + *(long*)&outGPRs[destGMarker] = + *(long*)&inStruct[srcMarker]; + else + memcpy(&outGPRs[destGMarker], + &inStruct[srcMarker], inType->size); + } + + srcMarker += inType->size; + destGMarker += inType->size; + i += inType->size - 1; + } + } + else // bytes and other stuff + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, inType->alignment); // was 8 + } + } + + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcMarker = ALIGN(srcMarker, 2); + destGMarker = ALIGN(destGMarker, 2); + + if (outGPRs != NULL && inStruct != NULL) + *(short*)&outGPRs[destGMarker] = + *(short*)&inStruct[srcMarker]; + + srcMarker += 2; + destGMarker += 2; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + + if (outGPRs != NULL && inStruct != NULL) + *(int*)&outGPRs[destGMarker] = + *(int*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcMarker = ALIGN(srcMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outGPRs != NULL && inStruct != NULL) + *(long long*)&outGPRs[destGMarker] = + *(long long*)&inStruct[srcMarker]; + + srcMarker += 8; + destGMarker += 8; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_reg_form(inType->elements[i], + inStruct, &srcMarker, &fprsUsed, outGPRs, + &destGMarker, outFPRs, &destFMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); + break; + } + } + + destGMarker = ALIGN(destGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && destGMarker == 16) + { + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[0] = *(long double*)&inStruct[0]; + + destFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioStructMarker) + *ioStructMarker = ALIGN(srcMarker, 8); + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioGPRSize) + *ioGPRSize = ALIGN(destGMarker, 8); + + if (ioFPRSize) + *ioFPRSize = ALIGN(destFMarker, 8); +} + +/* ffi64_stret_needs_ptr + + Determine whether a returned struct needs a pointer in r3 or can fit + in registers. +*/ + +bool +ffi64_stret_needs_ptr( + const ffi_type* inType, + unsigned short* ioGPRCount, + unsigned short* ioFPRCount) +{ + // Obvious case first- struct is larger than combined FPR size. + if (inType->size > 14 * 8) + return true; + + // Now the struct can physically fit in registers, determine if it + // also fits logically. + bool needsPtr = false; + unsigned short gprsUsed = 0; + unsigned short fprsUsed = 0; + size_t i; + + if (ioGPRCount) + gprsUsed = *ioGPRCount; + + if (ioFPRCount) + fprsUsed = *ioFPRCount; + + for (i = 0; inType->elements[i] != NULL && !needsPtr; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + gprsUsed++; + fprsUsed++; + + if (fprsUsed > 13) + needsPtr = true; + + break; + + case FFI_TYPE_LONGDOUBLE: + gprsUsed += 2; + fprsUsed += 2; + + if (fprsUsed > 14) + needsPtr = true; + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + gprsUsed++; + + if (gprsUsed > 8) + { + needsPtr = true; + break; + } + + if (inType->elements[i + 1] == NULL) // last byte in the struct + break; + + // Count possible contiguous bytes ahead, up to 8. + unsigned short j; + + for (j = 1; j < 8; j++) + { + if (inType->elements[i + j] == NULL || + !FFI_TYPE_1_BYTE(inType->elements[i + j]->type)) + break; + } + + i += j - 1; // allow for i++ before the test condition + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + gprsUsed++; + + if (gprsUsed > 8) + needsPtr = true; + + break; + + case FFI_TYPE_STRUCT: + needsPtr = ffi64_stret_needs_ptr( + inType->elements[i], &gprsUsed, &fprsUsed); + + break; + + default: + FFI_ASSERT(0); + break; + } + } + + if (ioGPRCount) + *ioGPRCount = gprsUsed; + + if (ioFPRCount) + *ioFPRCount = fprsUsed; + + return needsPtr; +} + +/* ffi64_data_size + + Calculate the size in bytes of an ffi type. +*/ + +unsigned int +ffi64_data_size( + const ffi_type* inType) +{ + unsigned int size = 0; + + switch (inType->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + size = 1; + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + size = 2; + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_FLOAT: + size = 4; + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + size = 8; + break; + + case FFI_TYPE_LONGDOUBLE: + size = 16; + break; + + case FFI_TYPE_STRUCT: + ffi64_struct_to_reg_form( + inType, NULL, NULL, NULL, NULL, &size, NULL, NULL); + break; + + case FFI_TYPE_VOID: + break; + + default: + FFI_ASSERT(0); + break; + } + + return size; +} + +#endif /* defined(__ppc64__) */ +#endif /* __ppc__ || __ppc64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S new file mode 100644 index 0000000..7162fa1 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S @@ -0,0 +1,418 @@ +#if defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc64-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc64-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 + stg r0,SF_RETURN(r1) // save return address + + // Save GPRs 3 - 10 (aligned to 8) in the parents outgoing area. + stg r3,SF_ARG1(r1) + stg r4,SF_ARG2(r1) + stg r5,SF_ARG3(r1) + stg r6,SF_ARG4(r1) + stg r7,SF_ARG5(r1) + stg r8,SF_ARG6(r1) + stg r9,SF_ARG7(r1) + stg r10,SF_ARG8(r1) + +LCFI0: +/* 48 bytes (Linkage Area) + 64 bytes (outgoing parameter area, always reserved) + 112 bytes (14*8 for incoming FPR) + ? bytes (result) + 112 bytes (14*8 for outgoing FPR) + 16 bytes (2 saved registers) + 352 + ? total bytes +*/ + + std r31,-8(r1) // Save registers we use. + std r30,-16(r1) + mr r30,r1 // Save the old SP. + mr r31,r11 // Save the ffi_closure around ffi64_data_size. + + // Calculate the space we need. + stdu r1,-SF_MINSIZE(r1) + ld r3,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r3) // ffi_cif->rtype* + bl Lffi64_data_size$stub + ld r1,0(r1) + + addi r3,r3,352 // Add our overhead. + neg r3,r3 + li r0,-32 // Align to 32 bytes. + and r3,r3,r0 + stdux r1,r1,r3 // Grow the stack. + + mr r11,r31 // Copy the ffi_closure back. + +LCFI1: + // We want to build up an area for the parameters passed + // in registers. (both floating point and integer) + +/* 320 bytes (callee stack frame aligned to 32) + 48 bytes (caller linkage area) + 368 (start of caller parameter area aligned to 8) +*/ + + // Save FPRs 1 - 14. (aligned to 8) + stfd f1,112(r1) + stfd f2,120(r1) + stfd f3,128(r1) + stfd f4,136(r1) + stfd f5,144(r1) + stfd f6,152(r1) + stfd f7,160(r1) + stfd f8,168(r1) + stfd f9,176(r1) + stfd f10,184(r1) + stfd f11,192(r1) + stfd f12,200(r1) + stfd f13,208(r1) + stfd f14,216(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,224 // result storage + addi r5,r30,SF_ARG1 // saved GPRs + addi r6,r1,112 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + // Look the proper starting point in table + // by using return type as an offset. + addi r5,r1,224 // Get pointer to results area. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Now multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: + // Each of the ret_typeX code fragments has to be exactly 16 bytes long + // (4 instructions). For cache effectiveness we align to a 16 byte + // boundary first. + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +// case FFI_TYPE_VOID +Lret_type0: + b Lfinish + nop + nop + nop + +// case FFI_TYPE_INT +Lret_type1: + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_FLOAT +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_DOUBLE +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_LONGDOUBLE +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +// case FFI_TYPE_UINT8 +Lret_type5: + lbz r3,7(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT8 +Lret_type6: + lbz r3,7(r5) + extsb r3,r3 + b Lfinish + nop + +// case FFI_TYPE_UINT16 +Lret_type7: + lhz r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT16 +Lret_type8: + lha r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT32 +Lret_type9: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT32 +Lret_type10: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT64 +Lret_type11: + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT64 +Lret_type12: // same as Lret_type11 + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_STRUCT +Lret_type13: + b Lret_struct + nop + nop + nop + +// ** End 16-byte aligned cases ** +// case FFI_TYPE_POINTER +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + b Lfinish + +// copy struct into registers +Lret_struct: + ld r31,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r31) // ffi_cif->rtype* + ld r31,24(r31) // ffi_cif->flags + mr r4,r5 // copy struct* to 2nd arg + addi r7,r1,SF_ARG9 // GPR return area + addi r9,r30,-16-(14*8) // FPR return area + li r5,0 // struct offset ptr (NULL) + li r6,0 // FPR used count ptr (NULL) + li r8,0 // GPR return area size ptr (NULL) + li r10,0 // FPR return area size ptr (NULL) + bl Lffi64_struct_to_reg_form$stub + + // Load GPRs + ld r3,SF_ARG9(r1) + ld r4,SF_ARG10(r1) + ld r5,SF_ARG11(r1) + ld r6,SF_ARG12(r1) + nop + ld r7,SF_ARG13(r1) + ld r8,SF_ARG14(r1) + ld r9,SF_ARG15(r1) + ld r10,SF_ARG16(r1) + nop + + // Load FPRs + mtcrf 0x2,r31 + bf 26,Lfinish + lfd f1,-16-(14*8)(r30) + lfd f2,-16-(13*8)(r30) + lfd f3,-16-(12*8)(r30) + lfd f4,-16-(11*8)(r30) + nop + lfd f5,-16-(10*8)(r30) + lfd f6,-16-(9*8)(r30) + lfd f7,-16-(8*8)(r30) + lfd f8,-16-(7*8)(r30) + nop + lfd f9,-16-(6*8)(r30) + lfd f10,-16-(5*8)(r30) + lfd f11,-16-(4*8)(r30) + lfd f12,-16-(3*8)(r30) + nop + lfd f13,-16-(2*8)(r30) + lfd f14,-16-(1*8)(r30) + // Fall through + +// case done +Lfinish: + lg r1,0(r1) // Restore stack pointer. + ld r31,-8(r1) // Restore registers we used. + ld r30,-16(r1) + lg r0,SF_RETURN(r1) // Get return address. + mtlr r0 // Reset link register. + blr + +// END(ffi_closure_ASM) + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_reg_form$stub: + .indirect_symbol _ffi64_struct_to_reg_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_reg_form + +LO$ffi64_struct_to_reg_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form)(r11) + mtctr r12 + bctr + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_data_size$stub: + .indirect_symbol _ffi64_data_size + mflr r0 + bcl 20,31,LO$ffi64_data_size + +LO$ffi64_data_size: + mflr r11 + addis r11,r11,ha16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size) + mtlr r0 + lgu r12,lo16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_reg_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_reg_form + .g_long dyld_stub_binding_helper + +L_ffi64_data_size$lazy_ptr: + .indirect_symbol _ffi64_data_size + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/types.c ./Modules/_ctypes/libffi_osx/types.c new file mode 100644 index 0000000..44806ae --- /dev/null +++ ./Modules/_ctypes/libffi_osx/types.c @@ -0,0 +1,115 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +/* Type definitions */ +#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) \ + ffi_type ffi_type_##n = { s, a, t, NULL } +#define FFI_AGGREGATE_TYPEDEF(n, e) \ + ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } + +FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); +FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); +FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); +FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); +FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); +FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); +FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); + +/* Size and alignment are fake here. They must not be 0. */ +FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); + +#if defined ALPHA || defined SPARC64 || defined X86_64 || \ + defined S390X || defined IA64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); +#else +FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); +#endif + +#if defined X86 || defined ARM || defined M68K || defined(X86_DARWIN) + +# ifdef X86_64 + FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +# else + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +# endif + +#elif defined(POWERPC_DARWIN) +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#elif defined SH +FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +#else +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#endif + +#if defined X86 || defined X86_WIN32 || defined M68K || defined(X86_DARWIN) + +# if defined X86_WIN32 || defined X86_64 + FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +# endif + +# ifdef X86_DARWIN + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined ARM || defined SH || defined POWERPC_AIX +FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); +#elif defined POWERPC_DARWIN +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# if __GNUC__ >= 4 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined SPARC +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# ifdef SPARC64 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined X86_64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +#else +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/x86/darwin64.S ./Modules/_ctypes/libffi_osx/x86/darwin64.S new file mode 100644 index 0000000..165d469 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -0,0 +1,417 @@ +/* ----------------------------------------------------------------------- + darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. + derived from unix64.S + + x86-64 Foreign Function Interface for Darwin. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifdef __x86_64__ +#define LIBFFI_ASM +#include +#include + + .file "darwin64.S" +.text + +/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, + void *raddr, void (*fnaddr)()); + + Bit o trickiness here -- ARGS+BYTES is the base of the stack frame + for this function. This has been allocated by ffi_call. We also + deallocate some of the stack that has been alloca'd. */ + + .align 3 + .globl _ffi_call_unix64 + +_ffi_call_unix64: +LUW0: + movq (%rsp), %r10 /* Load return address. */ + movq %rdi, %r12 /* Save a copy of the register area. */ + leaq (%rdi, %rsi), %rax /* Find local stack base. */ + movq %rdx, (%rax) /* Save flags. */ + movq %rcx, 8(%rax) /* Save raddr. */ + movq %rbp, 16(%rax) /* Save old frame pointer. */ + movq %r10, 24(%rax) /* Relocate return address. */ + movq %rax, %rbp /* Finalize local stack frame. */ +LUW1: + /* movq %rdi, %r10 // Save a copy of the register area. */ + movq %r12, %r10 + movq %r8, %r11 /* Save a copy of the target fn. */ + movl %r9d, %eax /* Set number of SSE registers. */ + + /* Load up all argument registers. */ + movq (%r10), %rdi + movq 8(%r10), %rsi + movq 16(%r10), %rdx + movq 24(%r10), %rcx + movq 32(%r10), %r8 + movq 40(%r10), %r9 + testl %eax, %eax + jnz Lload_sse +Lret_from_load_sse: + + /* Deallocate the reg arg area. */ + leaq 176(%r10), %rsp + + /* Call the user function. */ + call *%r11 + + /* Deallocate stack arg area; local stack frame in redzone. */ + leaq 24(%rbp), %rsp + + movq 0(%rbp), %rcx /* Reload flags. */ + movq 8(%rbp), %rdi /* Reload raddr. */ + movq 16(%rbp), %rbp /* Reload old frame pointer. */ +LUW2: + + /* The first byte of the flags contains the FFI_TYPE. */ + movzbl %cl, %r10d + leaq Lstore_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lstore_table: + .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ + .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ + .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ + .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ + .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ + .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ + .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ + .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ + .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ + .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ + .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lst_void: + ret + .align 3 +Lst_uint8: + movzbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_sint8: + movsbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint16: + movzwq %ax, %rax + movq %rax, (%rdi) + .align 3 +Lst_sint16: + movswq %ax, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint32: + movl %eax, %eax + movq %rax, (%rdi) + .align 3 +Lst_sint32: + cltq + movq %rax, (%rdi) + ret + .align 3 +Lst_int64: + movq %rax, (%rdi) + ret + .align 3 +Lst_float: + movss %xmm0, (%rdi) + ret + .align 3 +Lst_double: + movsd %xmm0, (%rdi) + ret +Lst_ldouble: + fstpt (%rdi) + ret + .align 3 +Lst_struct: + leaq -20(%rsp), %rsi /* Scratch area in redzone. */ + + /* We have to locate the values now, and since we don't want to + write too much data into the user's return value, we spill the + value to a 16 byte scratch area first. Bits 8, 9, and 10 + control where the values are located. Only one of the three + bits will be set; see ffi_prep_cif_machdep for the pattern. */ + movd %xmm0, %r10 + movd %xmm1, %r11 + testl $0x100, %ecx + cmovnz %rax, %rdx + cmovnz %r10, %rax + testl $0x200, %ecx + cmovnz %r10, %rdx + testl $0x400, %ecx + cmovnz %r10, %rax + cmovnz %r11, %rdx + movq %rax, (%rsi) + movq %rdx, 8(%rsi) + + /* Bits 12-31 contain the true size of the structure. Copy from + the scratch area to the true destination. */ + shrl $12, %ecx + rep movsb + ret + + /* Many times we can avoid loading any SSE registers at all. + It's not worth an indirect jump to load the exact set of + SSE registers needed; zero or all is a good compromise. */ + .align 3 +LUW3: +Lload_sse: + movdqa 48(%r10), %xmm0 + movdqa 64(%r10), %xmm1 + movdqa 80(%r10), %xmm2 + movdqa 96(%r10), %xmm3 + movdqa 112(%r10), %xmm4 + movdqa 128(%r10), %xmm5 + movdqa 144(%r10), %xmm6 + movdqa 160(%r10), %xmm7 + jmp Lret_from_load_sse + +LUW4: + .align 3 + .globl _ffi_closure_unix64 + +_ffi_closure_unix64: +LUW5: + /* The carry flag is set by the trampoline iff SSE registers + are used. Don't clobber it before the branch instruction. */ + leaq -200(%rsp), %rsp +LUW6: + movq %rdi, (%rsp) + movq %rsi, 8(%rsp) + movq %rdx, 16(%rsp) + movq %rcx, 24(%rsp) + movq %r8, 32(%rsp) + movq %r9, 40(%rsp) + jc Lsave_sse +Lret_from_save_sse: + + movq %r10, %rdi + leaq 176(%rsp), %rsi + movq %rsp, %rdx + leaq 208(%rsp), %rcx + call _ffi_closure_unix64_inner + + /* Deallocate stack frame early; return value is now in redzone. */ + addq $200, %rsp +LUW7: + + /* The first byte of the return value contains the FFI_TYPE. */ + movzbl %al, %r10d + leaq Lload_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lload_table: + .long Lld_void-Lload_table /* FFI_TYPE_VOID */ + .long Lld_int32-Lload_table /* FFI_TYPE_INT */ + .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ + .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ + .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ + .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ + .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ + .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ + .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ + .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ + .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ + .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ + .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ + .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ + .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lld_void: + ret + .align 3 +Lld_int8: + movzbl -24(%rsp), %eax + ret + .align 3 +Lld_int16: + movzwl -24(%rsp), %eax + ret + .align 3 +Lld_int32: + movl -24(%rsp), %eax + ret + .align 3 +Lld_int64: + movq -24(%rsp), %rax + ret + .align 3 +Lld_float: + movss -24(%rsp), %xmm0 + ret + .align 3 +Lld_double: + movsd -24(%rsp), %xmm0 + ret + .align 3 +Lld_ldouble: + fldt -24(%rsp) + ret + .align 3 +Lld_struct: + /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, + %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading + both rdx and xmm1 with the second word. For the remaining, + bit 8 set means xmm0 gets the second word, and bit 9 means + that rax gets the second word. */ + movq -24(%rsp), %rcx + movq -16(%rsp), %rdx + movq -16(%rsp), %xmm1 + testl $0x100, %eax + cmovnz %rdx, %rcx + movd %rcx, %xmm0 + testl $0x200, %eax + movq -24(%rsp), %rax + cmovnz %rdx, %rax + ret + + /* See the comment above Lload_sse; the same logic applies here. */ + .align 3 +LUW8: +Lsave_sse: + movdqa %xmm0, 48(%rsp) + movdqa %xmm1, 64(%rsp) + movdqa %xmm2, 80(%rsp) + movdqa %xmm3, 96(%rsp) + movdqa %xmm4, 112(%rsp) + movdqa %xmm5, 128(%rsp) + movdqa %xmm6, 144(%rsp) + movdqa %xmm7, 160(%rsp) + jmp Lret_from_save_sse + +LUW9: +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ + .long L$set$0 +LSCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "zR\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ + .byte 0x10 /* CIE RA Column */ + .byte 0x1 /* uleb128 0x1; Augmentation size */ + .byte 0x10 /* FDE Encoding (pcrel sdata4) */ + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 /* uleb128 0x7 */ + .byte 0x8 /* uleb128 0x8 */ + .byte 0x90 /* DW_CFA_offset, column 0x10 */ + .byte 0x1 + .align 3 +LECIE1: + .globl _ffi_call_unix64.eh +_ffi_call_unix64.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 /* FDE CIE offset */ + .quad LUW0-. /* FDE initial location */ + .set L$set$2,LUW4-LUW0 /* FDE address range */ + .quad L$set$2 + .byte 0x0 /* Augmentation size */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$3,LUW1-LUW0 + .long L$set$3 + + /* New stack frame based off rbp. This is a itty bit of unwind + trickery in that the CFA *has* changed. There is no easy way + to describe it correctly on entry to the function. Fortunately, + it doesn't matter too much since at all points we can correctly + unwind back to ffi_call. Note that the location to which we + moved the return address is (the new) CFA-8, so from the + perspective of the unwind info, it hasn't moved. */ + .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ + .byte 0x6 + .byte 0x20 + .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ + .byte 0x2 + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$4,LUW2-LUW1 + .long L$set$4 + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 + .byte 0x8 + .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$5,LUW3-LUW2 + .long L$set$5 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE1: + .globl _ffi_closure_unix64.eh +_ffi_closure_unix64.eh: +LSFDE3: + .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ + .long L$set$6 +LASFDE3: + .long LASFDE3-EH_frame1 /* FDE CIE offset */ + .quad LUW5-. /* FDE initial location */ + .set L$set$7,LUW9-LUW5 /* FDE address range */ + .quad L$set$7 + .byte 0x0 /* Augmentation size */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$8,LUW6-LUW5 + .long L$set$8 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 208,1 /* uleb128 208 */ + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$9,LUW7-LUW6 + .long L$set$9 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 0x8 + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$10,LUW8-LUW7 + .long L$set$10 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE3: + .subsections_via_symbols + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S new file mode 100644 index 0000000..925a841 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S @@ -0,0 +1,422 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. + + X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +/* + * This file is based on sysv.S and then hacked up by Ronald who hasn't done + * assembly programming in 8 years. + */ + +#ifndef __x86_64__ + +#define LIBFFI_ASM +#include +#include + +#ifdef PyObjC_STRICT_DEBUGGING + /* XXX: Debugging of stack alignment, to be removed */ +#define ASSERT_STACK_ALIGNED movdqa -16(%esp), %xmm0 +#else +#define ASSERT_STACK_ALIGNED +#endif + +.text + +.globl _ffi_prep_args + + .align 4 +.globl _ffi_call_SYSV + +_ffi_call_SYSV: +LFB1: + pushl %ebp +LCFI0: + movl %esp,%ebp +LCFI1: + subl $8,%esp + /* Make room for all of the new args. */ + movl 16(%ebp),%ecx + subl %ecx,%esp + + movl %esp,%eax + + /* Place all of the ffi_prep_args in position */ + subl $8,%esp + pushl 12(%ebp) + pushl %eax + call *8(%ebp) + + /* Return stack to previous state and call the function */ + addl $16,%esp + + call *28(%ebp) + + /* Remove the space we pushed for the args */ + movl 16(%ebp),%ecx + addl %ecx,%esp + + /* Load %ecx with the return type code */ + movl 20(%ebp),%ecx + + /* If the return value pointer is NULL, assume no return value. */ + cmpl $0,24(%ebp) + jne Lretint + + /* Even if there is no space for the return value, we are + obliged to handle floating-point values. */ + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lnoretval + fstp %st(0) + + jmp Lepilogue + +Lretint: + cmpl $FFI_TYPE_INT,%ecx + jne Lretfloat + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp Lepilogue + +Lretfloat: + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lretdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstps (%ecx) + jmp Lepilogue + +Lretdouble: + cmpl $FFI_TYPE_DOUBLE,%ecx + jne Lretlongdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpl (%ecx) + jmp Lepilogue + +Lretlongdouble: + cmpl $FFI_TYPE_LONGDOUBLE,%ecx + jne Lretint64 + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpt (%ecx) + jmp Lepilogue + +Lretint64: + cmpl $FFI_TYPE_SINT64,%ecx + jne Lretstruct1b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + movl %edx,4(%ecx) + jmp Lepilogue + +Lretstruct1b: + cmpl $FFI_TYPE_SINT8,%ecx + jne Lretstruct2b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movb %al,0(%ecx) + jmp Lepilogue + +Lretstruct2b: + cmpl $FFI_TYPE_SINT16,%ecx + jne Lretstruct + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movw %ax,0(%ecx) + jmp Lepilogue + +Lretstruct: + cmpl $FFI_TYPE_STRUCT,%ecx + jne Lnoretval + /* Nothing to do! */ + addl $4,%esp + popl %ebp + ret + +Lnoretval: +Lepilogue: + addl $8,%esp + movl %ebp,%esp + popl %ebp + ret +LFE1: +.ffi_call_SYSV_end: + + .align 4 +FFI_HIDDEN (ffi_closure_SYSV) +.globl _ffi_closure_SYSV + +_ffi_closure_SYSV: +LFB2: + pushl %ebp +LCFI2: + movl %esp, %ebp +LCFI3: + subl $56, %esp + leal -40(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 8(%ebp), %edx + movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + movl %ebx, 8(%esp) +LCFI7: + call L_ffi_closure_SYSV_inner$stub + movl 8(%esp), %ebx + movl -12(%ebp), %ecx + cmpl $FFI_TYPE_INT, %eax + je Lcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lcls_retllong + cmpl $FFI_TYPE_UINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_SINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_UINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_SINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_STRUCT, %eax + je Lcls_retstruct +Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret +Lcls_retint: + movl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retfloat: + flds (%ecx) + jmp Lcls_epilogue +Lcls_retdouble: + fldl (%ecx) + jmp Lcls_epilogue +Lcls_retldouble: + fldt (%ecx) + jmp Lcls_epilogue +Lcls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp Lcls_epilogue +Lcls_retstruct1: + movsbl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct2: + movswl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct: + lea -8(%ebp),%esp + movl %ebp, %esp + popl %ebp + ret $4 +LFE2: + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + + .align 4 +FFI_HIDDEN (ffi_closure_raw_SYSV) +.globl _ffi_closure_raw_SYSV + +_ffi_closure_raw_SYSV: +LFB3: + pushl %ebp +LCFI4: + movl %esp, %ebp +LCFI5: + pushl %esi +LCFI6: + subl $36, %esp + movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ + movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ + movl %edx, 12(%esp) /* user_data */ + leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ + movl %edx, 8(%esp) /* raw_args */ + leal -24(%ebp), %edx + movl %edx, 4(%esp) /* &res */ + movl %esi, (%esp) /* cif */ + call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ + movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ + cmpl $FFI_TYPE_INT, %eax + je Lrcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lrcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lrcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lrcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lrcls_retllong +Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret +Lrcls_retint: + movl -24(%ebp), %eax + jmp Lrcls_epilogue +Lrcls_retfloat: + flds -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retdouble: + fldl -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retldouble: + fldt -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retllong: + movl -24(%ebp), %eax + movl -20(%ebp), %edx + jmp Lrcls_epilogue +LFE3: +#endif + +.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 +L_ffi_closure_SYSV_inner$stub: + .indirect_symbol _ffi_closure_SYSV_inner + hlt ; hlt ; hlt ; hlt ; hlt + + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 +LSCIE1: + .long 0x0 + .byte 0x1 + .ascii "zR\0" + .byte 0x1 + .byte 0x7c + .byte 0x8 + .byte 0x1 + .byte 0x10 + .byte 0xc + .byte 0x5 + .byte 0x4 + .byte 0x88 + .byte 0x1 + .align 2 +LECIE1: +.globl _ffi_call_SYSV.eh +_ffi_call_SYSV.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 + .long LFB1-. + .set L$set$2,LFE1-LFB1 + .long L$set$2 + .byte 0x0 + .byte 0x4 + .set L$set$3,LCFI0-LFB1 + .long L$set$3 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$4,LCFI1-LCFI0 + .long L$set$4 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE1: +.globl _ffi_closure_SYSV.eh +_ffi_closure_SYSV.eh: +LSFDE2: + .set L$set$5,LEFDE2-LASFDE2 + .long L$set$5 +LASFDE2: + .long LASFDE2-EH_frame1 + .long LFB2-. + .set L$set$6,LFE2-LFB2 + .long L$set$6 + .byte 0x0 + .byte 0x4 + .set L$set$7,LCFI2-LFB2 + .long L$set$7 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$8,LCFI3-LCFI2 + .long L$set$8 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE2: + +#if !FFI_NO_RAW_API + +.globl _ffi_closure_raw_SYSV.eh +_ffi_closure_raw_SYSV.eh: +LSFDE3: + .set L$set$10,LEFDE3-LASFDE3 + .long L$set$10 +LASFDE3: + .long LASFDE3-EH_frame1 + .long LFB3-. + .set L$set$11,LFE3-LFB3 + .long L$set$11 + .byte 0x0 + .byte 0x4 + .set L$set$12,LCFI4-LFB3 + .long L$set$12 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$13,LCFI5-LCFI4 + .long L$set$13 + .byte 0xd + .byte 0x4 + .byte 0x4 + .set L$set$14,LCFI6-LCFI5 + .long L$set$14 + .byte 0x85 + .byte 0x3 + .align 2 +LEFDE3: + +#endif + +#endif /* ifndef __x86_64__ */ + +#endif /* defined __i386__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c new file mode 100644 index 0000000..06feaf2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c @@ -0,0 +1,734 @@ +#ifdef __x86_64__ + +/* ----------------------------------------------------------------------- + x86-ffi64.c - Copyright (c) 2002 Bo Thorsen + + x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#define MAX_GPR_REGS 6 +#define MAX_SSE_REGS 8 + +typedef struct RegisterArgs { + /* Registers for argument passing. */ + UINT64 gpr[MAX_GPR_REGS]; + __int128_t sse[MAX_SSE_REGS]; +} RegisterArgs; + +extern void +ffi_call_unix64( + void* args, + unsigned long bytes, + unsigned flags, + void* raddr, + void (*fnaddr)(), + unsigned ssecount); + +/* All reference to register classes here is identical to the code in + gcc/config/i386/i386.c. Do *not* change one without the other. */ + +/* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +enum x86_64_reg_class +{ + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_COMPLEX_X87_CLASS, + X86_64_MEMORY_CLASS +}; + +#define MAX_CLASSES 4 +#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + +/* x86-64 register passing implementation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + +/* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ +static enum x86_64_reg_class +merge_classes( + enum x86_64_reg_class class1, + enum x86_64_reg_class class2) +{ + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, + MEMORY is used. */ + if (class1 == X86_64_X87_CLASS + || class1 == X86_64_X87UP_CLASS + || class1 == X86_64_COMPLEX_X87_CLASS + || class2 == X86_64_X87_CLASS + || class2 == X86_64_X87UP_CLASS + || class2 == X86_64_COMPLEX_X87_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; +} + +/* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + See the x86-64 PS ABI for details. */ + +static int +classify_argument( + ffi_type* type, + enum x86_64_reg_class classes[], + size_t byte_offset) +{ + switch (type->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_POINTER: +#if 0 + if (byte_offset + type->size <= 4) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + + return 1; +#else + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } +#endif + + case FFI_TYPE_FLOAT: + if (byte_offset == 0) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + + return 1; + + case FFI_TYPE_DOUBLE: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + + case FFI_TYPE_LONGDOUBLE: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + + case FFI_TYPE_STRUCT: + { + ffi_type** ptr; + int i; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + const int UNITS_PER_WORD = 8; + int words = + (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + /* If the struct is larger than 16 bytes, pass it on the stack. */ + if (type->size > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Merge the fields of structure. */ + for (ptr = type->elements; *ptr != NULL; ptr++) + { + byte_offset = ALIGN(byte_offset, (*ptr)->alignment); + + int num = classify_argument(*ptr, subclasses, byte_offset % 8); + + if (num == 0) + return 0; + + int pos = byte_offset / 8; + + for (i = 0; i < num; i++) + { + classes[i + pos] = + merge_classes(subclasses[i], classes[i + pos]); + } + + byte_offset += (*ptr)->size; + } + + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && classes[i - 1] != X86_64_X87_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + } + + return words; + } + + default: + FFI_ASSERT(0); + } + + return 0; /* Never reached. */ +} + +/* Examine the argument and return set number of register required in each + class. Return zero if parameter should be passed in memory, otherwise + the number of registers. */ +static int +examine_argument( + ffi_type* type, + enum x86_64_reg_class classes[MAX_CLASSES], + _Bool in_return, + int* pngpr, + int* pnsse) +{ + int n = classify_argument(type, classes, 0); + int ngpr = 0; + int nsse = 0; + int i; + + if (n == 0) + return 0; + + for (i = 0; i < n; ++i) + { + switch (classes[i]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + ngpr++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + nsse++; + break; + + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + case X86_64_COMPLEX_X87_CLASS: + return in_return != 0; + + default: + abort(); + } + } + + *pngpr = ngpr; + *pnsse = nsse; + + return n; +} + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + int gprcount = 0; + int ssecount = 0; + int flags = cif->rtype->type; + int i, avn, n, ngpr, nsse; + enum x86_64_reg_class classes[MAX_CLASSES]; + size_t bytes; + + if (flags != FFI_TYPE_VOID) + { + n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value is passed in memory. A pointer to that + memory is the first argument. Allocate a register for it. */ + gprcount++; + + /* We don't have to do anything in asm for the return. */ + flags = FFI_TYPE_VOID; + } + else if (flags == FFI_TYPE_STRUCT) + { + /* Mark which registers the result appears in. */ + _Bool sse0 = SSE_CLASS_P(classes[0]); + _Bool sse1 = n == 2 && SSE_CLASS_P(classes[1]); + + if (sse0 && !sse1) + flags |= 1 << 8; + else if (!sse0 && sse1) + flags |= 1 << 9; + else if (sse0 && sse1) + flags |= 1 << 10; + + /* Mark the true size of the structure. */ + flags |= cif->rtype->size << 12; + } + } + + /* Go over all arguments and determine the way they should be passed. + If it's in a register and there is space for it, let that be so. If + not, add it's size to the stack byte count. */ + for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) + { + if (examine_argument(cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = cif->arg_types[i]->alignment; + + if (align < 8) + align = 8; + + bytes = ALIGN(bytes, align); + bytes += cif->arg_types[i]->size; + } + else + { + gprcount += ngpr; + ssecount += nsse; + } + } + + if (ssecount) + flags |= 1 << 11; + + cif->flags = flags; + cif->bytes = bytes; + cif->bytes = ALIGN(bytes,8); + + return FFI_OK; +} + +void +ffi_call( + ffi_cif* cif, + void (*fn)(), + void* rvalue, + void** avalue) +{ + enum x86_64_reg_class classes[MAX_CLASSES]; + char* stack; + char* argp; + ffi_type** arg_types; + int gprcount, ssecount, ngpr, nsse, i, avn; + _Bool ret_in_memory; + RegisterArgs* reg_args; + + /* Can't call 32-bit mode from 64-bit mode. */ + FFI_ASSERT(cif->abi == FFI_UNIX64); + + /* If the return value is a struct and we don't have a return value + address then we need to make one. Note the setting of flags to + VOID above in ffi_prep_cif_machdep. */ + ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT + && (cif->flags & 0xff) == FFI_TYPE_VOID); + + if (rvalue == NULL && ret_in_memory) + rvalue = alloca (cif->rtype->size); + + /* Allocate the space for the arguments, plus 4 words of temp space. */ + stack = alloca(sizeof(RegisterArgs) + cif->bytes + 4 * 8); + reg_args = (RegisterArgs*)stack; + argp = stack + sizeof(RegisterArgs); + + gprcount = ssecount = 0; + + /* If the return value is passed in memory, add the pointer as the + first integer argument. */ + if (ret_in_memory) + reg_args->gpr[gprcount++] = (long) rvalue; + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + size_t size = arg_types[i]->size; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + memcpy (argp, avalue[i], size); + argp += size; + } + else + { /* The argument is passed entirely in registers. */ + char *a = (char *) avalue[i]; + int j; + + for (j = 0; j < n; j++, a += 8, size -= 8) + { + switch (classes[j]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + reg_args->gpr[gprcount] = 0; + switch (arg_types[i]->type) { + case FFI_TYPE_SINT8: + { + int8_t shortval = *(int8_t*)a; + int64_t actval = (int64_t)shortval; + reg_args->gpr[gprcount] = actval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + break; + } + + case FFI_TYPE_SINT16: + { + int16_t shortval = *(int16_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_SINT32: + { + int32_t shortval = *(int32_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT8: + { + u_int8_t shortval = *(u_int8_t*)a; + u_int64_t actval = (u_int64_t)shortval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + reg_args->gpr[gprcount] = actval; + break; + } + + case FFI_TYPE_UINT16: + { + u_int16_t shortval = *(u_int16_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT32: + { + u_int32_t shortval = *(u_int32_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + default: + //memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); + reg_args->gpr[gprcount] = *(int64_t*)a; + } + gprcount++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSEDF_CLASS: + reg_args->sse[ssecount++] = *(UINT64 *) a; + break; + + case X86_64_SSESF_CLASS: + reg_args->sse[ssecount++] = *(UINT32 *) a; + break; + + default: + abort(); + } + } + } + } + + ffi_call_unix64 (stack, cif->bytes + sizeof(RegisterArgs), + cif->flags, rvalue, fn, ssecount); +} + +extern void ffi_closure_unix64(void); + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + if (cif->abi != FFI_UNIX64) + return FFI_BAD_ABI; + + volatile unsigned short* tramp = + (volatile unsigned short*)&closure->tramp[0]; + + tramp[0] = 0xbb49; /* mov , %r11 */ + *(void* volatile*)&tramp[1] = ffi_closure_unix64; + tramp[5] = 0xba49; /* mov , %r10 */ + *(void* volatile*)&tramp[6] = closure; + + /* Set the carry bit if the function uses any sse registers. + This is clc or stc, together with the first byte of the jmp. */ + tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + tramp[11] = 0xe3ff; /* jmp *%r11 */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmissing-prototypes" +int +ffi_closure_unix64_inner( + ffi_closure* closure, + void* rvalue, + RegisterArgs* reg_args, + char* argp) +#pragma clang diagnostic pop +{ + ffi_cif* cif = closure->cif; + void** avalue = alloca(cif->nargs * sizeof(void *)); + ffi_type** arg_types; + long i, avn; + int gprcount = 0; + int ssecount = 0; + int ngpr, nsse; + int ret; + + ret = cif->rtype->type; + + if (ret != FFI_TYPE_VOID) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value goes in memory. Arrange for the closure + return value to go directly back to the original caller. */ + rvalue = (void *) reg_args->gpr[gprcount++]; + + /* We don't have to do anything in asm for the return. */ + ret = FFI_TYPE_VOID; + } + else if (ret == FFI_TYPE_STRUCT && n == 2) + { + /* Mark which register the second word of the structure goes in. */ + _Bool sse0 = SSE_CLASS_P (classes[0]); + _Bool sse1 = SSE_CLASS_P (classes[1]); + + if (!sse0 && sse1) + ret |= 1 << 8; + else if (sse0 && !sse1) + ret |= 1 << 9; + } + } + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + avalue[i] = argp; + argp += arg_types[i]->size; + } + +#if !defined(X86_DARWIN) + /* If the argument is in a single register, or two consecutive + registers, then we can use that address directly. */ + else if (n == 1 || (n == 2 && + SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + { + // The argument is in a single register. + if (SSE_CLASS_P (classes[0])) + { + avalue[i] = ®_args->sse[ssecount]; + ssecount += n; + } + else + { + avalue[i] = ®_args->gpr[gprcount]; + gprcount += n; + } + } +#endif + + /* Otherwise, allocate space to make them consecutive. */ + else + { + char *a = alloca (16); + int j; + + avalue[i] = a; + + for (j = 0; j < n; j++, a += 8) + { + if (SSE_CLASS_P (classes[j])) + memcpy (a, ®_args->sse[ssecount++], 8); + else + memcpy (a, ®_args->gpr[gprcount++], 8); + } + } + } + + /* Invoke the closure. */ + closure->fun (cif, rvalue, avalue, closure->user_data); + + /* Tell assembly how to perform return type promotions. */ + return ret; +} + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c new file mode 100644 index 0000000..706ea0f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c @@ -0,0 +1,438 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2002 Bo Thorsen + Copyright (c) 2002 Roger Sayle + + x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void ffi_prep_args(char *stack, extended_cif *ecif); + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if (ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void **) argp = ecif->rvalue; + argp += 4; + } + + p_argv = ecif->avalue; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + i != 0; + i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) + argp = (char *) ALIGN(argp, sizeof(int)); + + z = (*p_arg)->size; + if (z < sizeof(int)) + { + z = sizeof(int); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } + else + { + memcpy(argp, *p_argv, z); + } + p_argv++; + argp += z; + } + + return; +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Set the return type flag */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: +#ifdef X86 + case FFI_TYPE_STRUCT: + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: +#endif + + case FFI_TYPE_SINT64: + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_UINT64: + cif->flags = FFI_TYPE_SINT64; + break; + +#ifndef X86 + case FFI_TYPE_STRUCT: + if (cif->rtype->size == 1) + { + cif->flags = FFI_TYPE_SINT8; /* same as char size */ + } + else if (cif->rtype->size == 2) + { + cif->flags = FFI_TYPE_SINT16; /* same as short size */ + } + else if (cif->rtype->size == 4) + { + cif->flags = FFI_TYPE_INT; /* same as int type */ + } + else if (cif->rtype->size == 8) + { + cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ + } + else + { + cif->flags = FFI_TYPE_STRUCT; + } + break; +#endif + + default: + cif->flags = FFI_TYPE_INT; + break; + } + +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + + return FFI_OK; +} + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#endif /* X86_WIN32 */ + +void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->flags == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, + fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + + +/** private members **/ + +static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) +__attribute__ ((regparm(1))); +unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) +__attribute__ ((regparm(1))); +void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) +__attribute__ ((regparm(1))); + +/* This function is jumped to by the trampoline */ + +unsigned int FFI_HIDDEN +ffi_closure_SYSV_inner (closure, respp, args) +ffi_closure *closure; +void **respp; +void *args; +{ + // our various things... + ffi_cif *cif; + void **arg_area; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will re-set RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun) (cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +static void +ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, + ffi_cif *cif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if ( cif->flags == FFI_TYPE_STRUCT ) { + *rvalue = *(void **) argp; + argp += 4; + } + + p_argv = avalue; + + for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, sizeof(int)); + } + + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + + p_argv++; + argp += z; + } + + return; +} + +/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ + +#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ +({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +unsigned int __fun = (unsigned int)(FUN); \ +unsigned int __ctx = (unsigned int)(CTX); \ +unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \ +*(unsigned char*) &__tramp[0] = 0xb8; \ +*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ +*(unsigned char *) &__tramp[5] = 0xe9; \ +*(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ +}) + + +/* the cif must already be prep'ed */ +ffi_status +ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data) +{ + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ + &ffi_closure_SYSV, \ + (void*)closure); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +/* ------- Native raw API support -------------------------------- */ + +#if !FFI_NO_RAW_API + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + int i; + + FFI_ASSERT (cif->abi == FFI_SYSV); + + // we currently don't support certain kinds of arguments for raw + // closures. This should be implemented by a separate assembly language + // routine, since it would require argument processing, something we + // don't do now for performance. + + for (i = cif->nargs-1; i >= 0; i--) + { + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); + } + + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, + codeloc); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +static void +ffi_prep_args_raw(char *stack, extended_cif *ecif) +{ + memcpy (stack, ecif->avalue, ecif->cif->bytes); +} + +/* we borrow this routine from libffi (it must be changed, though, to + * actually call the function passed in the first argument. as of + * libffi-1.20, this is not the case.) + */ + +extern void +ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void +ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); +#endif /* X86_WIN32 */ + +void +ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue) +{ + extended_cif ecif; + void **avalue = (void **)fake_avalue; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + +#endif +#endif // __i386__ diff -r -u ./setup.py ./setup.py index 46b92fe..2bf6b4b 100644 --- ./setup.py +++ ./setup.py @@ -98,8 +98,14 @@ class PyBuildExt(build_ext): self.detect_modules() # Remove modules that are present on the disabled list - self.extensions = [ext for ext in self.extensions - if ext.name not in disabled_module_list] + extensions = [ext for ext in self.extensions + if ext.name not in disabled_module_list] + # move ctypes to the end, it depends on other modules + ext_map = dict((ext.name, i) for i, ext in enumerate(extensions)) + if "_ctypes" in ext_map: + ctypes = extensions.pop(ext_map["_ctypes"]) + extensions.append(ctypes) + self.extensions = extensions # Fix up the autodetected modules, prefixing all the source files # with Modules/ and adding Python's include directory to the path. @@ -1330,9 +1336,39 @@ class PyBuildExt(build_ext): # *** Uncomment these for TOGL extension only: # -lGL -lGLU -lXext -lXmu \ + def configure_ctypes_darwin(self, ext): + # Darwin (OS X) uses preconfigured files, in + # the Modules/_ctypes/libffi_osx directory. + srcdir = sysconfig.get_config_var('srcdir') + ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', + '_ctypes', 'libffi_osx')) + sources = [os.path.join(ffi_srcdir, p) + for p in ['ffi.c', + 'x86/darwin64.S', + 'x86/x86-darwin.S', + 'x86/x86-ffi_darwin.c', + 'x86/x86-ffi64.c', + 'powerpc/ppc-darwin.S', + 'powerpc/ppc-darwin_closure.S', + 'powerpc/ppc-ffi_darwin.c', + 'powerpc/ppc64-darwin_closure.S', + ]] + + # Add .S (preprocessed assembly) to C compiler source extensions. + self.compiler.src_extensions.append('.S') + + include_dirs = [os.path.join(ffi_srcdir, 'include'), + os.path.join(ffi_srcdir, 'powerpc')] + ext.include_dirs.extend(include_dirs) + ext.sources.extend(sources) + return True + def configure_ctypes(self, ext): if not self.use_system_libffi: - (srcdir,) = sysconfig.get_config_vars('srcdir') + if sys.platform == 'darwin': + return self.configure_ctypes_darwin(ext) + + srcdir = sysconfig.get_config_var('srcdir') ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', '_ctypes', 'libffi')) @@ -1347,7 +1383,10 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = [arg for arg in sysconfig.get_config_var("CONFIG_ARGS").split() + if (('--host=' in arg) or ('--build=' in arg))] + if not self.verbose: + config_args.append("-q") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. @@ -1367,10 +1406,12 @@ class PyBuildExt(build_ext): self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), - ffi_builddir, ffi_srcdir] + ffi_builddir, + os.path.join(ffi_srcdir, 'src')] extra_compile_args = fficonfig['ffi_cflags'].split() - ext.sources.extend(fficonfig['ffi_sources']) + ext.sources.extend(os.path.join(ffi_srcdir, f) for f in + fficonfig['ffi_sources']) ext.include_dirs.extend(include_dirs) ext.extra_compile_args.extend(extra_compile_args) return True @@ -1390,6 +1431,7 @@ class PyBuildExt(build_ext): if sys.platform == 'darwin': sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') # XXX Is this still needed? ## extra_link_args.extend(['-read_only_relocs', 'warning']) @@ -1419,7 +1461,14 @@ class PyBuildExt(build_ext): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = find_file('ffi.h', [], inc_dirs) + if sys.platform == 'darwin': + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + if not ffi_inc or ffi_inc[0] == '': + ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' fp = open(ffi_h) 005_osx_failed_modules.patch000066400000000000000000000076331476513315000337330ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.3/Python-2.5.3diff -r -u ./Mac/Modules/cg/_CGmodule.c ./Mac/Modules/cg/_CGmodule.c index 8115614..e36fce9 100755 --- ./Mac/Modules/cg/_CGmodule.c +++ ./Mac/Modules/cg/_CGmodule.c @@ -1025,6 +1025,7 @@ static PyObject *CGContextRefObj_CGContextSetShouldAntialias(CGContextRefObject return _res; } +#ifndef __LP64__ static PyObject *CGContextRefObj_SyncCGContextOriginWithPort(CGContextRefObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1055,6 +1056,7 @@ static PyObject *CGContextRefObj_ClipCGContextToRegion(CGContextRefObject *_self _res = Py_None; return _res; } +#endif static PyMethodDef CGContextRefObj_methods[] = { {"CGContextSaveGState", (PyCFunction)CGContextRefObj_CGContextSaveGState, 1, @@ -1173,10 +1175,12 @@ static PyMethodDef CGContextRefObj_methods[] = { PyDoc_STR("() -> None")}, {"CGContextSetShouldAntialias", (PyCFunction)CGContextRefObj_CGContextSetShouldAntialias, 1, PyDoc_STR("(int shouldAntialias) -> None")}, +#ifndef __LP64__ {"SyncCGContextOriginWithPort", (PyCFunction)CGContextRefObj_SyncCGContextOriginWithPort, 1, PyDoc_STR("(CGrafPtr port) -> None")}, {"ClipCGContextToRegion", (PyCFunction)CGContextRefObj_ClipCGContextToRegion, 1, PyDoc_STR("(Rect portRect, RgnHandle region) -> None")}, +#endif {NULL, NULL, 0} }; @@ -1254,6 +1258,7 @@ PyTypeObject CGContextRef_Type = { /* ------------------ End object type CGContextRef ------------------ */ +#ifndef __LP64__ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1271,10 +1276,13 @@ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) return _res; } +#endif static PyMethodDef CG_methods[] = { +#ifndef __LP64__ {"CreateCGContextForPort", (PyCFunction)CG_CreateCGContextForPort, 1, PyDoc_STR("(CGrafPtr) -> CGContextRef")}, +#endif {NULL, NULL, 0} }; diff -r -u ./Modules/_curses_panel.c ./Modules/_curses_panel.c index 0acf3fd..1728b59 100644 --- ./Modules/_curses_panel.c +++ ./Modules/_curses_panel.c @@ -56,7 +56,7 @@ typedef struct { PyTypeObject PyCursesPanel_Type; -#define PyCursesPanel_Check(v) ((v)->ob_type == &PyCursesPanel_Type) +#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type) /* Some helper functions. The problem is that there's always a window associated with a panel. To ensure that Python's GC doesn't pull @@ -178,12 +178,13 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo) po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); - return NULL; + po->wo = NULL; + Py_DECREF(po); + return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ static void PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } @@ -338,11 +341,10 @@ PyCursesPanel_GetAttr(PyCursesPanelObject *self, char *name) /* -------------------------------------------------------*/ PyTypeObject PyCursesPanel_Type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "_curses_panel.curses panel", /*tp_name*/ - sizeof(PyCursesPanelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + "_curses_panel.curses panel", /*tp_name*/ + sizeof(PyCursesPanelObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/ 0, /*tp_print*/ @@ -458,7 +460,7 @@ init_curses_panel(void) PyObject *m, *d, *v; /* Initialize object type */ - PyCursesPanel_Type.ob_type = &PyType_Type; + Py_TYPE(&PyCursesPanel_Type) = &PyType_Type; import_curses(); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/000077500000000000000000000000001476513315000246045ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/Python-2.5.4/000077500000000000000000000000001476513315000265315ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/Python-2.5.4--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-svnversion.patch000066400000000000000000000023661476513315000333730ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/Python-2.5.4--- configure.in +++ configure.in @@ -767,7 +767,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in --- Makefile.pre.in +++ Makefile.pre.in @@ -501,7 +501,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ --- Modules/getbuildinfo.c +++ Modules/getbuildinfo.c @@ -48,5 +48,5 @@ static const char svnversion[] = SVNVERSION; if (svnversion[0] != '$') return svnversion; /* it was interpolated, or passed on command line */ - return "exported"; + return "Unversioned directory"; } --- Python/sysmodule.c +++ Python/sysmodule.c @@ -1161,7 +1161,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0 && strcmp(svnversion, "exported") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); 002_darwin_c_source.patch000066400000000000000000000132671476513315000332330ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/Python-2.5.4diff -r -u ./configure ../Python-2.5/configure --- ./configure 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure 2013-07-19 15:27:46.000000000 +0900 @@ -1396,6 +1396,16 @@ _ACEOF +# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable +# them. + +cat >>confdefs.h <<\_ACEOF +#define _DARWIN_C_SOURCE 1 +_ACEOF + + + define_xopen_source=yes # Arguments passed to configure. @@ -3885,11 +3895,110 @@ ;; # is there any other compiler on Darwin besides gcc? Darwin*) - BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" + # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd + # used to be here, but non-Apple gcc doesn't accept them. + if test "${CC}" = gcc + then + { echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +echo -n "checking which compiler should be used... " >&6; } + case "${UNIVERSALSDK}" in + */MacOSX10.4u.sdk) + # Build using 10.4 SDK, force usage of gcc when the + # compiler is gcc, otherwise the user will get very + # confusing error messages when building on OSX 10.6 + CC=gcc-4.0 + CPP=cpp-4.0 + ;; + esac + { echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +echo "$CC" >&6; } + fi + + if test "${enable_universalsdk}"; then - BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + UNIVERSAL_ARCH_FLAGS="" + if test "$UNIVERSAL_ARCHS" = "32-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" + ARCH_RUN_32BIT="" + LIPO_32BIT_FLAGS="" + elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + + elif test "$UNIVERSAL_ARCHS" = "all" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + elif test "$UNIVERSAL_ARCHS" = "intel" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386" + + elif test "$UNIVERSAL_ARCHS" = "3-way" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + else + as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + + fi + + + CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}" + if test "${UNIVERSALSDK}" != "/" + then + CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}" + LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}" + CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}" + fi fi + # Calculate the right deployment target for this build. + # + cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` + if test ${cur_target} '>' 10.2 && \ + test ${cur_target} '<' 10.6 + then + cur_target=10.3 + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "3-way"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "intel"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then + cur_target='10.5' + fi + else + if test `/usr/bin/arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi + fi + CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} + + # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the + # environment with a value that is the same as what we'll use + # in the Makefile to ensure that we'll get the same compiler + # environment during configure and build time. + MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" + export MACOSX_DEPLOYMENT_TARGET + EXPORT_MACOSX_DEPLOYMENT_TARGET='' + ;; OSF*) BASECFLAGS="$BASECFLAGS -mieee" @@ -10851,7 +10960,7 @@ if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -10863,7 +10972,7 @@ else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac diff -r -u ./pyconfig.h.in ../Python-2.5/pyconfig.h.in --- ./pyconfig.h.in 2006-07-30 23:09:47.000000000 +0900 +++ ../Python-2.5/pyconfig.h.in 2013-07-17 23:12:31.000000000 +0900 @@ -912,6 +912,11 @@ /* Define on Irix to enable u_int */ #undef _BSD_TYPES +/* Define on Darwin to activate all library features */ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE +#endif + /* This must be set to 64 on some systems to enable large file support. */ #undef _FILE_OFFSET_BITS pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/Python-2.5.4/003_osx_lp64.patch000066400000000000000000000215441476513315000316200ustar00rootroot00000000000000diff -r -u ./Include/pymactoolbox.h ../Python-2.5/Include/pymactoolbox.h --- ./Include/pymactoolbox.h 2004-11-05 16:02:59.000000000 +0900 +++ ../Python-2.5/Include/pymactoolbox.h 2013-07-17 23:38:51.000000000 +0900 @@ -8,7 +8,10 @@ #endif #include + +#ifndef __LP64__ #include +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +21,11 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* __LP64__ */ + /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,8 +89,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +109,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +169,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +178,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); diff -r -u ./Mac/Modules/res/_Resmodule.c ../Python-2.5/Mac/Modules/res/_Resmodule.c --- ./Mac/Modules/res/_Resmodule.c 2005-07-04 05:59:44.000000000 +0900 +++ ../Python-2.5/Mac/Modules/res/_Resmodule.c 2013-07-17 23:38:51.000000000 +0900 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -1152,6 +1154,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1290,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1331,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1418,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1444,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1541,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* __LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1645,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1656,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1670,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* __LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* __LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, diff -r -u ./Modules/_ctypes/libffi/src/darwin/ffitarget.h ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h --- ./Modules/_ctypes/libffi/src/darwin/ffitarget.h 2006-05-26 06:58:05.000000000 +0900 +++ ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h 2013-07-17 23:38:51.000000000 +0900 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN diff -r -u ./Python/mactoolboxglue.c ../Python-2.5/Python/mactoolboxglue.c --- ./Python/mactoolboxglue.c 2006-07-12 01:44:25.000000000 +0900 +++ ../Python-2.5/Python/mactoolboxglue.c 2013-07-17 23:39:09.000000000 +0900 @@ -106,6 +106,7 @@ } +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +154,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +419,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +432,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/Python-2.5.4/004_osx_libffi.patch000066400000000000000000005661361476513315000323020ustar00rootroot00000000000000diff -r -u ./Modules/_ctypes/libffi_osx/LICENSE ./Modules/_ctypes/libffi_osx/LICENSE new file mode 100644 index 0000000..f591795 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/LICENSE @@ -0,0 +1,20 @@ +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff -r -u ./Modules/_ctypes/libffi_osx/README ./Modules/_ctypes/libffi_osx/README new file mode 100644 index 0000000..1fc2747 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README @@ -0,0 +1,500 @@ +This directory contains the libffi package, which is not part of GCC but +shipped with GCC as convenience. + +Status +====== + +libffi-2.00 has not been released yet! This is a development snapshot! + +libffi-1.20 was released on October 5, 1998. Check the libffi web +page for updates: . + + +What is libffi? +=============== + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. Libffi can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The libffi library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + +Ffi stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +libffi library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above libffi that handles type conversions for values passed +between the two languages. + + +Supported Platforms and Prerequisites +===================================== + +Libffi has been ported to: + + SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) + + Irix 5.3 & 6.2 (System V/o32 & n32) + + Intel x86 - Linux (System V ABI) + + Alpha - Linux and OSF/1 + + m68k - Linux (System V ABI) + + PowerPC - Linux (System V ABI, Darwin, AIX) + + ARM - Linux (System V ABI) + +Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are +that other versions will work. Libffi has also been built and tested +with the SGI compiler tools. + +On PowerPC, the tests failed (see the note below). + +You must use GNU make to build libffi. SGI's make will not work. +Sun's probably won't either. + +If you port libffi to another platform, please let me know! I assume +that some will be easy (x86 NetBSD), and others will be more difficult +(HP). + + +Installing libffi +================= + +[Note: before actually performing any of these installation steps, + you may wish to read the "Platform Specific Notes" below.] + +First you must configure the distribution for your particular +system. Go to the directory you wish to build libffi in and run the +"configure" program found in the root directory of the libffi source +distribution. + +You may want to tell configure where to install the libffi library and +header files. To do that, use the --prefix configure switch. Libffi +will install under /usr/local by default. + +If you want to enable extra run-time debugging checks use the the +--enable-debug configure switch. This is useful when your program dies +mysteriously while using libffi. + +Another useful configure switch is --enable-purify-safety. Using this +will add some extra code which will suppress certain warnings when you +are using Purify with libffi. Only use this switch when using +Purify, as it will slow down the library. + +Configure has many other options. Use "configure --help" to see them all. + +Once configure has finished, type "make". Note that you must be using +GNU make. SGI's make will not work. Sun's probably won't either. +You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. + +To ensure that libffi is working as advertised, type "make test". + +To install the library and header files, type "make install". + + +Using libffi +============ + + The Basics + ---------- + +Libffi assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, +as well as the return type of the function. + +The first thing you must do is create an ffi_cif object that matches +the signature of the function you wish to call. The cif in ffi_cif +stands for Call InterFace. To prepare a call interface object, use the +following function: + +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, ffi_type **atypes); + + CIF is a pointer to the call interface object you wish + to initialize. + + ABI is an enum that specifies the calling convention + to use for the call. FFI_DEFAULT_ABI defaults + to the system's native calling convention. Other + ABI's may be used with care. They are system + specific. + + NARGS is the number of arguments this function accepts. + libffi does not yet support vararg functions. + + RTYPE is a pointer to an ffi_type structure that represents + the return type of the function. Ffi_type objects + describe the types of values. libffi provides + ffi_type objects for many of the native C types: + signed int, unsigned int, signed char, unsigned char, + etc. There is also a pointer ffi_type object and + a void ffi_type. Use &ffi_type_void for functions that + don't return values. + + ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. + If NARGS is 0, this is ignored. + + +ffi_prep_cif will return a status code that you are responsible +for checking. It will be one of the following: + + FFI_OK - All is good. + + FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif + came across is bad. + + +Before making the call, the VALUES vector should be initialized +with pointers to the appropriate argument values. + +To call the function using the initialized ffi_cif, use the +ffi_call function: + +void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); + + CIF is a pointer to the ffi_cif initialized specifically + for this function. + + FN is a pointer to the function you want to call. + + RVALUE is a pointer to a chunk of memory that is to hold the + result of the function call. Currently, it must be + at least one word in size (except for the n32 version + under Irix 6.x, which must be a pointer to an 8 byte + aligned value (a long long). It must also be at least + word aligned (depending on the return type, and the + system's alignment requirements). If RTYPE is + &ffi_type_void, this is ignored. If RVALUE is NULL, + the return value is discarded. + + AVALUES is a vector of void* that point to the memory locations + holding the argument values for a call. + If NARGS is 0, this is ignored. + + +If you are expecting a return value from FN it will have been stored +at RVALUE. + + + + An Example + ---------- + +Here is a trivial example that calls puts() a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_uint; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + + + Aggregate Types + --------------- + +Although libffi has no special support for unions or bit-fields, it is +perfectly happy passing structures back and forth. You must first +describe the structure to libffi by creating a new ffi_type object +for it. Here is the definition of ffi_type: + + typedef struct _ffi_type + { + unsigned size; + short alignment; + short type; + struct _ffi_type **elements; + } ffi_type; + +All structures must have type set to FFI_TYPE_STRUCT. You may set +size and alignment to 0. These will be calculated and reset to the +appropriate values by ffi_prep_cif(). + +elements is a NULL terminated array of pointers to ffi_type objects +that describe the type of the structure elements. These may, in turn, +be structure elements. + +The following example initializes a ffi_type object representing the +tm struct from Linux's time.h: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + + +Platform Specific Notes +======================= + + Intel x86 + --------- + +There are no known problems with the x86 port. + + Sun SPARC - SunOS 4.1.3 & Solaris 2.x + ------------------------------------- + +You must use GNU Make to build libffi on Sun platforms. + + MIPS - Irix 5.3 & 6.x + --------------------- + +Irix 6.2 and better supports three different calling conventions: o32, +n32 and n64. Currently, libffi only supports both o32 and n32 under +Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be +configured for whichever calling convention it was built for. + +By default, the configure script will try to build libffi with the GNU +development tools. To build libffi with the SGI development tools, set +the environment variable CC to either "cc -32" or "cc -n32" before +running configure under Irix 6.x (depending on whether you want an o32 +or n32 library), or just "cc" for Irix 5.3. + +With the n32 calling convention, when returning structures smaller +than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. +Here's one way of forcing this: + + double struct_storage[2]; + my_small_struct *s = (my_small_struct *) struct_storage; + /* Use s for RVALUE */ + +If you don't do this you are liable to get spurious bus errors. + +"long long" values are not supported yet. + +You must use GNU Make to build libffi on SGI platforms. + + ARM - System V ABI + ------------------ + +The ARM port was performed on a NetWinder running ARM Linux ELF +(2.0.31) and gcc 2.8.1. + + + + PowerPC System V ABI + -------------------- + +There are two `System V ABI's which libffi implements for PowerPC. +They differ only in how small structures are returned from functions. + +In the FFI_SYSV version, structures that are 8 bytes or smaller are +returned in registers. This is what GCC does when it is configured +for solaris, and is what the System V ABI I have (dated September +1995) says. + +In the FFI_GCC_SYSV version, all structures are returned the same way: +by passing a pointer as the first argument to the function. This is +what GCC does when it is configured for linux or a generic sysv +target. + +EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a +inconsistency with the SysV ABI: When a procedure is called with many +floating-point arguments, some of them get put on the stack. They are +all supposed to be stored in double-precision format, even if they are +only single-precision, but EGCS stores single-precision arguments as +single-precision anyway. This causes one test to fail (the `many +arguments' test). + + +What's With The Crazy Comments? +=============================== + +You might notice a number of cryptic comments in the code, delimited +by /*@ and @*/. These are annotations read by the program LCLint, a +tool for statically checking C programs. You can read all about it at +. + + +History +======= + +1.20 Oct-5-98 + Raffaele Sena produces ARM port. + +1.19 Oct-5-98 + Fixed x86 long double and long long return support. + m68k bug fixes from Andreas Schwab. + Patch for DU assembler compatibility for the Alpha from Richard + Henderson. + +1.18 Apr-17-98 + Bug fixes and MIPS configuration changes. + +1.17 Feb-24-98 + Bug fixes and m68k port from Andreas Schwab. PowerPC port from + Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + +1.16 Feb-11-98 + Richard Henderson produces Alpha port. + +1.15 Dec-4-97 + Fixed an n32 ABI bug. New libtool, auto* support. + +1.14 May-13-97 + libtool is now used to generate shared and static libraries. + Fixed a minor portability problem reported by Russ McManus + . + +1.13 Dec-2-96 + Added --enable-purify-safety to keep Purify from complaining + about certain low level code. + Sparc fix for calling functions with < 6 args. + Linux x86 a.out fix. + +1.12 Nov-22-96 + Added missing ffi_type_void, needed for supporting void return + types. Fixed test case for non MIPS machines. Cygnus Support + is now Cygnus Solutions. + +1.11 Oct-30-96 + Added notes about GNU make. + +1.10 Oct-29-96 + Added configuration fix for non GNU compilers. + +1.09 Oct-29-96 + Added --enable-debug configure switch. Clean-ups based on LCLint + feedback. ffi_mips.h is always installed. Many configuration + fixes. Fixed ffitest.c for sparc builds. + +1.08 Oct-15-96 + Fixed n32 problem. Many clean-ups. + +1.07 Oct-14-96 + Gordon Irlam rewrites v8.S again. Bug fixes. + +1.06 Oct-14-96 + Gordon Irlam improved the sparc port. + +1.05 Oct-14-96 + Interface changes based on feedback. + +1.04 Oct-11-96 + Sparc port complete (modulo struct passing bug). + +1.03 Oct-10-96 + Passing struct args, and returning struct values works for + all architectures/calling conventions. Expanded tests. + +1.02 Oct-9-96 + Added SGI n32 support. Fixed bugs in both o32 and Linux support. + Added "make test". + +1.01 Oct-8-96 + Fixed float passing bug in mips version. Restructured some + of the code. Builds cleanly with SGI tools. + +1.00 Oct-7-96 + First release. No public announcement. + + +Authors & Credits +================= + +libffi was written by Anthony Green . + +Portions of libffi were derived from Gianni Mariani's free gencall +library for Silicon Graphics machines. + +The closure mechanism was designed and implemented by Kresten Krab +Thorup. + +The Sparc port was derived from code contributed by the fine folks at +Visible Decisions Inc . Further enhancements were +made by Gordon Irlam at Cygnus Solutions . + +The Alpha port was written by Richard Henderson at Cygnus Solutions. + +Andreas Schwab ported libffi to m68k Linux and provided a number of +bug fixes. + +Geoffrey Keating ported libffi to the PowerPC. + +Raffaele Sena ported libffi to the ARM. + +Jesper Skov and Andrew Haley both did more than their fair share of +stepping through the code and tracking down bugs. + +Thanks also to Tom Tromey for bug fixes and configuration help. + +Thanks to Jim Blandy, who provided some useful feedback on the libffi +interface. + +If you have a problem, or have found a bug, please send a note to +green@cygnus.com. diff -r -u ./Modules/_ctypes/libffi_osx/README.pyobjc ./Modules/_ctypes/libffi_osx/README.pyobjc new file mode 100644 index 0000000..405d85f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README.pyobjc @@ -0,0 +1,5 @@ +This directory contains a slightly modified version of libffi, extracted from +the GCC source-tree. + +The only modifications are those that are necessary to compile libffi using +the Apple provided compiler and outside of the GCC source tree. diff -r -u ./Modules/_ctypes/libffi_osx/ffi.c ./Modules/_ctypes/libffi_osx/ffi.c new file mode 100644 index 0000000..bf42093 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/ffi.c @@ -0,0 +1,226 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +/* Round up to FFI_SIZEOF_ARG. */ +#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + +/* Perform machine independent initialization of aggregate type + specifications. */ + +static ffi_status +initialize_aggregate( +/*@out@*/ ffi_type* arg) +{ +/*@-usedef@*/ + + if (arg == NULL || arg->elements == NULL || + arg->size != 0 || arg->alignment != 0) + return FFI_BAD_TYPEDEF; + + ffi_type** ptr = &(arg->elements[0]); + + while ((*ptr) != NULL) + { + if (((*ptr)->size == 0) && (initialize_aggregate(*ptr) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#ifdef POWERPC_DARWIN + int curalign = (*ptr)->alignment; + + if (ptr != &(arg->elements[0])) + { + if (curalign > 4 && curalign != 16) + curalign = 4; + } + + arg->size = ALIGN(arg->size, curalign); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > curalign) ? + arg->alignment : curalign; +#else + arg->size = ALIGN(arg->size, (*ptr)->alignment); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > (*ptr)->alignment) ? + arg->alignment : (*ptr)->alignment; +#endif + + ptr++; + } + + /* Structure size includes tail padding. This is important for + structures that fit in one register on ABIs like the PowerPC64 + Linux ABI that right justify small structs in a register. + It's also needed for nested structure layout, for example + struct A { long a; char b; }; struct B { struct A x; char y; }; + should find y at an offset of 2*sizeof(long) and result in a + total size of 3*sizeof(long). */ + arg->size = ALIGN(arg->size, arg->alignment); + + if (arg->size == 0) + return FFI_BAD_TYPEDEF; + + return FFI_OK; + +/*@=usedef@*/ +} + +#ifndef __CRIS__ +/* The CRIS ABI specifies structure elements to have byte + alignment only, so it completely overrides this functions, + which assumes "natural" alignment and padding. */ + +/* Perform machine independent ffi_cif preparation, then call + machine dependent routine. */ + +#if defined(X86_DARWIN) + +static inline bool +struct_on_stack( + int size) +{ + if (size > 8) + return true; + + /* This is not what the ABI says, but is what is really implemented */ + switch (size) + { + case 1: + case 2: + case 4: + case 8: + return false; + + default: + return true; + } +} + +#endif // defined(X86_DARWIN) + +// Arguments' ffi_type->alignment must be nonzero. +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes) +{ + if (cif == NULL) + return FFI_BAD_TYPEDEF; + + if (abi <= FFI_FIRST_ABI || abi > FFI_DEFAULT_ABI) + return FFI_BAD_ABI; + + unsigned int bytes = 0; + unsigned int i; + ffi_type** ptr; + + cif->abi = abi; + cif->arg_types = atypes; + cif->nargs = nargs; + cif->rtype = rtype; + cif->flags = 0; + + /* Initialize the return type if necessary */ + /*@-usedef@*/ + if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) + return FFI_BAD_TYPEDEF; + /*@=usedef@*/ + + /* Perform a sanity check on the return type */ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT +#ifdef SPARC + && (cif->abi != FFI_V9 || cif->rtype->size > 32) +#endif +#ifdef X86_DARWIN + && (struct_on_stack(cif->rtype->size)) +#endif + ) + bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + /* Initialize any uninitialized aggregate type definitions */ + if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + if ((*ptr)->alignment == 0) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type, do this + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#if defined(X86_DARWIN) + { + int align = (*ptr)->alignment; + + if (align > 4) + align = 4; + + if ((align - 1) & bytes) + bytes = ALIGN(bytes, align); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#elif !defined __x86_64__ && !defined S390 && !defined PA +#ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) + || ((*ptr)->type == FFI_TYPE_LONGDOUBLE + && cif->abi != FFI_V9)) + bytes += sizeof(void*); + else +#endif + { + /* Add any padding if necessary */ + if (((*ptr)->alignment - 1) & bytes) + bytes = ALIGN(bytes, (*ptr)->alignment); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#endif + } + + cif->bytes = bytes; + + /* Perform machine dependent cif processing */ + return ffi_prep_cif_machdep(cif); +} +#endif /* not __CRIS__ */ diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi.h ./Modules/_ctypes/libffi_osx/include/ffi.h new file mode 100644 index 0000000..c104a5c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi.h @@ -0,0 +1,355 @@ +/* -----------------------------------------------------------------*-C-*- + libffi PyOBJC - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and closure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifdef MACOSX +# if defined(__i386__) || defined(__x86_64__) +# define X86_DARWIN +# elif defined(__ppc__) || defined(__ppc64__) +# define POWERPC_DARWIN +# else +# error "Unsupported MacOS X CPU type" +# endif +#else +#error "Unsupported OS type" +#endif + +/* ---- System configuration information --------------------------------- */ + +#include "ffitarget.h" +#include "fficonfig.h" + +#ifndef LIBFFI_ASM + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# endif +#endif + +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +#error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +#error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +#error "int size not supported" +#endif + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != 9223372036854775807 +# error "no 64-bit data type supported" +# endif +#elif LONG_MAX != 9223372036854775807 +#error "long size not supported" +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t + can hold a pointer. */ + +typedef struct _ffi_type { + size_t size; + unsigned short alignment; + unsigned short type; +/*@null@*/ struct _ffi_type** elements; +} ffi_type; + +/* These are defined in types.c */ +extern ffi_type ffi_type_void; +extern ffi_type ffi_type_uint8; +extern ffi_type ffi_type_sint8; +extern ffi_type ffi_type_uint16; +extern ffi_type ffi_type_sint16; +extern ffi_type ffi_type_uint32; +extern ffi_type ffi_type_sint32; +extern ffi_type ffi_type_uint64; +extern ffi_type ffi_type_sint64; +extern ffi_type ffi_type_float; +extern ffi_type ffi_type_double; +extern ffi_type ffi_type_longdouble; +extern ffi_type ffi_type_pointer; + +typedef enum ffi_status { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct ffi_cif { + ffi_abi abi; + unsigned nargs; +/*@dependent@*/ ffi_type** arg_types; +/*@dependent@*/ ffi_type* rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +void +ffi_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_raw_size( + ffi_cif* cif); + +/* This is analogous to the raw API, except it uses Java parameter + packing, even on 64-bit machines. I.e. on 64-bit machines + longs and doubles are followed by an empty 64-bit word. */ +void +ffi_java_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_java_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_java_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_java_raw_size( + ffi_cif* cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +typedef struct ffi_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void* user_data; +} ffi_closure; + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void* user_data); + +void ffi_closure_free(void *); +void *ffi_closure_alloc (size_t size, void **code); + +typedef struct ffi_raw_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + +#if !FFI_NATIVE_RAW_API + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + void (*translate_args)(ffi_cif*,void*,void**,void*); + void* this_closure; +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void* user_data; +} ffi_raw_closure; + +ffi_status +ffi_prep_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +ffi_status +ffi_prep_java_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +#endif // FFI_CLOSURES + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes); + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +#endif // #ifndef LIBFFI_ASM +/* ---- Definitions shared with assembly code ---------------------------- */ + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 + +#ifdef HAVE_LONG_DOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#else +# define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif + +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_POINTER + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef LIBFFI_H diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi_common.h ./Modules/_ctypes/libffi_osx/include/ffi_common.h new file mode 100644 index 0000000..685a358 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi_common.h @@ -0,0 +1,102 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fficonfig.h" + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char* alloca(); +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy((s), (d), (n)) +# endif +#endif + +/*#if defined(FFI_DEBUG) +#include +#endif*/ + +#ifdef FFI_DEBUG +#include + +/*@exits@*/ void +ffi_assert( +/*@temp@*/ char* expr, +/*@temp@*/ char* file, + int line); +void +ffi_stop_here(void); +void +ffi_type_test( +/*@temp@*/ /*@out@*/ ffi_type* a, +/*@temp@*/ char* file, + int line); + +# define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +# define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +# define FFI_ASSERT_VALID_TYPE(x) ffi_type_test(x, __FILE__, __LINE__) +#else +# define FFI_ASSERT(x) +# define FFI_ASSERT_AT(x, f, l) +# define FFI_ASSERT_VALID_TYPE(x) +#endif // #ifdef FFI_DEBUG + +#define ALIGN(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) + +/* Perform machine dependent cif processing */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif); + +/* Extended cif, used in callback from assembly routine */ +typedef struct extended_cif { +/*@dependent@*/ ffi_cif* cif; +/*@dependent@*/ void* rvalue; +/*@dependent@*/ void** avalue; +} extended_cif; + +/* Terse sized type definitions. */ +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +typedef float FLOAT32; + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef FFI_COMMON_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/fficonfig.h ./Modules/_ctypes/libffi_osx/include/fficonfig.h new file mode 100644 index 0000000..2172490 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/fficonfig.h @@ -0,0 +1,150 @@ +/* Manually created fficonfig.h for Darwin on PowerPC or Intel + + This file is manually generated to do away with the need for autoconf and + therefore make it easier to cross-compile and build fat binaries. + + NOTE: This file was added by PyObjC. +*/ + +#ifndef MACOSX +#error "This file is only supported on Mac OS X" +#endif + +#if defined(__i386__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__x86_64__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__ppc__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# if __GNUC__ >= 4 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 +# else +# undef HAVE_LONG_DOUBLE +# define SIZEOF_LONG_DOUBLE 8 +# endif + +#elif defined(__ppc64__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#else +#error "Unknown CPU type" +#endif + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "aw" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Define this is you do not want support for the raw API. */ +#define FFI_NO_RAW_API 1 + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +/* #undef HAVE_MMAP_DEV_ZERO */ + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +/* #undef HAVE_RO_EH_FRAME */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://gcc.gnu.org/bugs.html" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.1" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if you are using Purify and want to suppress spurious messages. */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "2.1-pyobjc" + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) .hidden name +# else +# define FFI_HIDDEN __attribute__((visibility ("hidden"))) +# endif +#else +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) +# else +# define FFI_HIDDEN +# endif +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ffitarget.h ./Modules/_ctypes/libffi_osx/include/ffitarget.h new file mode 100644 index 0000000..faaa30d --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffitarget.h @@ -0,0 +1,13 @@ +/* Dispatch to the right ffitarget file. This file is PyObjC specific; in a + normal build, the build environment copies the file to the right location or + sets up the right include flags. We want to do neither because that would + make building fat binaries harder. +*/ + +#if defined(__i386__) || defined(__x86_64__) +#include "x86-ffitarget.h" +#elif defined(__ppc__) || defined(__ppc64__) +#include "ppc-ffitarget.h" +#else +#error "Unsupported CPU type" +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h new file mode 100644 index 0000000..2318421 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h @@ -0,0 +1,104 @@ +/* -----------------------------------------------------------------*-C-*- + ppc-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if (defined(POWERPC) && defined(__powerpc64__)) || \ + (defined(POWERPC_DARWIN) && defined(__ppc64__)) +#define POWERPC64 +#endif + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef POWERPC + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, +# ifdef POWERPC64 + FFI_DEFAULT_ABI = FFI_LINUX64, +# else + FFI_DEFAULT_ABI = FFI_GCC_SYSV, +# endif +#endif + +#ifdef POWERPC_AIX + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_AIX, +#endif + +#ifdef POWERPC_DARWIN + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_DARWIN, +#endif + +#ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_NATIVE_RAW_API 0 + +/* Needed for FFI_SYSV small structure returns. */ +#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + +#if defined(POWERPC64) /*|| defined(POWERPC_AIX)*/ +# define FFI_TRAMPOLINE_SIZE 48 +#elif defined(POWERPC_AIX) +# define FFI_TRAMPOLINE_SIZE 24 +#else +# define FFI_TRAMPOLINE_SIZE 40 +#endif + +#ifndef LIBFFI_ASM +# if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) +typedef struct ffi_aix_trampoline_struct { + void* code_pointer; /* Pointer to ffi_closure_ASM */ + void* toc; /* TOC */ + void* static_chain; /* Pointer to closure */ +} ffi_aix_trampoline_struct; +# endif +#endif // #ifndef LIBFFI_ASM + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h new file mode 100644 index 0000000..55c2b6c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h @@ -0,0 +1,88 @@ +/* -----------------------------------------------------------------*-C-*- + x86-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if defined(X86_64) && defined(__i386__) +# undef X86_64 +# define X86 +#endif + +#if defined(__x86_64__) +# ifndef X86_64 +# define X86_64 +# endif +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + + /* ---- Intel x86 Win32 ---------- */ +#ifdef X86_WIN32 + FFI_SYSV, + FFI_STDCALL, + /* TODO: Add fastcall support for the sake of completeness */ + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + /* ---- Intel x86 and AMD x86-64 - */ +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) + FFI_SYSV, + FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ +# ifdef __i386__ + FFI_DEFAULT_ABI = FFI_SYSV, +# else + FFI_DEFAULT_ABI = FFI_UNIX64, +# endif +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 + +#if defined(X86_64) || (defined(__x86_64__) && defined(X86_DARWIN)) +# define FFI_TRAMPOLINE_SIZE 24 +# define FFI_NATIVE_RAW_API 0 +#else +# define FFI_TRAMPOLINE_SIZE 10 +# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S new file mode 100644 index 0000000..f143dbd --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S @@ -0,0 +1,365 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc-darwin.S - Copyright (c) 2000 John Hornkvist + Copyright (c) 2004 Free Software Foundation, Inc. + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include +#include +#include + +.text + .align 2 +.globl _ffi_prep_args + +.text + .align 2 +.globl _ffi_call_DARWIN + +.text + .align 2 +_ffi_call_DARWIN: +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved. */ + +LFB1: + /* Save the old stack pointer as AP. */ + mr r8,r1 + +LCFI0: +#if defined(__ppc64__) + /* Allocate the stack space we need. + r4 (size of input data) + 48 bytes (linkage area) + 40 bytes (saved registers) + 8 bytes (extra FPR) + r4 + 96 bytes total + */ + + addi r4,r4,-96 // Add our overhead. + li r0,-32 // Align to 32 bytes. + and r4,r4,r0 +#endif + stgux r1,r1,r4 // Grow the stack. + mflr r9 + + /* Save registers we use. */ +#if defined(__ppc64__) + std r27,-40(r8) +#endif + stg r28,MODE_CHOICE(-16,-32)(r8) + stg r29,MODE_CHOICE(-12,-24)(r8) + stg r30,MODE_CHOICE(-8,-16)(r8) + stg r31,MODE_CHOICE(-4,-8)(r8) + stg r9,SF_RETURN(r8) /* return address */ +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + stg r2,MODE_CHOICE(20,40)(r1) +#endif + +LCFI1: +#if defined(__ppc64__) + mr r27,r3 // our extended_cif +#endif + /* Save arguments over call. */ + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ + +LCFI2: + /* Call ffi_prep_args. */ + mr r4,r1 + li r9,0 + mtctr r12 /* r12 holds address of _ffi_prep_args. */ + bctrl +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + lg r2,MODE_CHOICE(20,40)(r1) +#endif + + /* Now do the call. + Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40,r31 + + /* Load all those argument registers. + We have set up a nice stack frame, just load it into registers. */ + lg r3,SF_ARG1(r1) + lg r4,SF_ARG2(r1) + lg r5,SF_ARG3(r1) + lg r6,SF_ARG4(r1) + nop + lg r7,SF_ARG5(r1) + lg r8,SF_ARG6(r1) + lg r9,SF_ARG7(r1) + lg r10,SF_ARG8(r1) + + /* Load all the FP registers. */ + bf 6,L2 /* No floats to load. */ +#if defined(__ppc64__) + lfd f1,MODE_CHOICE(-16,-40)-(14*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(11*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(10*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(7*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(6*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(3*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(2*8)(r28) + lfd f14,MODE_CHOICE(-16,-40)-(1*8)(r28) +#elif defined(__ppc__) + lfd f1,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(11*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(10*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(7*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(6*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(3*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(2*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(1*8)(r28) +#else +#error undefined architecture +#endif + +L2: + mr r12,r29 // Put the target address in r12 as specified. + mtctr r12 // Get the address to call into CTR. + nop + nop + bctrl // Make the call. + + // Deal with the return value. +#if defined(__ppc64__) + mtcrf 0x3,r31 // flags in cr6 and cr7 + bt 27,L(st_return_value) +#elif defined(__ppc__) + mtcrf 0x1,r31 // flags in cr7 +#else +#error undefined architecture +#endif + + bt 30,L(done_return_value) + bt 29,L(fp_return_value) + stg r3,0(r30) +#if defined(__ppc__) + bf 28,L(done_return_value) // Store the second long if necessary. + stg r4,4(r30) +#endif + // Fall through + +L(done_return_value): + lg r1,0(r1) // Restore stack pointer. + // Restore the registers we used. + lg r9,SF_RETURN(r1) // return address + lg r31,MODE_CHOICE(-4,-8)(r1) + mtlr r9 + lg r30,MODE_CHOICE(-8,-16)(r1) + lg r29,MODE_CHOICE(-12,-24)(r1) + lg r28,MODE_CHOICE(-16,-32)(r1) +#if defined(__ppc64__) + ld r27,-40(r1) +#endif + blr + +#if defined(__ppc64__) +L(st_return_value): + // Grow the stack enough to fit the registers. Leave room for 8 args + // to trample the 1st 8 slots in param area. + stgu r1,-SF_ROUND(280)(r1) // 64 + 104 + 48 + 64 + + // Store GPRs + std r3,SF_ARG9(r1) + std r4,SF_ARG10(r1) + std r5,SF_ARG11(r1) + std r6,SF_ARG12(r1) + nop + std r7,SF_ARG13(r1) + std r8,SF_ARG14(r1) + std r9,SF_ARG15(r1) + std r10,SF_ARG16(r1) + + // Store FPRs + nop + bf 26,L(call_struct_to_ram_form) + stfd f1,SF_ARG17(r1) + stfd f2,SF_ARG18(r1) + stfd f3,SF_ARG19(r1) + stfd f4,SF_ARG20(r1) + nop + stfd f5,SF_ARG21(r1) + stfd f6,SF_ARG22(r1) + stfd f7,SF_ARG23(r1) + stfd f8,SF_ARG24(r1) + nop + stfd f9,SF_ARG25(r1) + stfd f10,SF_ARG26(r1) + stfd f11,SF_ARG27(r1) + stfd f12,SF_ARG28(r1) + nop + stfd f13,SF_ARG29(r1) + +L(call_struct_to_ram_form): + ld r3,0(r27) // extended_cif->cif* + ld r3,16(r3) // ffi_cif->rtype* + addi r4,r1,SF_ARG9 // stored GPRs + addi r6,r1,SF_ARG17 // stored FPRs + li r5,0 // GPR size ptr (NULL) + li r7,0 // FPR size ptr (NULL) + li r8,0 // FPR count ptr (NULL) + li r10,0 // struct offset (NULL) + mr r9,r30 // return area + bl Lffi64_struct_to_ram_form$stub + lg r1,0(r1) // Restore stack pointer. + b L(done_return_value) +#endif + +L(fp_return_value): + /* Do we have long double to store? */ + bf 31,L(fd_return_value) + stfd f1,0(r30) + stfd f2,8(r30) + b L(done_return_value) + +L(fd_return_value): + /* Do we have double to store? */ + bf 28,L(float_return_value) + stfd f1,0(r30) + b L(done_return_value) + +L(float_return_value): + /* We only have a float to store. */ + stfs f1,0(r30) + b L(done_return_value) + +LFE1: +/* END(_ffi_call_DARWIN) */ + +/* Provide a null definition of _ffi_call_AIX. */ +.text + .align 2 +.globl _ffi_call_AIX +.text + .align 2 +_ffi_call_AIX: + blr +/* END(_ffi_call_AIX) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_call_DARWIN.eh +_ffi_call_DARWIN.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align LOG2_GPR_BYTES +LEFDE1: + +#if defined(__ppc64__) +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_ram_form$stub: + .indirect_symbol _ffi64_struct_to_ram_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_ram_form + +LO$ffi64_struct_to_ram_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_ram_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_ram_form + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ +#endif // __ppc__ || __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h new file mode 100644 index 0000000..cf4bd50 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h @@ -0,0 +1,85 @@ +/* ----------------------------------------------------------------------- + ppc-darwin.h - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define L(x) x + +#define SF_ARG9 MODE_CHOICE(56,112) +#define SF_ARG10 MODE_CHOICE(60,120) +#define SF_ARG11 MODE_CHOICE(64,128) +#define SF_ARG12 MODE_CHOICE(68,136) +#define SF_ARG13 MODE_CHOICE(72,144) +#define SF_ARG14 MODE_CHOICE(76,152) +#define SF_ARG15 MODE_CHOICE(80,160) +#define SF_ARG16 MODE_CHOICE(84,168) +#define SF_ARG17 MODE_CHOICE(88,176) +#define SF_ARG18 MODE_CHOICE(92,184) +#define SF_ARG19 MODE_CHOICE(96,192) +#define SF_ARG20 MODE_CHOICE(100,200) +#define SF_ARG21 MODE_CHOICE(104,208) +#define SF_ARG22 MODE_CHOICE(108,216) +#define SF_ARG23 MODE_CHOICE(112,224) +#define SF_ARG24 MODE_CHOICE(116,232) +#define SF_ARG25 MODE_CHOICE(120,240) +#define SF_ARG26 MODE_CHOICE(124,248) +#define SF_ARG27 MODE_CHOICE(128,256) +#define SF_ARG28 MODE_CHOICE(132,264) +#define SF_ARG29 MODE_CHOICE(136,272) + +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 +#define NUM_FPR_ARG_REGISTERS 13 + +#define FFI_TYPE_1_BYTE(x) ((x) == FFI_TYPE_UINT8 || (x) == FFI_TYPE_SINT8) +#define FFI_TYPE_2_BYTE(x) ((x) == FFI_TYPE_UINT16 || (x) == FFI_TYPE_SINT16) +#define FFI_TYPE_4_BYTE(x) \ + ((x) == FFI_TYPE_UINT32 || (x) == FFI_TYPE_SINT32 ||\ + (x) == FFI_TYPE_INT || (x) == FFI_TYPE_FLOAT) + +#if !defined(LIBFFI_ASM) + +enum { + FLAG_RETURNS_NOTHING = 1 << (31 - 30), // cr7 + FLAG_RETURNS_FP = 1 << (31 - 29), + FLAG_RETURNS_64BITS = 1 << (31 - 28), + FLAG_RETURNS_128BITS = 1 << (31 - 31), + + FLAG_RETURNS_STRUCT = 1 << (31 - 27), // cr6 + FLAG_STRUCT_CONTAINS_FP = 1 << (31 - 26), + + FLAG_ARG_NEEDS_COPY = 1 << (31 - 7), + FLAG_FP_ARGUMENTS = 1 << (31 - 6), // cr1.eq; specified by ABI + FLAG_4_GPR_ARGUMENTS = 1 << (31 - 5), + FLAG_RETVAL_REFERENCE = 1 << (31 - 4) +}; + +#if defined(__ppc64__) +void ffi64_struct_to_ram_form(const ffi_type*, const char*, unsigned int*, + const char*, unsigned int*, unsigned int*, char*, unsigned int*); +void ffi64_struct_to_reg_form(const ffi_type*, const char*, unsigned int*, + unsigned int*, char*, unsigned int*, char*, unsigned int*); +bool ffi64_stret_needs_ptr(const ffi_type* inType, + unsigned short*, unsigned short*); +#endif + +#endif // !defined(LIBFFI_ASM) \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S new file mode 100644 index 0000000..c3d30c2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S @@ -0,0 +1,308 @@ +#if defined(__ppc__) + +/* ----------------------------------------------------------------------- + ppc-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 // Save return address + stg r0,SF_RETURN(r1) + +LCFI0: + /* 24/48 bytes (Linkage Area) + 32/64 bytes (outgoing parameter area, always reserved) + 104 bytes (13*8 from FPR) + 16/32 bytes (result) + 176/232 total bytes */ + + /* skip over caller save area and keep stack aligned to 16/32. */ + stgu r1,-SF_ROUND(176)(r1) + +LCFI1: + /* We want to build up an area for the parameters passed + in registers. (both floating point and integer) */ + + /* 176/256 bytes (callee stack frame aligned to 16/32) + 24/48 bytes (caller linkage area) + 200/304 (start of caller parameter area aligned to 4/8) + */ + + /* Save GPRs 3 - 10 (aligned to 4/8) + in the parents outgoing area. */ + stg r3,200(r1) + stg r4,204(r1) + stg r5,208(r1) + stg r6,212(r1) + stg r7,216(r1) + stg r8,220(r1) + stg r9,224(r1) + stg r10,228(r1) + + /* Save FPRs 1 - 13. (aligned to 8) */ + stfd f1,56(r1) + stfd f2,64(r1) + stfd f3,72(r1) + stfd f4,80(r1) + stfd f5,88(r1) + stfd f6,96(r1) + stfd f7,104(r1) + stfd f8,112(r1) + stfd f9,120(r1) + stfd f10,128(r1) + stfd f11,136(r1) + stfd f12,144(r1) + stfd f13,152(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,160 // result storage + addi r5,r1,200 // saved GPRs + addi r6,r1,56 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + /* Now r3 contains the return type. Use it to look up in a table + so we know how to deal with each type. */ + addi r5,r1,160 // Copy result storage pointer. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: +/* Each of the ret_typeX code fragments has to be exactly 16 bytes long + (4 instructions). For cache effectiveness we align to a 16 byte boundary + first. */ + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +/* case FFI_TYPE_VOID */ +Lret_type0: + b Lfinish + nop + nop + nop + +/* case FFI_TYPE_INT */ +Lret_type1: + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_FLOAT */ +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_DOUBLE */ +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_LONGDOUBLE */ +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +/* case FFI_TYPE_UINT8 */ +Lret_type5: + lbz r3,3(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT8 */ +Lret_type6: + lbz r3,3(r5) + extsb r3,r3 + b Lfinish + nop + +/* case FFI_TYPE_UINT16 */ +Lret_type7: + lhz r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT16 */ +Lret_type8: + lha r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT32 */ +Lret_type9: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT32 */ +Lret_type10: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT64 */ +Lret_type11: + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_SINT64 */ +Lret_type12: // same as Lret_type11 + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_STRUCT */ +Lret_type13: + b Lfinish + nop + nop + nop + +/* End 16-byte aligned cases */ +/* case FFI_TYPE_POINTER */ +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + // fall through + +/* case done */ +Lfinish: + addi r1,r1,SF_ROUND(176) // Restore stack pointer. + lg r0,SF_RETURN(r1) // Restore return address. + mtlr r0 // Restore link register. + blr + +/* END(ffi_closure_ASM) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + + +#endif // __ppc__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c new file mode 100644 index 0000000..8953d5f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c @@ -0,0 +1,1776 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1998 Geoffrey Keating + + PowerPC Foreign Function Interface + + Darwin ABI support (c) 2001 John Hornkvist + AIX ABI support (c) 2002 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include +#include +#include +#include + +#if 0 +#if defined(POWERPC_DARWIN) +#include // for sys_icache_invalidate() +#endif + +#else + +#pragma weak sys_icache_invalidate +extern void sys_icache_invalidate(void *start, size_t len); + +#endif + + +extern void ffi_closure_ASM(void); + +// The layout of a function descriptor. A C function pointer really +// points to one of these. +typedef struct aix_fd_struct { + void* code_pointer; + void* toc; +} aix_fd; + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments. + + The stack layout we want looks like this: + + | Return address from ffi_call_DARWIN | higher addresses + |--------------------------------------------| + | Previous backchain pointer 4/8 | stack pointer here + |--------------------------------------------|-\ <<< on entry to + | Saved r28-r31 (4/8)*4 | | ffi_call_DARWIN + |--------------------------------------------| | + | Parameters (at least 8*(4/8)=32/64) | | (176) +112 - +288 + |--------------------------------------------| | + | Space for GPR2 4/8 | | + |--------------------------------------------| | stack | + | Reserved (4/8)*2 | | grows | + |--------------------------------------------| | down V + | Space for callee's LR 4/8 | | + |--------------------------------------------| | lower addresses + | Saved CR 4/8 | | + |--------------------------------------------| | stack pointer here + | Current backchain pointer 4/8 | | during + |--------------------------------------------|-/ <<< ffi_call_DARWIN + + Note: ppc64 CR is saved in the low word of a long on the stack. +*/ + +/*@-exportheader@*/ +void +ffi_prep_args( + extended_cif* inEcif, + unsigned *const stack) +/*@=exportheader@*/ +{ + /* Copy the ecif to a local var so we can trample the arg. + BC note: test this with GP later for possible problems... */ + volatile extended_cif* ecif = inEcif; + + const unsigned bytes = ecif->cif->bytes; + const unsigned flags = ecif->cif->flags; + + /* Cast the stack arg from int* to long*. sizeof(long) == 4 in 32-bit mode + and 8 in 64-bit mode. */ + unsigned long *const longStack = (unsigned long *const)stack; + + /* 'stacktop' points at the previous backchain pointer. */ +#if defined(__ppc64__) + // In ppc-darwin.s, an extra 96 bytes is reserved for the linkage area, + // saved registers, and an extra FPR. + unsigned long *const stacktop = + (unsigned long *)(unsigned long)((char*)longStack + bytes + 96); +#elif defined(__ppc__) + unsigned long *const stacktop = longStack + (bytes / sizeof(long)); +#else +#error undefined architecture +#endif + + /* 'fpr_base' points at the space for fpr1, and grows upwards as + we use FPR registers. */ + double* fpr_base = (double*)(stacktop - ASM_NEEDS_REGISTERS) - + NUM_FPR_ARG_REGISTERS; + +#if defined(__ppc64__) + // 64-bit saves an extra register, and uses an extra FPR. Knock fpr_base + // down a couple pegs. + fpr_base -= 2; +#endif + + unsigned int fparg_count = 0; + + /* 'next_arg' grows up as we put parameters in it. */ + unsigned long* next_arg = longStack + 6; /* 6 reserved positions. */ + + int i; + double double_tmp; + void** p_argv = ecif->avalue; + unsigned long gprvalue; + ffi_type** ptr = ecif->cif->arg_types; + + /* Check that everything starts aligned properly. */ + FFI_ASSERT(stack == SF_ROUND(stack)); + FFI_ASSERT(stacktop == SF_ROUND(stacktop)); + FFI_ASSERT(bytes == SF_ROUND(bytes)); + + /* Deal with return values that are actually pass-by-reference. + Rule: + Return values are referenced by r3, so r4 is the first parameter. */ + + if (flags & FLAG_RETVAL_REFERENCE) + *next_arg++ = (unsigned long)(char*)ecif->rvalue; + + /* Now for the arguments. */ + for (i = ecif->cif->nargs; i > 0; i--, ptr++, p_argv++) + { + switch ((*ptr)->type) + { + /* If a floating-point parameter appears before all of the general- + purpose registers are filled, the corresponding GPRs that match + the size of the floating-point parameter are shadowed for the + benefit of vararg and pre-ANSI functions. */ + case FFI_TYPE_FLOAT: + double_tmp = *(float*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg++; + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + + case FFI_TYPE_DOUBLE: + double_tmp = *(double*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg += MODE_CHOICE(2,1); + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double*)fpr_base = *(long double*)*p_argv; +#elif defined(__ppc__) + if (fparg_count < NUM_FPR_ARG_REGISTERS - 1) + *(long double*)fpr_base = *(long double*)*p_argv; + else if (fparg_count == NUM_FPR_ARG_REGISTERS - 1) + *(double*)fpr_base = *(double*)*p_argv; +#else +#error undefined architecture +#endif + + *(long double*)next_arg = *(long double*)*p_argv; + fparg_count += 2; + fpr_base += 2; + next_arg += MODE_CHOICE(4,2); + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: +#if defined(__ppc64__) + gprvalue = *(long long*)*p_argv; + goto putgpr; +#elif defined(__ppc__) + *(long long*)next_arg = *(long long*)*p_argv; + next_arg += 2; + break; +#else +#error undefined architecture +#endif + + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT8: + gprvalue = *(unsigned char*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT8: + gprvalue = *(signed char*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT16: + gprvalue = *(unsigned short*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT16: + gprvalue = *(signed short*)*p_argv; + goto putgpr; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + + ffi64_struct_to_reg_form(*ptr, (char*)*p_argv, NULL, &fparg_count, + (char*)next_arg, &gprSize, (char*)fpr_base, &fprSize); + next_arg += gprSize / sizeof(long); + fpr_base += fprSize / sizeof(double); + +#elif defined(__ppc__) + char* dest_cpy = (char*)next_arg; + + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. + Structures with 3 byte in size are padded upwards. */ + unsigned size_al = (*ptr)->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + + if (ecif->cif->abi == FFI_DARWIN) + { + if (size_al < 3) + dest_cpy += 4 - size_al; + } + + memcpy((char*)dest_cpy, (char*)*p_argv, size_al); + next_arg += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + gprvalue = *(unsigned*)*p_argv; + +putgpr: + *next_arg++ = gprvalue; + break; + + default: + break; + } + } + + /* Check that we didn't overrun the stack... */ + //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); + //FFI_ASSERT((unsigned *)fpr_base + // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); + //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); +} + +#if defined(__ppc64__) + +bool +ffi64_struct_contains_fp( + const ffi_type* inType) +{ + bool containsFP = false; + unsigned int i; + + for (i = 0; inType->elements[i] != NULL && !containsFP; i++) + { + if (inType->elements[i]->type == FFI_TYPE_FLOAT || + inType->elements[i]->type == FFI_TYPE_DOUBLE || + inType->elements[i]->type == FFI_TYPE_LONGDOUBLE) + containsFP = true; + else if (inType->elements[i]->type == FFI_TYPE_STRUCT) + containsFP = ffi64_struct_contains_fp(inType->elements[i]); + } + + return containsFP; +} + +#endif // defined(__ppc64__) + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + /* All this is for the DARWIN ABI. */ + int i; + ffi_type** ptr; + int intarg_count = 0; + int fparg_count = 0; + unsigned int flags = 0; + unsigned int size_al = 0; + + /* All the machine-independent calculation of cif->bytes will be wrong. + Redo the calculation for DARWIN. */ + + /* Space for the frame pointer, callee's LR, CR, etc, and for + the asm's temp regs. */ + unsigned int bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long); + + /* Return value handling. The rules are as follows: + - 32-bit (or less) integer values are returned in gpr3; + - Structures of size <= 4 bytes also returned in gpr3; + - 64-bit integer values and structures between 5 and 8 bytes are + returned in gpr3 and gpr4; + - Single/double FP values are returned in fpr1; + - Long double FP (if not equivalent to double) values are returned in + fpr1 and fpr2; + - Larger structures values are allocated space and a pointer is passed + as the first argument. */ + switch (cif->rtype->type) + { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_DOUBLE: + flags |= FLAG_RETURNS_64BITS; + /* Fall through. */ + case FFI_TYPE_FLOAT: + flags |= FLAG_RETURNS_FP; + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + flags |= FLAG_RETURNS_64BITS; + break; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + + if (ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) + { + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + } + else + { + flags |= FLAG_RETURNS_STRUCT; + + if (ffi64_struct_contains_fp(cif->rtype)) + flags |= FLAG_STRUCT_CONTAINS_FP; + } + +#elif defined(__ppc__) + + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_VOID: + flags |= FLAG_RETURNS_NOTHING; + break; + + default: + /* Returns 32-bit integer, or similar. Nothing to do here. */ + break; + } + + /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the + first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest + goes on the stack. Structures are passed as a pointer to a copy of + the structure. Stuff on the stack needs to keep proper alignment. */ + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + switch ((*ptr)->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + fparg_count++; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + if (fparg_count > NUM_FPR_ARG_REGISTERS + && intarg_count % 2 != 0) + intarg_count++; + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + fparg_count += 2; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + + if ( +#if defined(__ppc64__) + fparg_count > NUM_FPR_ARG_REGISTERS + 1 +#elif defined(__ppc__) + fparg_count > NUM_FPR_ARG_REGISTERS +#else +#error undefined architecture +#endif + && intarg_count % 2 != 0) + intarg_count++; + + intarg_count += 2; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + /* 'long long' arguments are passed as two words, but + either both words must fit in registers or both go + on the stack. If they go on the stack, they must + be 8-byte-aligned. */ + if (intarg_count == NUM_GPR_ARG_REGISTERS - 1 + || (intarg_count >= NUM_GPR_ARG_REGISTERS + && intarg_count % 2 != 0)) + intarg_count++; + + intarg_count += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_STRUCT: + size_al = (*ptr)->size; + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + +#if defined(__ppc64__) + // Look for FP struct members. + unsigned int j; + + for (j = 0; (*ptr)->elements[j] != NULL; j++) + { + if ((*ptr)->elements[j]->type == FFI_TYPE_FLOAT || + (*ptr)->elements[j]->type == FFI_TYPE_DOUBLE) + { + fparg_count++; + + if (fparg_count > NUM_FPR_ARG_REGISTERS) + intarg_count++; + } + else if ((*ptr)->elements[j]->type == FFI_TYPE_LONGDOUBLE) + { + fparg_count += 2; + + if (fparg_count > NUM_FPR_ARG_REGISTERS + 1) + intarg_count += 2; + } + else + intarg_count++; + } +#elif defined(__ppc__) + intarg_count += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + + break; + + default: + /* Everything else is passed as a 4/8-byte word in a GPR, either + the object itself or a pointer to it. */ + intarg_count++; + break; + } + } + + /* Space for the FPR registers, if needed. */ + if (fparg_count != 0) + { + flags |= FLAG_FP_ARGUMENTS; +#if defined(__ppc64__) + bytes += (NUM_FPR_ARG_REGISTERS + 1) * sizeof(double); +#elif defined(__ppc__) + bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); +#else +#error undefined architecture +#endif + } + + /* Stack space. */ +#if defined(__ppc64__) + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#elif defined(__ppc__) + if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#else +#error undefined architecture +#endif + else + bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); + + /* The stack space allocated needs to be a multiple of 16/32 bytes. */ + bytes = SF_ROUND(bytes); + + cif->flags = flags; + cif->bytes = bytes; + + return FFI_OK; +} + +/*@-declundef@*/ +/*@-exportheader@*/ +extern void +ffi_call_AIX( +/*@out@*/ extended_cif*, + unsigned, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); + +extern void +ffi_call_DARWIN( +/*@out@*/ extended_cif*, + unsigned long, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); +/*@=declundef@*/ +/*@=exportheader@*/ + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return + value address then we need to make one. */ + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + /*@-sysunrecog@*/ + ecif.rvalue = alloca(cif->rtype->size); + /*@=sysunrecog@*/ + } + else + ecif.rvalue = rvalue; + + switch (cif->abi) + { + case FFI_AIX: + /*@-usedef@*/ + ffi_call_AIX(&ecif, -cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + case FFI_DARWIN: + /*@-usedef@*/ + ffi_call_DARWIN(&ecif, -(long)cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + default: + FFI_ASSERT(0); + break; + } +} + +/* here I'd like to add the stack frame layout we use in darwin_closure.S + and aix_clsoure.S + + SP previous -> +---------------------------------------+ <--- child frame + | back chain to caller 4 | + +---------------------------------------+ 4 + | saved CR 4 | + +---------------------------------------+ 8 + | saved LR 4 | + +---------------------------------------+ 12 + | reserved for compilers 4 | + +---------------------------------------+ 16 + | reserved for binders 4 | + +---------------------------------------+ 20 + | saved TOC pointer 4 | + +---------------------------------------+ 24 + | always reserved 8*4=32 (previous GPRs)| + | according to the linkage convention | + | from AIX | + +---------------------------------------+ 56 + | our FPR area 13*8=104 | + | f1 | + | . | + | f13 | + +---------------------------------------+ 160 + | result area 8 | + +---------------------------------------+ 168 + | alignement to the next multiple of 16 | +SP current --> +---------------------------------------+ 176 <- parent frame + | back chain to caller 4 | + +---------------------------------------+ 180 + | saved CR 4 | + +---------------------------------------+ 184 + | saved LR 4 | + +---------------------------------------+ 188 + | reserved for compilers 4 | + +---------------------------------------+ 192 + | reserved for binders 4 | + +---------------------------------------+ 196 + | saved TOC pointer 4 | + +---------------------------------------+ 200 + | always reserved 8*4=32 we store our | + | GPRs here | + | r3 | + | . | + | r10 | + +---------------------------------------+ 232 + | overflow part | + +---------------------------------------+ xxx + | ???? | + +---------------------------------------+ xxx +*/ + +#if !defined(POWERPC_DARWIN) + +#define MIN_LINE_SIZE 32 + +static void +flush_icache( + char* addr) +{ +#ifndef _AIX + __asm__ volatile ( + "dcbf 0,%0\n" + "sync\n" + "icbi 0,%0\n" + "sync\n" + "isync" + : : "r" (addr) : "memory"); +#endif +} + +static void +flush_range( + char* addr, + int size) +{ + int i; + + for (i = 0; i < size; i += MIN_LINE_SIZE) + flush_icache(addr + i); + + flush_icache(addr + size - 1); +} + +#endif // !defined(POWERPC_DARWIN) + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + switch (cif->abi) + { + case FFI_DARWIN: + { + FFI_ASSERT (cif->abi == FFI_DARWIN); + + unsigned int* tramp = (unsigned int*)&closure->tramp[0]; + +#if defined(__ppc64__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0xe98b0018; // ld r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0xe96b0020; // ld r11,32(r11) + tramp[7] = 0x4e800420; // bctr + *(unsigned long*)&tramp[8] = (unsigned long)ffi_closure_ASM; + *(unsigned long*)&tramp[10] = (unsigned long)closure; +#elif defined(__ppc__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0x818b0018; // lwz r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0x816b001c; // lwz r11,28(r11) + tramp[7] = 0x4e800420; // bctr + tramp[8] = (unsigned long)ffi_closure_ASM; + tramp[9] = (unsigned long)closure; +#else +#error undefined architecture +#endif + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + // Flush the icache. Only necessary on Darwin. +#if defined(POWERPC_DARWIN) + sys_icache_invalidate(closure->tramp, FFI_TRAMPOLINE_SIZE); +#else + flush_range(closure->tramp, FFI_TRAMPOLINE_SIZE); +#endif + + break; + } + + case FFI_AIX: + { + FFI_ASSERT (cif->abi == FFI_AIX); + + ffi_aix_trampoline_struct* tramp_aix = + (ffi_aix_trampoline_struct*)(closure->tramp); + aix_fd* fd = (aix_fd*)(void*)ffi_closure_ASM; + + tramp_aix->code_pointer = fd->code_pointer; + tramp_aix->toc = fd->toc; + tramp_aix->static_chain = closure; + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + break; + } + + default: + return FFI_BAD_ABI; + } + + return FFI_OK; +} + +#if defined(__ppc__) + typedef double ldbits[2]; + + typedef union + { + ldbits lb; + long double ld; + } ldu; +#endif + +typedef union +{ + float f; + double d; +} ffi_dblfl; + +/* The trampoline invokes ffi_closure_ASM, and on entry, r11 holds the + address of the closure. After storing the registers that could possibly + contain parameters to be passed into the stack frame and setting up space + for a return value, ffi_closure_ASM invokes the following helper function + to do most of the work. */ +int +ffi_closure_helper_DARWIN( + ffi_closure* closure, + void* rvalue, + unsigned long* pgr, + ffi_dblfl* pfr) +{ + /* rvalue is the pointer to space for return value in closure assembly + pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM + pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ + +#if defined(__ppc__) + ldu temp_ld; +#endif + + double temp; + unsigned int i; + unsigned int nf = 0; /* number of FPRs already used. */ + unsigned int ng = 0; /* number of GPRs already used. */ + ffi_cif* cif = closure->cif; + long avn = cif->nargs; + void** avalue = alloca(cif->nargs * sizeof(void*)); + ffi_type** arg_types = cif->arg_types; + + /* Copy the caller's structure return value address so that the closure + returns the data directly to the caller. */ +#if defined(__ppc64__) + if (cif->rtype->type == FFI_TYPE_STRUCT && + ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) +#elif defined(__ppc__) + if (cif->rtype->type == FFI_TYPE_STRUCT) +#else +#error undefined architecture +#endif + { + rvalue = (void*)*pgr; + pgr++; + ng++; + } + + /* Grab the addresses of the arguments from the stack frame. */ + for (i = 0; i < avn; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = (char*)pgr + MODE_CHOICE(3,7); + ng++; + pgr++; + break; + + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = (char*)pgr + MODE_CHOICE(2,6); + ng++; + pgr++; + break; + +#if defined(__ppc__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + avalue[i] = (char*)pgr + MODE_CHOICE(0,4); + ng++; + pgr++; + + break; + + case FFI_TYPE_STRUCT: + if (cif->abi == FFI_DARWIN) + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + unsigned int savedFPRSize = fprSize; + + avalue[i] = alloca(arg_types[i]->size); + ffi64_struct_to_ram_form(arg_types[i], (const char*)pgr, + &gprSize, (const char*)pfr, &fprSize, &nf, avalue[i], NULL); + + ng += gprSize / sizeof(long); + pgr += gprSize / sizeof(long); + pfr += (fprSize - savedFPRSize) / sizeof(double); + +#elif defined(__ppc__) + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. */ + unsigned int size_al = size_al = arg_types[i]->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN(arg_types[i]->size, 8); + + if (size_al < 3) + avalue[i] = (void*)pgr + MODE_CHOICE(4,8) - size_al; + else + avalue[i] = (void*)pgr; + + ng += (size_al + 3) / sizeof(long); + pgr += (size_al + 3) / sizeof(long); +#else +#error undefined architecture +#endif + } + + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + /* Long long ints are passed in 1 or 2 GPRs. */ + avalue[i] = pgr; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_FLOAT: + /* A float value consumes a GPR. + There are 13 64-bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + temp = pfr->d; + pfr->f = (float)temp; + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng++; + pgr++; + break; + + case FFI_TYPE_DOUBLE: + /* A double value consumes one or two GPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr += 2; + } +#elif defined(__ppc__) + /* A long double value consumes 2/4 GPRs and 2 FPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS - 1) + { + avalue[i] = pfr; + pfr += 2; + } + /* Here we have the situation where one part of the long double + is stored in fpr13 and the other part is already on the stack. + We use a union to pass the long double to avalue[i]. */ + else if (nf == NUM_FPR_ARG_REGISTERS - 1) + { + memcpy (&temp_ld.lb[0], pfr, sizeof(temp_ld.lb[0])); + memcpy (&temp_ld.lb[1], pgr + 2, sizeof(temp_ld.lb[1])); + avalue[i] = &temp_ld.ld; + } +#else +#error undefined architecture +#endif + else + avalue[i] = pgr; + + nf += 2; + ng += MODE_CHOICE(4,2); + pgr += MODE_CHOICE(4,2); + + break; + +#endif /* FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE */ + + default: + FFI_ASSERT(0); + break; + } + } + + (closure->fun)(cif, rvalue, avalue, closure->user_data); + + /* Tell ffi_closure_ASM to perform return type promotions. */ + return cif->rtype->type; +} + +#if defined(__ppc64__) + +/* ffi64_struct_to_ram_form + + Rebuild a struct's natural layout from buffers of concatenated registers. + Return the number of registers used. + inGPRs[0-7] == r3, inFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_ram_form( + const ffi_type* inType, + const char* inGPRs, + unsigned int* ioGPRMarker, + const char* inFPRs, + unsigned int* ioFPRMarker, + unsigned int* ioFPRsUsed, + char* outStruct, // caller-allocated + unsigned int* ioStructMarker) +{ + unsigned int srcGMarker = 0; + unsigned int srcFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + unsigned int destMarker = 0; + + static unsigned int recurseCount = 0; + + if (ioGPRMarker) + srcGMarker = *ioGPRMarker; + + if (ioFPRMarker) + { + srcFMarker = *ioFPRMarker; + savedFMarker = srcFMarker; + } + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioStructMarker) + destMarker = *ioStructMarker; + + size_t i; + + switch (inType->size) + { + case 1: case 2: case 4: + srcGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + srcFMarker = ALIGN(srcFMarker, 4); + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(float*)&outStruct[destMarker] = + (float)*(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(float*)&outStruct[destMarker] = + (float)*(double*)&inGPRs[srcGMarker]; + + srcGMarker += 4; + destMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcFMarker = ALIGN(srcFMarker, 8); + destMarker = ALIGN(destMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(double*)&outStruct[destMarker] = + *(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(double*)&outStruct[destMarker] = + *(double*)&inGPRs[srcGMarker]; + + destMarker += 8; + + // Skip next GPR + srcGMarker += 8; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + destMarker = ALIGN(destMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + srcFMarker = ALIGN(srcFMarker, 8); + srcGMarker = ALIGN(srcGMarker, 8); + *(long double*)&outStruct[destMarker] = + *(long double*)&inFPRs[srcFMarker]; + srcFMarker += 16; + fprsUsed += 2; + } + else + { + srcFMarker = ALIGN(srcFMarker, 16); + srcGMarker = ALIGN(srcGMarker, 16); + *(long double*)&outStruct[destMarker] = + *(long double*)&inGPRs[srcGMarker]; + } + + destMarker += 16; + + // Skip next 2 GPRs + srcGMarker += 16; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + if (inType->alignment == 1) // chars only + { + if (inType->size == 1) + outStruct[destMarker++] = inGPRs[srcGMarker++]; + else if (inType->size == 2) + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + outStruct[destMarker++] = inGPRs[srcGMarker++]; + i++; + } + else + { + memcpy(&outStruct[destMarker], + &inGPRs[srcGMarker], inType->size); + srcGMarker += inType->size; + destMarker += inType->size; + i += inType->size - 1; + } + } + else // chars and other stuff + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, inType->alignment); // was 8 + } + } + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcGMarker = ALIGN(srcGMarker, 2); + destMarker = ALIGN(destMarker, 2); + + *(short*)&outStruct[destMarker] = + *(short*)&inGPRs[srcGMarker]; + srcGMarker += 2; + destMarker += 2; + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + *(int*)&outStruct[destMarker] = + *(int*)&inGPRs[srcGMarker]; + srcGMarker += 4; + destMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcGMarker = ALIGN(srcGMarker, 8); + destMarker = ALIGN(destMarker, 8); + + *(long long*)&outStruct[destMarker] = + *(long long*)&inGPRs[srcGMarker]; + srcGMarker += 8; + destMarker += 8; + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_ram_form(inType->elements[i], inGPRs, + &srcGMarker, inFPRs, &srcFMarker, &fprsUsed, + outStruct, &destMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); // unknown element type + break; + } + } + + srcGMarker = ALIGN(srcGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && srcGMarker == 16) + { + *(long double*)&outStruct[0] = *(long double*)&inGPRs[0]; + srcFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioGPRMarker) + *ioGPRMarker = ALIGN(srcGMarker, 8); + + if (ioFPRMarker) + *ioFPRMarker = srcFMarker; + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioStructMarker) + *ioStructMarker = ALIGN(destMarker, 8); +} + +/* ffi64_struct_to_reg_form + + Copy a struct's elements into buffers that can be sliced into registers. + Return the sizes of the output buffers in bytes. Pass NULL buffer pointers + to calculate size only. + outGPRs[0-7] == r3, outFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_reg_form( + const ffi_type* inType, + const char* inStruct, + unsigned int* ioStructMarker, + unsigned int* ioFPRsUsed, + char* outGPRs, // caller-allocated + unsigned int* ioGPRSize, + char* outFPRs, // caller-allocated + unsigned int* ioFPRSize) +{ + size_t i; + unsigned int srcMarker = 0; + unsigned int destGMarker = 0; + unsigned int destFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + + static unsigned int recurseCount = 0; + + if (ioStructMarker) + srcMarker = *ioStructMarker; + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioGPRSize) + destGMarker = *ioGPRSize; + + if (ioFPRSize) + { + destFMarker = *ioFPRSize; + savedFMarker = destFMarker; + } + + switch (inType->size) + { + case 1: case 2: case 4: + destGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + // Shadow floating-point types in GPRs for vararg and pre-ANSI + // functions. + case FFI_TYPE_FLOAT: + // Nudge markers to next 4/8-byte boundary + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + (double)*(float*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + (double)*(float*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcMarker = ALIGN(srcMarker, 8); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + *(double*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + *(double*)&inStruct[srcMarker]; + + srcMarker += 8; + + // Skip next GPR + destGMarker += 8; + destGMarker = ALIGN(destGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + srcMarker = ALIGN(srcMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + destFMarker = ALIGN(destFMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outFPRs != NULL && inStruct != NULL) + *(long double*)&outFPRs[destFMarker] = + *(long double*)&inStruct[srcMarker]; + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + + destFMarker += 16; + fprsUsed += 2; + } + else + { + destGMarker = ALIGN(destGMarker, 16); + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + } + + srcMarker += 16; + destGMarker += 16; // Skip next 2 GPRs + destGMarker = ALIGN(destGMarker, 8); // was 16 + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + if (inType->alignment == 1) // bytes only + { + if (inType->size == 1) + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + } + else if (inType->size == 2) + { + if (outGPRs != NULL && inStruct != NULL) + { + outGPRs[destGMarker] = inStruct[srcMarker]; + outGPRs[destGMarker + 1] = inStruct[srcMarker + 1]; + } + + srcMarker += 2; + destGMarker += 2; + + i++; + } + else + { + if (outGPRs != NULL && inStruct != NULL) + { + // Avoid memcpy for small chunks. + if (inType->size <= sizeof(long)) + *(long*)&outGPRs[destGMarker] = + *(long*)&inStruct[srcMarker]; + else + memcpy(&outGPRs[destGMarker], + &inStruct[srcMarker], inType->size); + } + + srcMarker += inType->size; + destGMarker += inType->size; + i += inType->size - 1; + } + } + else // bytes and other stuff + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, inType->alignment); // was 8 + } + } + + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcMarker = ALIGN(srcMarker, 2); + destGMarker = ALIGN(destGMarker, 2); + + if (outGPRs != NULL && inStruct != NULL) + *(short*)&outGPRs[destGMarker] = + *(short*)&inStruct[srcMarker]; + + srcMarker += 2; + destGMarker += 2; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + + if (outGPRs != NULL && inStruct != NULL) + *(int*)&outGPRs[destGMarker] = + *(int*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcMarker = ALIGN(srcMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outGPRs != NULL && inStruct != NULL) + *(long long*)&outGPRs[destGMarker] = + *(long long*)&inStruct[srcMarker]; + + srcMarker += 8; + destGMarker += 8; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_reg_form(inType->elements[i], + inStruct, &srcMarker, &fprsUsed, outGPRs, + &destGMarker, outFPRs, &destFMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); + break; + } + } + + destGMarker = ALIGN(destGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && destGMarker == 16) + { + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[0] = *(long double*)&inStruct[0]; + + destFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioStructMarker) + *ioStructMarker = ALIGN(srcMarker, 8); + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioGPRSize) + *ioGPRSize = ALIGN(destGMarker, 8); + + if (ioFPRSize) + *ioFPRSize = ALIGN(destFMarker, 8); +} + +/* ffi64_stret_needs_ptr + + Determine whether a returned struct needs a pointer in r3 or can fit + in registers. +*/ + +bool +ffi64_stret_needs_ptr( + const ffi_type* inType, + unsigned short* ioGPRCount, + unsigned short* ioFPRCount) +{ + // Obvious case first- struct is larger than combined FPR size. + if (inType->size > 14 * 8) + return true; + + // Now the struct can physically fit in registers, determine if it + // also fits logically. + bool needsPtr = false; + unsigned short gprsUsed = 0; + unsigned short fprsUsed = 0; + size_t i; + + if (ioGPRCount) + gprsUsed = *ioGPRCount; + + if (ioFPRCount) + fprsUsed = *ioFPRCount; + + for (i = 0; inType->elements[i] != NULL && !needsPtr; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + gprsUsed++; + fprsUsed++; + + if (fprsUsed > 13) + needsPtr = true; + + break; + + case FFI_TYPE_LONGDOUBLE: + gprsUsed += 2; + fprsUsed += 2; + + if (fprsUsed > 14) + needsPtr = true; + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + gprsUsed++; + + if (gprsUsed > 8) + { + needsPtr = true; + break; + } + + if (inType->elements[i + 1] == NULL) // last byte in the struct + break; + + // Count possible contiguous bytes ahead, up to 8. + unsigned short j; + + for (j = 1; j < 8; j++) + { + if (inType->elements[i + j] == NULL || + !FFI_TYPE_1_BYTE(inType->elements[i + j]->type)) + break; + } + + i += j - 1; // allow for i++ before the test condition + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + gprsUsed++; + + if (gprsUsed > 8) + needsPtr = true; + + break; + + case FFI_TYPE_STRUCT: + needsPtr = ffi64_stret_needs_ptr( + inType->elements[i], &gprsUsed, &fprsUsed); + + break; + + default: + FFI_ASSERT(0); + break; + } + } + + if (ioGPRCount) + *ioGPRCount = gprsUsed; + + if (ioFPRCount) + *ioFPRCount = fprsUsed; + + return needsPtr; +} + +/* ffi64_data_size + + Calculate the size in bytes of an ffi type. +*/ + +unsigned int +ffi64_data_size( + const ffi_type* inType) +{ + unsigned int size = 0; + + switch (inType->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + size = 1; + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + size = 2; + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_FLOAT: + size = 4; + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + size = 8; + break; + + case FFI_TYPE_LONGDOUBLE: + size = 16; + break; + + case FFI_TYPE_STRUCT: + ffi64_struct_to_reg_form( + inType, NULL, NULL, NULL, NULL, &size, NULL, NULL); + break; + + case FFI_TYPE_VOID: + break; + + default: + FFI_ASSERT(0); + break; + } + + return size; +} + +#endif /* defined(__ppc64__) */ +#endif /* __ppc__ || __ppc64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S new file mode 100644 index 0000000..7162fa1 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S @@ -0,0 +1,418 @@ +#if defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc64-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc64-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 + stg r0,SF_RETURN(r1) // save return address + + // Save GPRs 3 - 10 (aligned to 8) in the parents outgoing area. + stg r3,SF_ARG1(r1) + stg r4,SF_ARG2(r1) + stg r5,SF_ARG3(r1) + stg r6,SF_ARG4(r1) + stg r7,SF_ARG5(r1) + stg r8,SF_ARG6(r1) + stg r9,SF_ARG7(r1) + stg r10,SF_ARG8(r1) + +LCFI0: +/* 48 bytes (Linkage Area) + 64 bytes (outgoing parameter area, always reserved) + 112 bytes (14*8 for incoming FPR) + ? bytes (result) + 112 bytes (14*8 for outgoing FPR) + 16 bytes (2 saved registers) + 352 + ? total bytes +*/ + + std r31,-8(r1) // Save registers we use. + std r30,-16(r1) + mr r30,r1 // Save the old SP. + mr r31,r11 // Save the ffi_closure around ffi64_data_size. + + // Calculate the space we need. + stdu r1,-SF_MINSIZE(r1) + ld r3,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r3) // ffi_cif->rtype* + bl Lffi64_data_size$stub + ld r1,0(r1) + + addi r3,r3,352 // Add our overhead. + neg r3,r3 + li r0,-32 // Align to 32 bytes. + and r3,r3,r0 + stdux r1,r1,r3 // Grow the stack. + + mr r11,r31 // Copy the ffi_closure back. + +LCFI1: + // We want to build up an area for the parameters passed + // in registers. (both floating point and integer) + +/* 320 bytes (callee stack frame aligned to 32) + 48 bytes (caller linkage area) + 368 (start of caller parameter area aligned to 8) +*/ + + // Save FPRs 1 - 14. (aligned to 8) + stfd f1,112(r1) + stfd f2,120(r1) + stfd f3,128(r1) + stfd f4,136(r1) + stfd f5,144(r1) + stfd f6,152(r1) + stfd f7,160(r1) + stfd f8,168(r1) + stfd f9,176(r1) + stfd f10,184(r1) + stfd f11,192(r1) + stfd f12,200(r1) + stfd f13,208(r1) + stfd f14,216(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,224 // result storage + addi r5,r30,SF_ARG1 // saved GPRs + addi r6,r1,112 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + // Look the proper starting point in table + // by using return type as an offset. + addi r5,r1,224 // Get pointer to results area. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Now multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: + // Each of the ret_typeX code fragments has to be exactly 16 bytes long + // (4 instructions). For cache effectiveness we align to a 16 byte + // boundary first. + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +// case FFI_TYPE_VOID +Lret_type0: + b Lfinish + nop + nop + nop + +// case FFI_TYPE_INT +Lret_type1: + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_FLOAT +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_DOUBLE +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_LONGDOUBLE +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +// case FFI_TYPE_UINT8 +Lret_type5: + lbz r3,7(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT8 +Lret_type6: + lbz r3,7(r5) + extsb r3,r3 + b Lfinish + nop + +// case FFI_TYPE_UINT16 +Lret_type7: + lhz r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT16 +Lret_type8: + lha r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT32 +Lret_type9: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT32 +Lret_type10: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT64 +Lret_type11: + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT64 +Lret_type12: // same as Lret_type11 + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_STRUCT +Lret_type13: + b Lret_struct + nop + nop + nop + +// ** End 16-byte aligned cases ** +// case FFI_TYPE_POINTER +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + b Lfinish + +// copy struct into registers +Lret_struct: + ld r31,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r31) // ffi_cif->rtype* + ld r31,24(r31) // ffi_cif->flags + mr r4,r5 // copy struct* to 2nd arg + addi r7,r1,SF_ARG9 // GPR return area + addi r9,r30,-16-(14*8) // FPR return area + li r5,0 // struct offset ptr (NULL) + li r6,0 // FPR used count ptr (NULL) + li r8,0 // GPR return area size ptr (NULL) + li r10,0 // FPR return area size ptr (NULL) + bl Lffi64_struct_to_reg_form$stub + + // Load GPRs + ld r3,SF_ARG9(r1) + ld r4,SF_ARG10(r1) + ld r5,SF_ARG11(r1) + ld r6,SF_ARG12(r1) + nop + ld r7,SF_ARG13(r1) + ld r8,SF_ARG14(r1) + ld r9,SF_ARG15(r1) + ld r10,SF_ARG16(r1) + nop + + // Load FPRs + mtcrf 0x2,r31 + bf 26,Lfinish + lfd f1,-16-(14*8)(r30) + lfd f2,-16-(13*8)(r30) + lfd f3,-16-(12*8)(r30) + lfd f4,-16-(11*8)(r30) + nop + lfd f5,-16-(10*8)(r30) + lfd f6,-16-(9*8)(r30) + lfd f7,-16-(8*8)(r30) + lfd f8,-16-(7*8)(r30) + nop + lfd f9,-16-(6*8)(r30) + lfd f10,-16-(5*8)(r30) + lfd f11,-16-(4*8)(r30) + lfd f12,-16-(3*8)(r30) + nop + lfd f13,-16-(2*8)(r30) + lfd f14,-16-(1*8)(r30) + // Fall through + +// case done +Lfinish: + lg r1,0(r1) // Restore stack pointer. + ld r31,-8(r1) // Restore registers we used. + ld r30,-16(r1) + lg r0,SF_RETURN(r1) // Get return address. + mtlr r0 // Reset link register. + blr + +// END(ffi_closure_ASM) + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_reg_form$stub: + .indirect_symbol _ffi64_struct_to_reg_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_reg_form + +LO$ffi64_struct_to_reg_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form)(r11) + mtctr r12 + bctr + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_data_size$stub: + .indirect_symbol _ffi64_data_size + mflr r0 + bcl 20,31,LO$ffi64_data_size + +LO$ffi64_data_size: + mflr r11 + addis r11,r11,ha16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size) + mtlr r0 + lgu r12,lo16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_reg_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_reg_form + .g_long dyld_stub_binding_helper + +L_ffi64_data_size$lazy_ptr: + .indirect_symbol _ffi64_data_size + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/types.c ./Modules/_ctypes/libffi_osx/types.c new file mode 100644 index 0000000..44806ae --- /dev/null +++ ./Modules/_ctypes/libffi_osx/types.c @@ -0,0 +1,115 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +/* Type definitions */ +#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) \ + ffi_type ffi_type_##n = { s, a, t, NULL } +#define FFI_AGGREGATE_TYPEDEF(n, e) \ + ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } + +FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); +FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); +FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); +FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); +FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); +FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); +FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); + +/* Size and alignment are fake here. They must not be 0. */ +FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); + +#if defined ALPHA || defined SPARC64 || defined X86_64 || \ + defined S390X || defined IA64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); +#else +FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); +#endif + +#if defined X86 || defined ARM || defined M68K || defined(X86_DARWIN) + +# ifdef X86_64 + FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +# else + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +# endif + +#elif defined(POWERPC_DARWIN) +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#elif defined SH +FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +#else +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#endif + +#if defined X86 || defined X86_WIN32 || defined M68K || defined(X86_DARWIN) + +# if defined X86_WIN32 || defined X86_64 + FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +# endif + +# ifdef X86_DARWIN + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined ARM || defined SH || defined POWERPC_AIX +FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); +#elif defined POWERPC_DARWIN +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# if __GNUC__ >= 4 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined SPARC +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# ifdef SPARC64 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined X86_64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +#else +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/x86/darwin64.S ./Modules/_ctypes/libffi_osx/x86/darwin64.S new file mode 100644 index 0000000..165d469 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -0,0 +1,417 @@ +/* ----------------------------------------------------------------------- + darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. + derived from unix64.S + + x86-64 Foreign Function Interface for Darwin. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifdef __x86_64__ +#define LIBFFI_ASM +#include +#include + + .file "darwin64.S" +.text + +/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, + void *raddr, void (*fnaddr)()); + + Bit o trickiness here -- ARGS+BYTES is the base of the stack frame + for this function. This has been allocated by ffi_call. We also + deallocate some of the stack that has been alloca'd. */ + + .align 3 + .globl _ffi_call_unix64 + +_ffi_call_unix64: +LUW0: + movq (%rsp), %r10 /* Load return address. */ + movq %rdi, %r12 /* Save a copy of the register area. */ + leaq (%rdi, %rsi), %rax /* Find local stack base. */ + movq %rdx, (%rax) /* Save flags. */ + movq %rcx, 8(%rax) /* Save raddr. */ + movq %rbp, 16(%rax) /* Save old frame pointer. */ + movq %r10, 24(%rax) /* Relocate return address. */ + movq %rax, %rbp /* Finalize local stack frame. */ +LUW1: + /* movq %rdi, %r10 // Save a copy of the register area. */ + movq %r12, %r10 + movq %r8, %r11 /* Save a copy of the target fn. */ + movl %r9d, %eax /* Set number of SSE registers. */ + + /* Load up all argument registers. */ + movq (%r10), %rdi + movq 8(%r10), %rsi + movq 16(%r10), %rdx + movq 24(%r10), %rcx + movq 32(%r10), %r8 + movq 40(%r10), %r9 + testl %eax, %eax + jnz Lload_sse +Lret_from_load_sse: + + /* Deallocate the reg arg area. */ + leaq 176(%r10), %rsp + + /* Call the user function. */ + call *%r11 + + /* Deallocate stack arg area; local stack frame in redzone. */ + leaq 24(%rbp), %rsp + + movq 0(%rbp), %rcx /* Reload flags. */ + movq 8(%rbp), %rdi /* Reload raddr. */ + movq 16(%rbp), %rbp /* Reload old frame pointer. */ +LUW2: + + /* The first byte of the flags contains the FFI_TYPE. */ + movzbl %cl, %r10d + leaq Lstore_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lstore_table: + .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ + .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ + .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ + .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ + .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ + .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ + .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ + .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ + .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ + .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ + .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lst_void: + ret + .align 3 +Lst_uint8: + movzbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_sint8: + movsbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint16: + movzwq %ax, %rax + movq %rax, (%rdi) + .align 3 +Lst_sint16: + movswq %ax, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint32: + movl %eax, %eax + movq %rax, (%rdi) + .align 3 +Lst_sint32: + cltq + movq %rax, (%rdi) + ret + .align 3 +Lst_int64: + movq %rax, (%rdi) + ret + .align 3 +Lst_float: + movss %xmm0, (%rdi) + ret + .align 3 +Lst_double: + movsd %xmm0, (%rdi) + ret +Lst_ldouble: + fstpt (%rdi) + ret + .align 3 +Lst_struct: + leaq -20(%rsp), %rsi /* Scratch area in redzone. */ + + /* We have to locate the values now, and since we don't want to + write too much data into the user's return value, we spill the + value to a 16 byte scratch area first. Bits 8, 9, and 10 + control where the values are located. Only one of the three + bits will be set; see ffi_prep_cif_machdep for the pattern. */ + movd %xmm0, %r10 + movd %xmm1, %r11 + testl $0x100, %ecx + cmovnz %rax, %rdx + cmovnz %r10, %rax + testl $0x200, %ecx + cmovnz %r10, %rdx + testl $0x400, %ecx + cmovnz %r10, %rax + cmovnz %r11, %rdx + movq %rax, (%rsi) + movq %rdx, 8(%rsi) + + /* Bits 12-31 contain the true size of the structure. Copy from + the scratch area to the true destination. */ + shrl $12, %ecx + rep movsb + ret + + /* Many times we can avoid loading any SSE registers at all. + It's not worth an indirect jump to load the exact set of + SSE registers needed; zero or all is a good compromise. */ + .align 3 +LUW3: +Lload_sse: + movdqa 48(%r10), %xmm0 + movdqa 64(%r10), %xmm1 + movdqa 80(%r10), %xmm2 + movdqa 96(%r10), %xmm3 + movdqa 112(%r10), %xmm4 + movdqa 128(%r10), %xmm5 + movdqa 144(%r10), %xmm6 + movdqa 160(%r10), %xmm7 + jmp Lret_from_load_sse + +LUW4: + .align 3 + .globl _ffi_closure_unix64 + +_ffi_closure_unix64: +LUW5: + /* The carry flag is set by the trampoline iff SSE registers + are used. Don't clobber it before the branch instruction. */ + leaq -200(%rsp), %rsp +LUW6: + movq %rdi, (%rsp) + movq %rsi, 8(%rsp) + movq %rdx, 16(%rsp) + movq %rcx, 24(%rsp) + movq %r8, 32(%rsp) + movq %r9, 40(%rsp) + jc Lsave_sse +Lret_from_save_sse: + + movq %r10, %rdi + leaq 176(%rsp), %rsi + movq %rsp, %rdx + leaq 208(%rsp), %rcx + call _ffi_closure_unix64_inner + + /* Deallocate stack frame early; return value is now in redzone. */ + addq $200, %rsp +LUW7: + + /* The first byte of the return value contains the FFI_TYPE. */ + movzbl %al, %r10d + leaq Lload_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lload_table: + .long Lld_void-Lload_table /* FFI_TYPE_VOID */ + .long Lld_int32-Lload_table /* FFI_TYPE_INT */ + .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ + .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ + .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ + .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ + .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ + .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ + .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ + .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ + .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ + .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ + .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ + .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ + .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lld_void: + ret + .align 3 +Lld_int8: + movzbl -24(%rsp), %eax + ret + .align 3 +Lld_int16: + movzwl -24(%rsp), %eax + ret + .align 3 +Lld_int32: + movl -24(%rsp), %eax + ret + .align 3 +Lld_int64: + movq -24(%rsp), %rax + ret + .align 3 +Lld_float: + movss -24(%rsp), %xmm0 + ret + .align 3 +Lld_double: + movsd -24(%rsp), %xmm0 + ret + .align 3 +Lld_ldouble: + fldt -24(%rsp) + ret + .align 3 +Lld_struct: + /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, + %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading + both rdx and xmm1 with the second word. For the remaining, + bit 8 set means xmm0 gets the second word, and bit 9 means + that rax gets the second word. */ + movq -24(%rsp), %rcx + movq -16(%rsp), %rdx + movq -16(%rsp), %xmm1 + testl $0x100, %eax + cmovnz %rdx, %rcx + movd %rcx, %xmm0 + testl $0x200, %eax + movq -24(%rsp), %rax + cmovnz %rdx, %rax + ret + + /* See the comment above Lload_sse; the same logic applies here. */ + .align 3 +LUW8: +Lsave_sse: + movdqa %xmm0, 48(%rsp) + movdqa %xmm1, 64(%rsp) + movdqa %xmm2, 80(%rsp) + movdqa %xmm3, 96(%rsp) + movdqa %xmm4, 112(%rsp) + movdqa %xmm5, 128(%rsp) + movdqa %xmm6, 144(%rsp) + movdqa %xmm7, 160(%rsp) + jmp Lret_from_save_sse + +LUW9: +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ + .long L$set$0 +LSCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "zR\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ + .byte 0x10 /* CIE RA Column */ + .byte 0x1 /* uleb128 0x1; Augmentation size */ + .byte 0x10 /* FDE Encoding (pcrel sdata4) */ + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 /* uleb128 0x7 */ + .byte 0x8 /* uleb128 0x8 */ + .byte 0x90 /* DW_CFA_offset, column 0x10 */ + .byte 0x1 + .align 3 +LECIE1: + .globl _ffi_call_unix64.eh +_ffi_call_unix64.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 /* FDE CIE offset */ + .quad LUW0-. /* FDE initial location */ + .set L$set$2,LUW4-LUW0 /* FDE address range */ + .quad L$set$2 + .byte 0x0 /* Augmentation size */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$3,LUW1-LUW0 + .long L$set$3 + + /* New stack frame based off rbp. This is a itty bit of unwind + trickery in that the CFA *has* changed. There is no easy way + to describe it correctly on entry to the function. Fortunately, + it doesn't matter too much since at all points we can correctly + unwind back to ffi_call. Note that the location to which we + moved the return address is (the new) CFA-8, so from the + perspective of the unwind info, it hasn't moved. */ + .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ + .byte 0x6 + .byte 0x20 + .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ + .byte 0x2 + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$4,LUW2-LUW1 + .long L$set$4 + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 + .byte 0x8 + .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$5,LUW3-LUW2 + .long L$set$5 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE1: + .globl _ffi_closure_unix64.eh +_ffi_closure_unix64.eh: +LSFDE3: + .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ + .long L$set$6 +LASFDE3: + .long LASFDE3-EH_frame1 /* FDE CIE offset */ + .quad LUW5-. /* FDE initial location */ + .set L$set$7,LUW9-LUW5 /* FDE address range */ + .quad L$set$7 + .byte 0x0 /* Augmentation size */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$8,LUW6-LUW5 + .long L$set$8 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 208,1 /* uleb128 208 */ + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$9,LUW7-LUW6 + .long L$set$9 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 0x8 + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$10,LUW8-LUW7 + .long L$set$10 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE3: + .subsections_via_symbols + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S new file mode 100644 index 0000000..925a841 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S @@ -0,0 +1,422 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. + + X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +/* + * This file is based on sysv.S and then hacked up by Ronald who hasn't done + * assembly programming in 8 years. + */ + +#ifndef __x86_64__ + +#define LIBFFI_ASM +#include +#include + +#ifdef PyObjC_STRICT_DEBUGGING + /* XXX: Debugging of stack alignment, to be removed */ +#define ASSERT_STACK_ALIGNED movdqa -16(%esp), %xmm0 +#else +#define ASSERT_STACK_ALIGNED +#endif + +.text + +.globl _ffi_prep_args + + .align 4 +.globl _ffi_call_SYSV + +_ffi_call_SYSV: +LFB1: + pushl %ebp +LCFI0: + movl %esp,%ebp +LCFI1: + subl $8,%esp + /* Make room for all of the new args. */ + movl 16(%ebp),%ecx + subl %ecx,%esp + + movl %esp,%eax + + /* Place all of the ffi_prep_args in position */ + subl $8,%esp + pushl 12(%ebp) + pushl %eax + call *8(%ebp) + + /* Return stack to previous state and call the function */ + addl $16,%esp + + call *28(%ebp) + + /* Remove the space we pushed for the args */ + movl 16(%ebp),%ecx + addl %ecx,%esp + + /* Load %ecx with the return type code */ + movl 20(%ebp),%ecx + + /* If the return value pointer is NULL, assume no return value. */ + cmpl $0,24(%ebp) + jne Lretint + + /* Even if there is no space for the return value, we are + obliged to handle floating-point values. */ + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lnoretval + fstp %st(0) + + jmp Lepilogue + +Lretint: + cmpl $FFI_TYPE_INT,%ecx + jne Lretfloat + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp Lepilogue + +Lretfloat: + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lretdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstps (%ecx) + jmp Lepilogue + +Lretdouble: + cmpl $FFI_TYPE_DOUBLE,%ecx + jne Lretlongdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpl (%ecx) + jmp Lepilogue + +Lretlongdouble: + cmpl $FFI_TYPE_LONGDOUBLE,%ecx + jne Lretint64 + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpt (%ecx) + jmp Lepilogue + +Lretint64: + cmpl $FFI_TYPE_SINT64,%ecx + jne Lretstruct1b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + movl %edx,4(%ecx) + jmp Lepilogue + +Lretstruct1b: + cmpl $FFI_TYPE_SINT8,%ecx + jne Lretstruct2b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movb %al,0(%ecx) + jmp Lepilogue + +Lretstruct2b: + cmpl $FFI_TYPE_SINT16,%ecx + jne Lretstruct + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movw %ax,0(%ecx) + jmp Lepilogue + +Lretstruct: + cmpl $FFI_TYPE_STRUCT,%ecx + jne Lnoretval + /* Nothing to do! */ + addl $4,%esp + popl %ebp + ret + +Lnoretval: +Lepilogue: + addl $8,%esp + movl %ebp,%esp + popl %ebp + ret +LFE1: +.ffi_call_SYSV_end: + + .align 4 +FFI_HIDDEN (ffi_closure_SYSV) +.globl _ffi_closure_SYSV + +_ffi_closure_SYSV: +LFB2: + pushl %ebp +LCFI2: + movl %esp, %ebp +LCFI3: + subl $56, %esp + leal -40(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 8(%ebp), %edx + movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + movl %ebx, 8(%esp) +LCFI7: + call L_ffi_closure_SYSV_inner$stub + movl 8(%esp), %ebx + movl -12(%ebp), %ecx + cmpl $FFI_TYPE_INT, %eax + je Lcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lcls_retllong + cmpl $FFI_TYPE_UINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_SINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_UINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_SINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_STRUCT, %eax + je Lcls_retstruct +Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret +Lcls_retint: + movl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retfloat: + flds (%ecx) + jmp Lcls_epilogue +Lcls_retdouble: + fldl (%ecx) + jmp Lcls_epilogue +Lcls_retldouble: + fldt (%ecx) + jmp Lcls_epilogue +Lcls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp Lcls_epilogue +Lcls_retstruct1: + movsbl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct2: + movswl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct: + lea -8(%ebp),%esp + movl %ebp, %esp + popl %ebp + ret $4 +LFE2: + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + + .align 4 +FFI_HIDDEN (ffi_closure_raw_SYSV) +.globl _ffi_closure_raw_SYSV + +_ffi_closure_raw_SYSV: +LFB3: + pushl %ebp +LCFI4: + movl %esp, %ebp +LCFI5: + pushl %esi +LCFI6: + subl $36, %esp + movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ + movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ + movl %edx, 12(%esp) /* user_data */ + leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ + movl %edx, 8(%esp) /* raw_args */ + leal -24(%ebp), %edx + movl %edx, 4(%esp) /* &res */ + movl %esi, (%esp) /* cif */ + call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ + movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ + cmpl $FFI_TYPE_INT, %eax + je Lrcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lrcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lrcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lrcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lrcls_retllong +Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret +Lrcls_retint: + movl -24(%ebp), %eax + jmp Lrcls_epilogue +Lrcls_retfloat: + flds -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retdouble: + fldl -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retldouble: + fldt -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retllong: + movl -24(%ebp), %eax + movl -20(%ebp), %edx + jmp Lrcls_epilogue +LFE3: +#endif + +.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 +L_ffi_closure_SYSV_inner$stub: + .indirect_symbol _ffi_closure_SYSV_inner + hlt ; hlt ; hlt ; hlt ; hlt + + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 +LSCIE1: + .long 0x0 + .byte 0x1 + .ascii "zR\0" + .byte 0x1 + .byte 0x7c + .byte 0x8 + .byte 0x1 + .byte 0x10 + .byte 0xc + .byte 0x5 + .byte 0x4 + .byte 0x88 + .byte 0x1 + .align 2 +LECIE1: +.globl _ffi_call_SYSV.eh +_ffi_call_SYSV.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 + .long LFB1-. + .set L$set$2,LFE1-LFB1 + .long L$set$2 + .byte 0x0 + .byte 0x4 + .set L$set$3,LCFI0-LFB1 + .long L$set$3 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$4,LCFI1-LCFI0 + .long L$set$4 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE1: +.globl _ffi_closure_SYSV.eh +_ffi_closure_SYSV.eh: +LSFDE2: + .set L$set$5,LEFDE2-LASFDE2 + .long L$set$5 +LASFDE2: + .long LASFDE2-EH_frame1 + .long LFB2-. + .set L$set$6,LFE2-LFB2 + .long L$set$6 + .byte 0x0 + .byte 0x4 + .set L$set$7,LCFI2-LFB2 + .long L$set$7 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$8,LCFI3-LCFI2 + .long L$set$8 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE2: + +#if !FFI_NO_RAW_API + +.globl _ffi_closure_raw_SYSV.eh +_ffi_closure_raw_SYSV.eh: +LSFDE3: + .set L$set$10,LEFDE3-LASFDE3 + .long L$set$10 +LASFDE3: + .long LASFDE3-EH_frame1 + .long LFB3-. + .set L$set$11,LFE3-LFB3 + .long L$set$11 + .byte 0x0 + .byte 0x4 + .set L$set$12,LCFI4-LFB3 + .long L$set$12 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$13,LCFI5-LCFI4 + .long L$set$13 + .byte 0xd + .byte 0x4 + .byte 0x4 + .set L$set$14,LCFI6-LCFI5 + .long L$set$14 + .byte 0x85 + .byte 0x3 + .align 2 +LEFDE3: + +#endif + +#endif /* ifndef __x86_64__ */ + +#endif /* defined __i386__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c new file mode 100644 index 0000000..06feaf2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c @@ -0,0 +1,734 @@ +#ifdef __x86_64__ + +/* ----------------------------------------------------------------------- + x86-ffi64.c - Copyright (c) 2002 Bo Thorsen + + x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#define MAX_GPR_REGS 6 +#define MAX_SSE_REGS 8 + +typedef struct RegisterArgs { + /* Registers for argument passing. */ + UINT64 gpr[MAX_GPR_REGS]; + __int128_t sse[MAX_SSE_REGS]; +} RegisterArgs; + +extern void +ffi_call_unix64( + void* args, + unsigned long bytes, + unsigned flags, + void* raddr, + void (*fnaddr)(), + unsigned ssecount); + +/* All reference to register classes here is identical to the code in + gcc/config/i386/i386.c. Do *not* change one without the other. */ + +/* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +enum x86_64_reg_class +{ + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_COMPLEX_X87_CLASS, + X86_64_MEMORY_CLASS +}; + +#define MAX_CLASSES 4 +#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + +/* x86-64 register passing implementation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + +/* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ +static enum x86_64_reg_class +merge_classes( + enum x86_64_reg_class class1, + enum x86_64_reg_class class2) +{ + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, + MEMORY is used. */ + if (class1 == X86_64_X87_CLASS + || class1 == X86_64_X87UP_CLASS + || class1 == X86_64_COMPLEX_X87_CLASS + || class2 == X86_64_X87_CLASS + || class2 == X86_64_X87UP_CLASS + || class2 == X86_64_COMPLEX_X87_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; +} + +/* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + See the x86-64 PS ABI for details. */ + +static int +classify_argument( + ffi_type* type, + enum x86_64_reg_class classes[], + size_t byte_offset) +{ + switch (type->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_POINTER: +#if 0 + if (byte_offset + type->size <= 4) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + + return 1; +#else + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } +#endif + + case FFI_TYPE_FLOAT: + if (byte_offset == 0) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + + return 1; + + case FFI_TYPE_DOUBLE: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + + case FFI_TYPE_LONGDOUBLE: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + + case FFI_TYPE_STRUCT: + { + ffi_type** ptr; + int i; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + const int UNITS_PER_WORD = 8; + int words = + (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + /* If the struct is larger than 16 bytes, pass it on the stack. */ + if (type->size > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Merge the fields of structure. */ + for (ptr = type->elements; *ptr != NULL; ptr++) + { + byte_offset = ALIGN(byte_offset, (*ptr)->alignment); + + int num = classify_argument(*ptr, subclasses, byte_offset % 8); + + if (num == 0) + return 0; + + int pos = byte_offset / 8; + + for (i = 0; i < num; i++) + { + classes[i + pos] = + merge_classes(subclasses[i], classes[i + pos]); + } + + byte_offset += (*ptr)->size; + } + + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && classes[i - 1] != X86_64_X87_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + } + + return words; + } + + default: + FFI_ASSERT(0); + } + + return 0; /* Never reached. */ +} + +/* Examine the argument and return set number of register required in each + class. Return zero if parameter should be passed in memory, otherwise + the number of registers. */ +static int +examine_argument( + ffi_type* type, + enum x86_64_reg_class classes[MAX_CLASSES], + _Bool in_return, + int* pngpr, + int* pnsse) +{ + int n = classify_argument(type, classes, 0); + int ngpr = 0; + int nsse = 0; + int i; + + if (n == 0) + return 0; + + for (i = 0; i < n; ++i) + { + switch (classes[i]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + ngpr++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + nsse++; + break; + + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + case X86_64_COMPLEX_X87_CLASS: + return in_return != 0; + + default: + abort(); + } + } + + *pngpr = ngpr; + *pnsse = nsse; + + return n; +} + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + int gprcount = 0; + int ssecount = 0; + int flags = cif->rtype->type; + int i, avn, n, ngpr, nsse; + enum x86_64_reg_class classes[MAX_CLASSES]; + size_t bytes; + + if (flags != FFI_TYPE_VOID) + { + n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value is passed in memory. A pointer to that + memory is the first argument. Allocate a register for it. */ + gprcount++; + + /* We don't have to do anything in asm for the return. */ + flags = FFI_TYPE_VOID; + } + else if (flags == FFI_TYPE_STRUCT) + { + /* Mark which registers the result appears in. */ + _Bool sse0 = SSE_CLASS_P(classes[0]); + _Bool sse1 = n == 2 && SSE_CLASS_P(classes[1]); + + if (sse0 && !sse1) + flags |= 1 << 8; + else if (!sse0 && sse1) + flags |= 1 << 9; + else if (sse0 && sse1) + flags |= 1 << 10; + + /* Mark the true size of the structure. */ + flags |= cif->rtype->size << 12; + } + } + + /* Go over all arguments and determine the way they should be passed. + If it's in a register and there is space for it, let that be so. If + not, add it's size to the stack byte count. */ + for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) + { + if (examine_argument(cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = cif->arg_types[i]->alignment; + + if (align < 8) + align = 8; + + bytes = ALIGN(bytes, align); + bytes += cif->arg_types[i]->size; + } + else + { + gprcount += ngpr; + ssecount += nsse; + } + } + + if (ssecount) + flags |= 1 << 11; + + cif->flags = flags; + cif->bytes = bytes; + cif->bytes = ALIGN(bytes,8); + + return FFI_OK; +} + +void +ffi_call( + ffi_cif* cif, + void (*fn)(), + void* rvalue, + void** avalue) +{ + enum x86_64_reg_class classes[MAX_CLASSES]; + char* stack; + char* argp; + ffi_type** arg_types; + int gprcount, ssecount, ngpr, nsse, i, avn; + _Bool ret_in_memory; + RegisterArgs* reg_args; + + /* Can't call 32-bit mode from 64-bit mode. */ + FFI_ASSERT(cif->abi == FFI_UNIX64); + + /* If the return value is a struct and we don't have a return value + address then we need to make one. Note the setting of flags to + VOID above in ffi_prep_cif_machdep. */ + ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT + && (cif->flags & 0xff) == FFI_TYPE_VOID); + + if (rvalue == NULL && ret_in_memory) + rvalue = alloca (cif->rtype->size); + + /* Allocate the space for the arguments, plus 4 words of temp space. */ + stack = alloca(sizeof(RegisterArgs) + cif->bytes + 4 * 8); + reg_args = (RegisterArgs*)stack; + argp = stack + sizeof(RegisterArgs); + + gprcount = ssecount = 0; + + /* If the return value is passed in memory, add the pointer as the + first integer argument. */ + if (ret_in_memory) + reg_args->gpr[gprcount++] = (long) rvalue; + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + size_t size = arg_types[i]->size; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + memcpy (argp, avalue[i], size); + argp += size; + } + else + { /* The argument is passed entirely in registers. */ + char *a = (char *) avalue[i]; + int j; + + for (j = 0; j < n; j++, a += 8, size -= 8) + { + switch (classes[j]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + reg_args->gpr[gprcount] = 0; + switch (arg_types[i]->type) { + case FFI_TYPE_SINT8: + { + int8_t shortval = *(int8_t*)a; + int64_t actval = (int64_t)shortval; + reg_args->gpr[gprcount] = actval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + break; + } + + case FFI_TYPE_SINT16: + { + int16_t shortval = *(int16_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_SINT32: + { + int32_t shortval = *(int32_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT8: + { + u_int8_t shortval = *(u_int8_t*)a; + u_int64_t actval = (u_int64_t)shortval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + reg_args->gpr[gprcount] = actval; + break; + } + + case FFI_TYPE_UINT16: + { + u_int16_t shortval = *(u_int16_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT32: + { + u_int32_t shortval = *(u_int32_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + default: + //memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); + reg_args->gpr[gprcount] = *(int64_t*)a; + } + gprcount++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSEDF_CLASS: + reg_args->sse[ssecount++] = *(UINT64 *) a; + break; + + case X86_64_SSESF_CLASS: + reg_args->sse[ssecount++] = *(UINT32 *) a; + break; + + default: + abort(); + } + } + } + } + + ffi_call_unix64 (stack, cif->bytes + sizeof(RegisterArgs), + cif->flags, rvalue, fn, ssecount); +} + +extern void ffi_closure_unix64(void); + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + if (cif->abi != FFI_UNIX64) + return FFI_BAD_ABI; + + volatile unsigned short* tramp = + (volatile unsigned short*)&closure->tramp[0]; + + tramp[0] = 0xbb49; /* mov , %r11 */ + *(void* volatile*)&tramp[1] = ffi_closure_unix64; + tramp[5] = 0xba49; /* mov , %r10 */ + *(void* volatile*)&tramp[6] = closure; + + /* Set the carry bit if the function uses any sse registers. + This is clc or stc, together with the first byte of the jmp. */ + tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + tramp[11] = 0xe3ff; /* jmp *%r11 */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmissing-prototypes" +int +ffi_closure_unix64_inner( + ffi_closure* closure, + void* rvalue, + RegisterArgs* reg_args, + char* argp) +#pragma clang diagnostic pop +{ + ffi_cif* cif = closure->cif; + void** avalue = alloca(cif->nargs * sizeof(void *)); + ffi_type** arg_types; + long i, avn; + int gprcount = 0; + int ssecount = 0; + int ngpr, nsse; + int ret; + + ret = cif->rtype->type; + + if (ret != FFI_TYPE_VOID) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value goes in memory. Arrange for the closure + return value to go directly back to the original caller. */ + rvalue = (void *) reg_args->gpr[gprcount++]; + + /* We don't have to do anything in asm for the return. */ + ret = FFI_TYPE_VOID; + } + else if (ret == FFI_TYPE_STRUCT && n == 2) + { + /* Mark which register the second word of the structure goes in. */ + _Bool sse0 = SSE_CLASS_P (classes[0]); + _Bool sse1 = SSE_CLASS_P (classes[1]); + + if (!sse0 && sse1) + ret |= 1 << 8; + else if (sse0 && !sse1) + ret |= 1 << 9; + } + } + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + avalue[i] = argp; + argp += arg_types[i]->size; + } + +#if !defined(X86_DARWIN) + /* If the argument is in a single register, or two consecutive + registers, then we can use that address directly. */ + else if (n == 1 || (n == 2 && + SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + { + // The argument is in a single register. + if (SSE_CLASS_P (classes[0])) + { + avalue[i] = ®_args->sse[ssecount]; + ssecount += n; + } + else + { + avalue[i] = ®_args->gpr[gprcount]; + gprcount += n; + } + } +#endif + + /* Otherwise, allocate space to make them consecutive. */ + else + { + char *a = alloca (16); + int j; + + avalue[i] = a; + + for (j = 0; j < n; j++, a += 8) + { + if (SSE_CLASS_P (classes[j])) + memcpy (a, ®_args->sse[ssecount++], 8); + else + memcpy (a, ®_args->gpr[gprcount++], 8); + } + } + } + + /* Invoke the closure. */ + closure->fun (cif, rvalue, avalue, closure->user_data); + + /* Tell assembly how to perform return type promotions. */ + return ret; +} + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c new file mode 100644 index 0000000..706ea0f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c @@ -0,0 +1,438 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2002 Bo Thorsen + Copyright (c) 2002 Roger Sayle + + x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void ffi_prep_args(char *stack, extended_cif *ecif); + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if (ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void **) argp = ecif->rvalue; + argp += 4; + } + + p_argv = ecif->avalue; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + i != 0; + i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) + argp = (char *) ALIGN(argp, sizeof(int)); + + z = (*p_arg)->size; + if (z < sizeof(int)) + { + z = sizeof(int); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } + else + { + memcpy(argp, *p_argv, z); + } + p_argv++; + argp += z; + } + + return; +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Set the return type flag */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: +#ifdef X86 + case FFI_TYPE_STRUCT: + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: +#endif + + case FFI_TYPE_SINT64: + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_UINT64: + cif->flags = FFI_TYPE_SINT64; + break; + +#ifndef X86 + case FFI_TYPE_STRUCT: + if (cif->rtype->size == 1) + { + cif->flags = FFI_TYPE_SINT8; /* same as char size */ + } + else if (cif->rtype->size == 2) + { + cif->flags = FFI_TYPE_SINT16; /* same as short size */ + } + else if (cif->rtype->size == 4) + { + cif->flags = FFI_TYPE_INT; /* same as int type */ + } + else if (cif->rtype->size == 8) + { + cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ + } + else + { + cif->flags = FFI_TYPE_STRUCT; + } + break; +#endif + + default: + cif->flags = FFI_TYPE_INT; + break; + } + +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + + return FFI_OK; +} + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#endif /* X86_WIN32 */ + +void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->flags == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, + fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + + +/** private members **/ + +static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) +__attribute__ ((regparm(1))); +unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) +__attribute__ ((regparm(1))); +void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) +__attribute__ ((regparm(1))); + +/* This function is jumped to by the trampoline */ + +unsigned int FFI_HIDDEN +ffi_closure_SYSV_inner (closure, respp, args) +ffi_closure *closure; +void **respp; +void *args; +{ + // our various things... + ffi_cif *cif; + void **arg_area; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will re-set RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun) (cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +static void +ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, + ffi_cif *cif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if ( cif->flags == FFI_TYPE_STRUCT ) { + *rvalue = *(void **) argp; + argp += 4; + } + + p_argv = avalue; + + for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, sizeof(int)); + } + + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + + p_argv++; + argp += z; + } + + return; +} + +/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ + +#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ +({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +unsigned int __fun = (unsigned int)(FUN); \ +unsigned int __ctx = (unsigned int)(CTX); \ +unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \ +*(unsigned char*) &__tramp[0] = 0xb8; \ +*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ +*(unsigned char *) &__tramp[5] = 0xe9; \ +*(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ +}) + + +/* the cif must already be prep'ed */ +ffi_status +ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data) +{ + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ + &ffi_closure_SYSV, \ + (void*)closure); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +/* ------- Native raw API support -------------------------------- */ + +#if !FFI_NO_RAW_API + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + int i; + + FFI_ASSERT (cif->abi == FFI_SYSV); + + // we currently don't support certain kinds of arguments for raw + // closures. This should be implemented by a separate assembly language + // routine, since it would require argument processing, something we + // don't do now for performance. + + for (i = cif->nargs-1; i >= 0; i--) + { + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); + } + + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, + codeloc); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +static void +ffi_prep_args_raw(char *stack, extended_cif *ecif) +{ + memcpy (stack, ecif->avalue, ecif->cif->bytes); +} + +/* we borrow this routine from libffi (it must be changed, though, to + * actually call the function passed in the first argument. as of + * libffi-1.20, this is not the case.) + */ + +extern void +ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void +ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); +#endif /* X86_WIN32 */ + +void +ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue) +{ + extended_cif ecif; + void **avalue = (void **)fake_avalue; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + +#endif +#endif // __i386__ diff -r -u ./setup.py ./setup.py index 46b92fe..2bf6b4b 100644 --- ./setup.py +++ ./setup.py @@ -98,8 +98,14 @@ class PyBuildExt(build_ext): self.detect_modules() # Remove modules that are present on the disabled list - self.extensions = [ext for ext in self.extensions - if ext.name not in disabled_module_list] + extensions = [ext for ext in self.extensions + if ext.name not in disabled_module_list] + # move ctypes to the end, it depends on other modules + ext_map = dict((ext.name, i) for i, ext in enumerate(extensions)) + if "_ctypes" in ext_map: + ctypes = extensions.pop(ext_map["_ctypes"]) + extensions.append(ctypes) + self.extensions = extensions # Fix up the autodetected modules, prefixing all the source files # with Modules/ and adding Python's include directory to the path. @@ -1330,9 +1336,39 @@ class PyBuildExt(build_ext): # *** Uncomment these for TOGL extension only: # -lGL -lGLU -lXext -lXmu \ + def configure_ctypes_darwin(self, ext): + # Darwin (OS X) uses preconfigured files, in + # the Modules/_ctypes/libffi_osx directory. + srcdir = sysconfig.get_config_var('srcdir') + ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', + '_ctypes', 'libffi_osx')) + sources = [os.path.join(ffi_srcdir, p) + for p in ['ffi.c', + 'x86/darwin64.S', + 'x86/x86-darwin.S', + 'x86/x86-ffi_darwin.c', + 'x86/x86-ffi64.c', + 'powerpc/ppc-darwin.S', + 'powerpc/ppc-darwin_closure.S', + 'powerpc/ppc-ffi_darwin.c', + 'powerpc/ppc64-darwin_closure.S', + ]] + + # Add .S (preprocessed assembly) to C compiler source extensions. + self.compiler.src_extensions.append('.S') + + include_dirs = [os.path.join(ffi_srcdir, 'include'), + os.path.join(ffi_srcdir, 'powerpc')] + ext.include_dirs.extend(include_dirs) + ext.sources.extend(sources) + return True + def configure_ctypes(self, ext): if not self.use_system_libffi: - (srcdir,) = sysconfig.get_config_vars('srcdir') + if sys.platform == 'darwin': + return self.configure_ctypes_darwin(ext) + + srcdir = sysconfig.get_config_var('srcdir') ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', '_ctypes', 'libffi')) @@ -1347,7 +1383,10 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = [arg for arg in sysconfig.get_config_var("CONFIG_ARGS").split() + if (('--host=' in arg) or ('--build=' in arg))] + if not self.verbose: + config_args.append("-q") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. @@ -1367,10 +1406,12 @@ class PyBuildExt(build_ext): self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), - ffi_builddir, ffi_srcdir] + ffi_builddir, + os.path.join(ffi_srcdir, 'src')] extra_compile_args = fficonfig['ffi_cflags'].split() - ext.sources.extend(fficonfig['ffi_sources']) + ext.sources.extend(os.path.join(ffi_srcdir, f) for f in + fficonfig['ffi_sources']) ext.include_dirs.extend(include_dirs) ext.extra_compile_args.extend(extra_compile_args) return True @@ -1390,6 +1431,7 @@ class PyBuildExt(build_ext): if sys.platform == 'darwin': sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') # XXX Is this still needed? ## extra_link_args.extend(['-read_only_relocs', 'warning']) @@ -1419,7 +1461,14 @@ class PyBuildExt(build_ext): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = find_file('ffi.h', [], inc_dirs) + if sys.platform == 'darwin': + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + if not ffi_inc or ffi_inc[0] == '': + ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' fp = open(ffi_h) 005_osx_failed_modules.patch000066400000000000000000000076331476513315000337350ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.4/Python-2.5.4diff -r -u ./Mac/Modules/cg/_CGmodule.c ./Mac/Modules/cg/_CGmodule.c index 8115614..e36fce9 100755 --- ./Mac/Modules/cg/_CGmodule.c +++ ./Mac/Modules/cg/_CGmodule.c @@ -1025,6 +1025,7 @@ static PyObject *CGContextRefObj_CGContextSetShouldAntialias(CGContextRefObject return _res; } +#ifndef __LP64__ static PyObject *CGContextRefObj_SyncCGContextOriginWithPort(CGContextRefObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1055,6 +1056,7 @@ static PyObject *CGContextRefObj_ClipCGContextToRegion(CGContextRefObject *_self _res = Py_None; return _res; } +#endif static PyMethodDef CGContextRefObj_methods[] = { {"CGContextSaveGState", (PyCFunction)CGContextRefObj_CGContextSaveGState, 1, @@ -1173,10 +1175,12 @@ static PyMethodDef CGContextRefObj_methods[] = { PyDoc_STR("() -> None")}, {"CGContextSetShouldAntialias", (PyCFunction)CGContextRefObj_CGContextSetShouldAntialias, 1, PyDoc_STR("(int shouldAntialias) -> None")}, +#ifndef __LP64__ {"SyncCGContextOriginWithPort", (PyCFunction)CGContextRefObj_SyncCGContextOriginWithPort, 1, PyDoc_STR("(CGrafPtr port) -> None")}, {"ClipCGContextToRegion", (PyCFunction)CGContextRefObj_ClipCGContextToRegion, 1, PyDoc_STR("(Rect portRect, RgnHandle region) -> None")}, +#endif {NULL, NULL, 0} }; @@ -1254,6 +1258,7 @@ PyTypeObject CGContextRef_Type = { /* ------------------ End object type CGContextRef ------------------ */ +#ifndef __LP64__ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1271,10 +1276,13 @@ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) return _res; } +#endif static PyMethodDef CG_methods[] = { +#ifndef __LP64__ {"CreateCGContextForPort", (PyCFunction)CG_CreateCGContextForPort, 1, PyDoc_STR("(CGrafPtr) -> CGContextRef")}, +#endif {NULL, NULL, 0} }; diff -r -u ./Modules/_curses_panel.c ./Modules/_curses_panel.c index 0acf3fd..1728b59 100644 --- ./Modules/_curses_panel.c +++ ./Modules/_curses_panel.c @@ -56,7 +56,7 @@ typedef struct { PyTypeObject PyCursesPanel_Type; -#define PyCursesPanel_Check(v) ((v)->ob_type == &PyCursesPanel_Type) +#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type) /* Some helper functions. The problem is that there's always a window associated with a panel. To ensure that Python's GC doesn't pull @@ -178,12 +178,13 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo) po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); - return NULL; + po->wo = NULL; + Py_DECREF(po); + return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ static void PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } @@ -338,11 +341,10 @@ PyCursesPanel_GetAttr(PyCursesPanelObject *self, char *name) /* -------------------------------------------------------*/ PyTypeObject PyCursesPanel_Type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "_curses_panel.curses panel", /*tp_name*/ - sizeof(PyCursesPanelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + "_curses_panel.curses panel", /*tp_name*/ + sizeof(PyCursesPanelObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/ 0, /*tp_print*/ @@ -458,7 +460,7 @@ init_curses_panel(void) PyObject *m, *d, *v; /* Initialize object type */ - PyCursesPanel_Type.ob_type = &PyType_Type; + Py_TYPE(&PyCursesPanel_Type) = &PyType_Type; import_curses(); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/000077500000000000000000000000001476513315000246055ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/Python-2.5.5/000077500000000000000000000000001476513315000265335ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325520ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/Python-2.5.5--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-svnversion.patch000066400000000000000000000023661476513315000333750ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/Python-2.5.5--- configure.in +++ configure.in @@ -767,7 +767,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in --- Makefile.pre.in +++ Makefile.pre.in @@ -501,7 +501,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ --- Modules/getbuildinfo.c +++ Modules/getbuildinfo.c @@ -48,5 +48,5 @@ static const char svnversion[] = SVNVERSION; if (svnversion[0] != '$') return svnversion; /* it was interpolated, or passed on command line */ - return "exported"; + return "Unversioned directory"; } --- Python/sysmodule.c +++ Python/sysmodule.c @@ -1161,7 +1161,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0 && strcmp(svnversion, "exported") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); 002_darwin_c_source.patch000066400000000000000000000132671476513315000332350ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/Python-2.5.5diff -r -u ./configure ../Python-2.5/configure --- ./configure 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure 2013-07-19 15:27:46.000000000 +0900 @@ -1396,6 +1396,16 @@ _ACEOF +# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable +# them. + +cat >>confdefs.h <<\_ACEOF +#define _DARWIN_C_SOURCE 1 +_ACEOF + + + define_xopen_source=yes # Arguments passed to configure. @@ -3885,11 +3895,110 @@ ;; # is there any other compiler on Darwin besides gcc? Darwin*) - BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" + # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd + # used to be here, but non-Apple gcc doesn't accept them. + if test "${CC}" = gcc + then + { echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +echo -n "checking which compiler should be used... " >&6; } + case "${UNIVERSALSDK}" in + */MacOSX10.4u.sdk) + # Build using 10.4 SDK, force usage of gcc when the + # compiler is gcc, otherwise the user will get very + # confusing error messages when building on OSX 10.6 + CC=gcc-4.0 + CPP=cpp-4.0 + ;; + esac + { echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +echo "$CC" >&6; } + fi + + if test "${enable_universalsdk}"; then - BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + UNIVERSAL_ARCH_FLAGS="" + if test "$UNIVERSAL_ARCHS" = "32-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" + ARCH_RUN_32BIT="" + LIPO_32BIT_FLAGS="" + elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + + elif test "$UNIVERSAL_ARCHS" = "all" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + elif test "$UNIVERSAL_ARCHS" = "intel" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386" + + elif test "$UNIVERSAL_ARCHS" = "3-way" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + else + as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + + fi + + + CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}" + if test "${UNIVERSALSDK}" != "/" + then + CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}" + LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}" + CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}" + fi fi + # Calculate the right deployment target for this build. + # + cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` + if test ${cur_target} '>' 10.2 && \ + test ${cur_target} '<' 10.6 + then + cur_target=10.3 + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "3-way"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "intel"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then + cur_target='10.5' + fi + else + if test `/usr/bin/arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi + fi + CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} + + # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the + # environment with a value that is the same as what we'll use + # in the Makefile to ensure that we'll get the same compiler + # environment during configure and build time. + MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" + export MACOSX_DEPLOYMENT_TARGET + EXPORT_MACOSX_DEPLOYMENT_TARGET='' + ;; OSF*) BASECFLAGS="$BASECFLAGS -mieee" @@ -10851,7 +10960,7 @@ if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -10863,7 +10972,7 @@ else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac diff -r -u ./pyconfig.h.in ../Python-2.5/pyconfig.h.in --- ./pyconfig.h.in 2006-07-30 23:09:47.000000000 +0900 +++ ../Python-2.5/pyconfig.h.in 2013-07-17 23:12:31.000000000 +0900 @@ -912,6 +912,11 @@ /* Define on Irix to enable u_int */ #undef _BSD_TYPES +/* Define on Darwin to activate all library features */ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE +#endif + /* This must be set to 64 on some systems to enable large file support. */ #undef _FILE_OFFSET_BITS pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/Python-2.5.5/003_osx_lp64.patch000066400000000000000000000215441476513315000316220ustar00rootroot00000000000000diff -r -u ./Include/pymactoolbox.h ../Python-2.5/Include/pymactoolbox.h --- ./Include/pymactoolbox.h 2004-11-05 16:02:59.000000000 +0900 +++ ../Python-2.5/Include/pymactoolbox.h 2013-07-17 23:38:51.000000000 +0900 @@ -8,7 +8,10 @@ #endif #include + +#ifndef __LP64__ #include +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +21,11 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* __LP64__ */ + /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,8 +89,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +109,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +169,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +178,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); diff -r -u ./Mac/Modules/res/_Resmodule.c ../Python-2.5/Mac/Modules/res/_Resmodule.c --- ./Mac/Modules/res/_Resmodule.c 2005-07-04 05:59:44.000000000 +0900 +++ ../Python-2.5/Mac/Modules/res/_Resmodule.c 2013-07-17 23:38:51.000000000 +0900 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -1152,6 +1154,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1290,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1331,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1418,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1444,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1541,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* __LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1645,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1656,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1670,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* __LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* __LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, diff -r -u ./Modules/_ctypes/libffi/src/darwin/ffitarget.h ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h --- ./Modules/_ctypes/libffi/src/darwin/ffitarget.h 2006-05-26 06:58:05.000000000 +0900 +++ ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h 2013-07-17 23:38:51.000000000 +0900 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN diff -r -u ./Python/mactoolboxglue.c ../Python-2.5/Python/mactoolboxglue.c --- ./Python/mactoolboxglue.c 2006-07-12 01:44:25.000000000 +0900 +++ ../Python-2.5/Python/mactoolboxglue.c 2013-07-17 23:39:09.000000000 +0900 @@ -106,6 +106,7 @@ } +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +154,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +419,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +432,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/Python-2.5.5/004_osx_libffi.patch000066400000000000000000005661361476513315000323040ustar00rootroot00000000000000diff -r -u ./Modules/_ctypes/libffi_osx/LICENSE ./Modules/_ctypes/libffi_osx/LICENSE new file mode 100644 index 0000000..f591795 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/LICENSE @@ -0,0 +1,20 @@ +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff -r -u ./Modules/_ctypes/libffi_osx/README ./Modules/_ctypes/libffi_osx/README new file mode 100644 index 0000000..1fc2747 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README @@ -0,0 +1,500 @@ +This directory contains the libffi package, which is not part of GCC but +shipped with GCC as convenience. + +Status +====== + +libffi-2.00 has not been released yet! This is a development snapshot! + +libffi-1.20 was released on October 5, 1998. Check the libffi web +page for updates: . + + +What is libffi? +=============== + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. Libffi can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The libffi library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + +Ffi stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +libffi library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above libffi that handles type conversions for values passed +between the two languages. + + +Supported Platforms and Prerequisites +===================================== + +Libffi has been ported to: + + SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) + + Irix 5.3 & 6.2 (System V/o32 & n32) + + Intel x86 - Linux (System V ABI) + + Alpha - Linux and OSF/1 + + m68k - Linux (System V ABI) + + PowerPC - Linux (System V ABI, Darwin, AIX) + + ARM - Linux (System V ABI) + +Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are +that other versions will work. Libffi has also been built and tested +with the SGI compiler tools. + +On PowerPC, the tests failed (see the note below). + +You must use GNU make to build libffi. SGI's make will not work. +Sun's probably won't either. + +If you port libffi to another platform, please let me know! I assume +that some will be easy (x86 NetBSD), and others will be more difficult +(HP). + + +Installing libffi +================= + +[Note: before actually performing any of these installation steps, + you may wish to read the "Platform Specific Notes" below.] + +First you must configure the distribution for your particular +system. Go to the directory you wish to build libffi in and run the +"configure" program found in the root directory of the libffi source +distribution. + +You may want to tell configure where to install the libffi library and +header files. To do that, use the --prefix configure switch. Libffi +will install under /usr/local by default. + +If you want to enable extra run-time debugging checks use the the +--enable-debug configure switch. This is useful when your program dies +mysteriously while using libffi. + +Another useful configure switch is --enable-purify-safety. Using this +will add some extra code which will suppress certain warnings when you +are using Purify with libffi. Only use this switch when using +Purify, as it will slow down the library. + +Configure has many other options. Use "configure --help" to see them all. + +Once configure has finished, type "make". Note that you must be using +GNU make. SGI's make will not work. Sun's probably won't either. +You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. + +To ensure that libffi is working as advertised, type "make test". + +To install the library and header files, type "make install". + + +Using libffi +============ + + The Basics + ---------- + +Libffi assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, +as well as the return type of the function. + +The first thing you must do is create an ffi_cif object that matches +the signature of the function you wish to call. The cif in ffi_cif +stands for Call InterFace. To prepare a call interface object, use the +following function: + +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, ffi_type **atypes); + + CIF is a pointer to the call interface object you wish + to initialize. + + ABI is an enum that specifies the calling convention + to use for the call. FFI_DEFAULT_ABI defaults + to the system's native calling convention. Other + ABI's may be used with care. They are system + specific. + + NARGS is the number of arguments this function accepts. + libffi does not yet support vararg functions. + + RTYPE is a pointer to an ffi_type structure that represents + the return type of the function. Ffi_type objects + describe the types of values. libffi provides + ffi_type objects for many of the native C types: + signed int, unsigned int, signed char, unsigned char, + etc. There is also a pointer ffi_type object and + a void ffi_type. Use &ffi_type_void for functions that + don't return values. + + ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. + If NARGS is 0, this is ignored. + + +ffi_prep_cif will return a status code that you are responsible +for checking. It will be one of the following: + + FFI_OK - All is good. + + FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif + came across is bad. + + +Before making the call, the VALUES vector should be initialized +with pointers to the appropriate argument values. + +To call the function using the initialized ffi_cif, use the +ffi_call function: + +void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); + + CIF is a pointer to the ffi_cif initialized specifically + for this function. + + FN is a pointer to the function you want to call. + + RVALUE is a pointer to a chunk of memory that is to hold the + result of the function call. Currently, it must be + at least one word in size (except for the n32 version + under Irix 6.x, which must be a pointer to an 8 byte + aligned value (a long long). It must also be at least + word aligned (depending on the return type, and the + system's alignment requirements). If RTYPE is + &ffi_type_void, this is ignored. If RVALUE is NULL, + the return value is discarded. + + AVALUES is a vector of void* that point to the memory locations + holding the argument values for a call. + If NARGS is 0, this is ignored. + + +If you are expecting a return value from FN it will have been stored +at RVALUE. + + + + An Example + ---------- + +Here is a trivial example that calls puts() a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_uint; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + + + Aggregate Types + --------------- + +Although libffi has no special support for unions or bit-fields, it is +perfectly happy passing structures back and forth. You must first +describe the structure to libffi by creating a new ffi_type object +for it. Here is the definition of ffi_type: + + typedef struct _ffi_type + { + unsigned size; + short alignment; + short type; + struct _ffi_type **elements; + } ffi_type; + +All structures must have type set to FFI_TYPE_STRUCT. You may set +size and alignment to 0. These will be calculated and reset to the +appropriate values by ffi_prep_cif(). + +elements is a NULL terminated array of pointers to ffi_type objects +that describe the type of the structure elements. These may, in turn, +be structure elements. + +The following example initializes a ffi_type object representing the +tm struct from Linux's time.h: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + + +Platform Specific Notes +======================= + + Intel x86 + --------- + +There are no known problems with the x86 port. + + Sun SPARC - SunOS 4.1.3 & Solaris 2.x + ------------------------------------- + +You must use GNU Make to build libffi on Sun platforms. + + MIPS - Irix 5.3 & 6.x + --------------------- + +Irix 6.2 and better supports three different calling conventions: o32, +n32 and n64. Currently, libffi only supports both o32 and n32 under +Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be +configured for whichever calling convention it was built for. + +By default, the configure script will try to build libffi with the GNU +development tools. To build libffi with the SGI development tools, set +the environment variable CC to either "cc -32" or "cc -n32" before +running configure under Irix 6.x (depending on whether you want an o32 +or n32 library), or just "cc" for Irix 5.3. + +With the n32 calling convention, when returning structures smaller +than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. +Here's one way of forcing this: + + double struct_storage[2]; + my_small_struct *s = (my_small_struct *) struct_storage; + /* Use s for RVALUE */ + +If you don't do this you are liable to get spurious bus errors. + +"long long" values are not supported yet. + +You must use GNU Make to build libffi on SGI platforms. + + ARM - System V ABI + ------------------ + +The ARM port was performed on a NetWinder running ARM Linux ELF +(2.0.31) and gcc 2.8.1. + + + + PowerPC System V ABI + -------------------- + +There are two `System V ABI's which libffi implements for PowerPC. +They differ only in how small structures are returned from functions. + +In the FFI_SYSV version, structures that are 8 bytes or smaller are +returned in registers. This is what GCC does when it is configured +for solaris, and is what the System V ABI I have (dated September +1995) says. + +In the FFI_GCC_SYSV version, all structures are returned the same way: +by passing a pointer as the first argument to the function. This is +what GCC does when it is configured for linux or a generic sysv +target. + +EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a +inconsistency with the SysV ABI: When a procedure is called with many +floating-point arguments, some of them get put on the stack. They are +all supposed to be stored in double-precision format, even if they are +only single-precision, but EGCS stores single-precision arguments as +single-precision anyway. This causes one test to fail (the `many +arguments' test). + + +What's With The Crazy Comments? +=============================== + +You might notice a number of cryptic comments in the code, delimited +by /*@ and @*/. These are annotations read by the program LCLint, a +tool for statically checking C programs. You can read all about it at +. + + +History +======= + +1.20 Oct-5-98 + Raffaele Sena produces ARM port. + +1.19 Oct-5-98 + Fixed x86 long double and long long return support. + m68k bug fixes from Andreas Schwab. + Patch for DU assembler compatibility for the Alpha from Richard + Henderson. + +1.18 Apr-17-98 + Bug fixes and MIPS configuration changes. + +1.17 Feb-24-98 + Bug fixes and m68k port from Andreas Schwab. PowerPC port from + Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + +1.16 Feb-11-98 + Richard Henderson produces Alpha port. + +1.15 Dec-4-97 + Fixed an n32 ABI bug. New libtool, auto* support. + +1.14 May-13-97 + libtool is now used to generate shared and static libraries. + Fixed a minor portability problem reported by Russ McManus + . + +1.13 Dec-2-96 + Added --enable-purify-safety to keep Purify from complaining + about certain low level code. + Sparc fix for calling functions with < 6 args. + Linux x86 a.out fix. + +1.12 Nov-22-96 + Added missing ffi_type_void, needed for supporting void return + types. Fixed test case for non MIPS machines. Cygnus Support + is now Cygnus Solutions. + +1.11 Oct-30-96 + Added notes about GNU make. + +1.10 Oct-29-96 + Added configuration fix for non GNU compilers. + +1.09 Oct-29-96 + Added --enable-debug configure switch. Clean-ups based on LCLint + feedback. ffi_mips.h is always installed. Many configuration + fixes. Fixed ffitest.c for sparc builds. + +1.08 Oct-15-96 + Fixed n32 problem. Many clean-ups. + +1.07 Oct-14-96 + Gordon Irlam rewrites v8.S again. Bug fixes. + +1.06 Oct-14-96 + Gordon Irlam improved the sparc port. + +1.05 Oct-14-96 + Interface changes based on feedback. + +1.04 Oct-11-96 + Sparc port complete (modulo struct passing bug). + +1.03 Oct-10-96 + Passing struct args, and returning struct values works for + all architectures/calling conventions. Expanded tests. + +1.02 Oct-9-96 + Added SGI n32 support. Fixed bugs in both o32 and Linux support. + Added "make test". + +1.01 Oct-8-96 + Fixed float passing bug in mips version. Restructured some + of the code. Builds cleanly with SGI tools. + +1.00 Oct-7-96 + First release. No public announcement. + + +Authors & Credits +================= + +libffi was written by Anthony Green . + +Portions of libffi were derived from Gianni Mariani's free gencall +library for Silicon Graphics machines. + +The closure mechanism was designed and implemented by Kresten Krab +Thorup. + +The Sparc port was derived from code contributed by the fine folks at +Visible Decisions Inc . Further enhancements were +made by Gordon Irlam at Cygnus Solutions . + +The Alpha port was written by Richard Henderson at Cygnus Solutions. + +Andreas Schwab ported libffi to m68k Linux and provided a number of +bug fixes. + +Geoffrey Keating ported libffi to the PowerPC. + +Raffaele Sena ported libffi to the ARM. + +Jesper Skov and Andrew Haley both did more than their fair share of +stepping through the code and tracking down bugs. + +Thanks also to Tom Tromey for bug fixes and configuration help. + +Thanks to Jim Blandy, who provided some useful feedback on the libffi +interface. + +If you have a problem, or have found a bug, please send a note to +green@cygnus.com. diff -r -u ./Modules/_ctypes/libffi_osx/README.pyobjc ./Modules/_ctypes/libffi_osx/README.pyobjc new file mode 100644 index 0000000..405d85f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README.pyobjc @@ -0,0 +1,5 @@ +This directory contains a slightly modified version of libffi, extracted from +the GCC source-tree. + +The only modifications are those that are necessary to compile libffi using +the Apple provided compiler and outside of the GCC source tree. diff -r -u ./Modules/_ctypes/libffi_osx/ffi.c ./Modules/_ctypes/libffi_osx/ffi.c new file mode 100644 index 0000000..bf42093 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/ffi.c @@ -0,0 +1,226 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +/* Round up to FFI_SIZEOF_ARG. */ +#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + +/* Perform machine independent initialization of aggregate type + specifications. */ + +static ffi_status +initialize_aggregate( +/*@out@*/ ffi_type* arg) +{ +/*@-usedef@*/ + + if (arg == NULL || arg->elements == NULL || + arg->size != 0 || arg->alignment != 0) + return FFI_BAD_TYPEDEF; + + ffi_type** ptr = &(arg->elements[0]); + + while ((*ptr) != NULL) + { + if (((*ptr)->size == 0) && (initialize_aggregate(*ptr) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#ifdef POWERPC_DARWIN + int curalign = (*ptr)->alignment; + + if (ptr != &(arg->elements[0])) + { + if (curalign > 4 && curalign != 16) + curalign = 4; + } + + arg->size = ALIGN(arg->size, curalign); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > curalign) ? + arg->alignment : curalign; +#else + arg->size = ALIGN(arg->size, (*ptr)->alignment); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > (*ptr)->alignment) ? + arg->alignment : (*ptr)->alignment; +#endif + + ptr++; + } + + /* Structure size includes tail padding. This is important for + structures that fit in one register on ABIs like the PowerPC64 + Linux ABI that right justify small structs in a register. + It's also needed for nested structure layout, for example + struct A { long a; char b; }; struct B { struct A x; char y; }; + should find y at an offset of 2*sizeof(long) and result in a + total size of 3*sizeof(long). */ + arg->size = ALIGN(arg->size, arg->alignment); + + if (arg->size == 0) + return FFI_BAD_TYPEDEF; + + return FFI_OK; + +/*@=usedef@*/ +} + +#ifndef __CRIS__ +/* The CRIS ABI specifies structure elements to have byte + alignment only, so it completely overrides this functions, + which assumes "natural" alignment and padding. */ + +/* Perform machine independent ffi_cif preparation, then call + machine dependent routine. */ + +#if defined(X86_DARWIN) + +static inline bool +struct_on_stack( + int size) +{ + if (size > 8) + return true; + + /* This is not what the ABI says, but is what is really implemented */ + switch (size) + { + case 1: + case 2: + case 4: + case 8: + return false; + + default: + return true; + } +} + +#endif // defined(X86_DARWIN) + +// Arguments' ffi_type->alignment must be nonzero. +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes) +{ + if (cif == NULL) + return FFI_BAD_TYPEDEF; + + if (abi <= FFI_FIRST_ABI || abi > FFI_DEFAULT_ABI) + return FFI_BAD_ABI; + + unsigned int bytes = 0; + unsigned int i; + ffi_type** ptr; + + cif->abi = abi; + cif->arg_types = atypes; + cif->nargs = nargs; + cif->rtype = rtype; + cif->flags = 0; + + /* Initialize the return type if necessary */ + /*@-usedef@*/ + if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) + return FFI_BAD_TYPEDEF; + /*@=usedef@*/ + + /* Perform a sanity check on the return type */ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT +#ifdef SPARC + && (cif->abi != FFI_V9 || cif->rtype->size > 32) +#endif +#ifdef X86_DARWIN + && (struct_on_stack(cif->rtype->size)) +#endif + ) + bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + /* Initialize any uninitialized aggregate type definitions */ + if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + if ((*ptr)->alignment == 0) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type, do this + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#if defined(X86_DARWIN) + { + int align = (*ptr)->alignment; + + if (align > 4) + align = 4; + + if ((align - 1) & bytes) + bytes = ALIGN(bytes, align); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#elif !defined __x86_64__ && !defined S390 && !defined PA +#ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) + || ((*ptr)->type == FFI_TYPE_LONGDOUBLE + && cif->abi != FFI_V9)) + bytes += sizeof(void*); + else +#endif + { + /* Add any padding if necessary */ + if (((*ptr)->alignment - 1) & bytes) + bytes = ALIGN(bytes, (*ptr)->alignment); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#endif + } + + cif->bytes = bytes; + + /* Perform machine dependent cif processing */ + return ffi_prep_cif_machdep(cif); +} +#endif /* not __CRIS__ */ diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi.h ./Modules/_ctypes/libffi_osx/include/ffi.h new file mode 100644 index 0000000..c104a5c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi.h @@ -0,0 +1,355 @@ +/* -----------------------------------------------------------------*-C-*- + libffi PyOBJC - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and closure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifdef MACOSX +# if defined(__i386__) || defined(__x86_64__) +# define X86_DARWIN +# elif defined(__ppc__) || defined(__ppc64__) +# define POWERPC_DARWIN +# else +# error "Unsupported MacOS X CPU type" +# endif +#else +#error "Unsupported OS type" +#endif + +/* ---- System configuration information --------------------------------- */ + +#include "ffitarget.h" +#include "fficonfig.h" + +#ifndef LIBFFI_ASM + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# endif +#endif + +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +#error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +#error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +#error "int size not supported" +#endif + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != 9223372036854775807 +# error "no 64-bit data type supported" +# endif +#elif LONG_MAX != 9223372036854775807 +#error "long size not supported" +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t + can hold a pointer. */ + +typedef struct _ffi_type { + size_t size; + unsigned short alignment; + unsigned short type; +/*@null@*/ struct _ffi_type** elements; +} ffi_type; + +/* These are defined in types.c */ +extern ffi_type ffi_type_void; +extern ffi_type ffi_type_uint8; +extern ffi_type ffi_type_sint8; +extern ffi_type ffi_type_uint16; +extern ffi_type ffi_type_sint16; +extern ffi_type ffi_type_uint32; +extern ffi_type ffi_type_sint32; +extern ffi_type ffi_type_uint64; +extern ffi_type ffi_type_sint64; +extern ffi_type ffi_type_float; +extern ffi_type ffi_type_double; +extern ffi_type ffi_type_longdouble; +extern ffi_type ffi_type_pointer; + +typedef enum ffi_status { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct ffi_cif { + ffi_abi abi; + unsigned nargs; +/*@dependent@*/ ffi_type** arg_types; +/*@dependent@*/ ffi_type* rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +void +ffi_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_raw_size( + ffi_cif* cif); + +/* This is analogous to the raw API, except it uses Java parameter + packing, even on 64-bit machines. I.e. on 64-bit machines + longs and doubles are followed by an empty 64-bit word. */ +void +ffi_java_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_java_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_java_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_java_raw_size( + ffi_cif* cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +typedef struct ffi_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void* user_data; +} ffi_closure; + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void* user_data); + +void ffi_closure_free(void *); +void *ffi_closure_alloc (size_t size, void **code); + +typedef struct ffi_raw_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + +#if !FFI_NATIVE_RAW_API + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + void (*translate_args)(ffi_cif*,void*,void**,void*); + void* this_closure; +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void* user_data; +} ffi_raw_closure; + +ffi_status +ffi_prep_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +ffi_status +ffi_prep_java_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +#endif // FFI_CLOSURES + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes); + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +#endif // #ifndef LIBFFI_ASM +/* ---- Definitions shared with assembly code ---------------------------- */ + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 + +#ifdef HAVE_LONG_DOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#else +# define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif + +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_POINTER + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef LIBFFI_H diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi_common.h ./Modules/_ctypes/libffi_osx/include/ffi_common.h new file mode 100644 index 0000000..685a358 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi_common.h @@ -0,0 +1,102 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fficonfig.h" + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char* alloca(); +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy((s), (d), (n)) +# endif +#endif + +/*#if defined(FFI_DEBUG) +#include +#endif*/ + +#ifdef FFI_DEBUG +#include + +/*@exits@*/ void +ffi_assert( +/*@temp@*/ char* expr, +/*@temp@*/ char* file, + int line); +void +ffi_stop_here(void); +void +ffi_type_test( +/*@temp@*/ /*@out@*/ ffi_type* a, +/*@temp@*/ char* file, + int line); + +# define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +# define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +# define FFI_ASSERT_VALID_TYPE(x) ffi_type_test(x, __FILE__, __LINE__) +#else +# define FFI_ASSERT(x) +# define FFI_ASSERT_AT(x, f, l) +# define FFI_ASSERT_VALID_TYPE(x) +#endif // #ifdef FFI_DEBUG + +#define ALIGN(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) + +/* Perform machine dependent cif processing */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif); + +/* Extended cif, used in callback from assembly routine */ +typedef struct extended_cif { +/*@dependent@*/ ffi_cif* cif; +/*@dependent@*/ void* rvalue; +/*@dependent@*/ void** avalue; +} extended_cif; + +/* Terse sized type definitions. */ +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +typedef float FLOAT32; + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef FFI_COMMON_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/fficonfig.h ./Modules/_ctypes/libffi_osx/include/fficonfig.h new file mode 100644 index 0000000..2172490 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/fficonfig.h @@ -0,0 +1,150 @@ +/* Manually created fficonfig.h for Darwin on PowerPC or Intel + + This file is manually generated to do away with the need for autoconf and + therefore make it easier to cross-compile and build fat binaries. + + NOTE: This file was added by PyObjC. +*/ + +#ifndef MACOSX +#error "This file is only supported on Mac OS X" +#endif + +#if defined(__i386__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__x86_64__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__ppc__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# if __GNUC__ >= 4 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 +# else +# undef HAVE_LONG_DOUBLE +# define SIZEOF_LONG_DOUBLE 8 +# endif + +#elif defined(__ppc64__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#else +#error "Unknown CPU type" +#endif + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "aw" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Define this is you do not want support for the raw API. */ +#define FFI_NO_RAW_API 1 + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +/* #undef HAVE_MMAP_DEV_ZERO */ + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +/* #undef HAVE_RO_EH_FRAME */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://gcc.gnu.org/bugs.html" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.1" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if you are using Purify and want to suppress spurious messages. */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "2.1-pyobjc" + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) .hidden name +# else +# define FFI_HIDDEN __attribute__((visibility ("hidden"))) +# endif +#else +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) +# else +# define FFI_HIDDEN +# endif +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ffitarget.h ./Modules/_ctypes/libffi_osx/include/ffitarget.h new file mode 100644 index 0000000..faaa30d --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffitarget.h @@ -0,0 +1,13 @@ +/* Dispatch to the right ffitarget file. This file is PyObjC specific; in a + normal build, the build environment copies the file to the right location or + sets up the right include flags. We want to do neither because that would + make building fat binaries harder. +*/ + +#if defined(__i386__) || defined(__x86_64__) +#include "x86-ffitarget.h" +#elif defined(__ppc__) || defined(__ppc64__) +#include "ppc-ffitarget.h" +#else +#error "Unsupported CPU type" +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h new file mode 100644 index 0000000..2318421 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h @@ -0,0 +1,104 @@ +/* -----------------------------------------------------------------*-C-*- + ppc-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if (defined(POWERPC) && defined(__powerpc64__)) || \ + (defined(POWERPC_DARWIN) && defined(__ppc64__)) +#define POWERPC64 +#endif + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef POWERPC + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, +# ifdef POWERPC64 + FFI_DEFAULT_ABI = FFI_LINUX64, +# else + FFI_DEFAULT_ABI = FFI_GCC_SYSV, +# endif +#endif + +#ifdef POWERPC_AIX + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_AIX, +#endif + +#ifdef POWERPC_DARWIN + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_DARWIN, +#endif + +#ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_NATIVE_RAW_API 0 + +/* Needed for FFI_SYSV small structure returns. */ +#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + +#if defined(POWERPC64) /*|| defined(POWERPC_AIX)*/ +# define FFI_TRAMPOLINE_SIZE 48 +#elif defined(POWERPC_AIX) +# define FFI_TRAMPOLINE_SIZE 24 +#else +# define FFI_TRAMPOLINE_SIZE 40 +#endif + +#ifndef LIBFFI_ASM +# if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) +typedef struct ffi_aix_trampoline_struct { + void* code_pointer; /* Pointer to ffi_closure_ASM */ + void* toc; /* TOC */ + void* static_chain; /* Pointer to closure */ +} ffi_aix_trampoline_struct; +# endif +#endif // #ifndef LIBFFI_ASM + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h new file mode 100644 index 0000000..55c2b6c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h @@ -0,0 +1,88 @@ +/* -----------------------------------------------------------------*-C-*- + x86-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if defined(X86_64) && defined(__i386__) +# undef X86_64 +# define X86 +#endif + +#if defined(__x86_64__) +# ifndef X86_64 +# define X86_64 +# endif +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + + /* ---- Intel x86 Win32 ---------- */ +#ifdef X86_WIN32 + FFI_SYSV, + FFI_STDCALL, + /* TODO: Add fastcall support for the sake of completeness */ + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + /* ---- Intel x86 and AMD x86-64 - */ +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) + FFI_SYSV, + FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ +# ifdef __i386__ + FFI_DEFAULT_ABI = FFI_SYSV, +# else + FFI_DEFAULT_ABI = FFI_UNIX64, +# endif +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 + +#if defined(X86_64) || (defined(__x86_64__) && defined(X86_DARWIN)) +# define FFI_TRAMPOLINE_SIZE 24 +# define FFI_NATIVE_RAW_API 0 +#else +# define FFI_TRAMPOLINE_SIZE 10 +# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S new file mode 100644 index 0000000..f143dbd --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S @@ -0,0 +1,365 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc-darwin.S - Copyright (c) 2000 John Hornkvist + Copyright (c) 2004 Free Software Foundation, Inc. + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include +#include +#include + +.text + .align 2 +.globl _ffi_prep_args + +.text + .align 2 +.globl _ffi_call_DARWIN + +.text + .align 2 +_ffi_call_DARWIN: +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved. */ + +LFB1: + /* Save the old stack pointer as AP. */ + mr r8,r1 + +LCFI0: +#if defined(__ppc64__) + /* Allocate the stack space we need. + r4 (size of input data) + 48 bytes (linkage area) + 40 bytes (saved registers) + 8 bytes (extra FPR) + r4 + 96 bytes total + */ + + addi r4,r4,-96 // Add our overhead. + li r0,-32 // Align to 32 bytes. + and r4,r4,r0 +#endif + stgux r1,r1,r4 // Grow the stack. + mflr r9 + + /* Save registers we use. */ +#if defined(__ppc64__) + std r27,-40(r8) +#endif + stg r28,MODE_CHOICE(-16,-32)(r8) + stg r29,MODE_CHOICE(-12,-24)(r8) + stg r30,MODE_CHOICE(-8,-16)(r8) + stg r31,MODE_CHOICE(-4,-8)(r8) + stg r9,SF_RETURN(r8) /* return address */ +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + stg r2,MODE_CHOICE(20,40)(r1) +#endif + +LCFI1: +#if defined(__ppc64__) + mr r27,r3 // our extended_cif +#endif + /* Save arguments over call. */ + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ + +LCFI2: + /* Call ffi_prep_args. */ + mr r4,r1 + li r9,0 + mtctr r12 /* r12 holds address of _ffi_prep_args. */ + bctrl +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + lg r2,MODE_CHOICE(20,40)(r1) +#endif + + /* Now do the call. + Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40,r31 + + /* Load all those argument registers. + We have set up a nice stack frame, just load it into registers. */ + lg r3,SF_ARG1(r1) + lg r4,SF_ARG2(r1) + lg r5,SF_ARG3(r1) + lg r6,SF_ARG4(r1) + nop + lg r7,SF_ARG5(r1) + lg r8,SF_ARG6(r1) + lg r9,SF_ARG7(r1) + lg r10,SF_ARG8(r1) + + /* Load all the FP registers. */ + bf 6,L2 /* No floats to load. */ +#if defined(__ppc64__) + lfd f1,MODE_CHOICE(-16,-40)-(14*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(11*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(10*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(7*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(6*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(3*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(2*8)(r28) + lfd f14,MODE_CHOICE(-16,-40)-(1*8)(r28) +#elif defined(__ppc__) + lfd f1,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(11*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(10*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(7*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(6*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(3*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(2*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(1*8)(r28) +#else +#error undefined architecture +#endif + +L2: + mr r12,r29 // Put the target address in r12 as specified. + mtctr r12 // Get the address to call into CTR. + nop + nop + bctrl // Make the call. + + // Deal with the return value. +#if defined(__ppc64__) + mtcrf 0x3,r31 // flags in cr6 and cr7 + bt 27,L(st_return_value) +#elif defined(__ppc__) + mtcrf 0x1,r31 // flags in cr7 +#else +#error undefined architecture +#endif + + bt 30,L(done_return_value) + bt 29,L(fp_return_value) + stg r3,0(r30) +#if defined(__ppc__) + bf 28,L(done_return_value) // Store the second long if necessary. + stg r4,4(r30) +#endif + // Fall through + +L(done_return_value): + lg r1,0(r1) // Restore stack pointer. + // Restore the registers we used. + lg r9,SF_RETURN(r1) // return address + lg r31,MODE_CHOICE(-4,-8)(r1) + mtlr r9 + lg r30,MODE_CHOICE(-8,-16)(r1) + lg r29,MODE_CHOICE(-12,-24)(r1) + lg r28,MODE_CHOICE(-16,-32)(r1) +#if defined(__ppc64__) + ld r27,-40(r1) +#endif + blr + +#if defined(__ppc64__) +L(st_return_value): + // Grow the stack enough to fit the registers. Leave room for 8 args + // to trample the 1st 8 slots in param area. + stgu r1,-SF_ROUND(280)(r1) // 64 + 104 + 48 + 64 + + // Store GPRs + std r3,SF_ARG9(r1) + std r4,SF_ARG10(r1) + std r5,SF_ARG11(r1) + std r6,SF_ARG12(r1) + nop + std r7,SF_ARG13(r1) + std r8,SF_ARG14(r1) + std r9,SF_ARG15(r1) + std r10,SF_ARG16(r1) + + // Store FPRs + nop + bf 26,L(call_struct_to_ram_form) + stfd f1,SF_ARG17(r1) + stfd f2,SF_ARG18(r1) + stfd f3,SF_ARG19(r1) + stfd f4,SF_ARG20(r1) + nop + stfd f5,SF_ARG21(r1) + stfd f6,SF_ARG22(r1) + stfd f7,SF_ARG23(r1) + stfd f8,SF_ARG24(r1) + nop + stfd f9,SF_ARG25(r1) + stfd f10,SF_ARG26(r1) + stfd f11,SF_ARG27(r1) + stfd f12,SF_ARG28(r1) + nop + stfd f13,SF_ARG29(r1) + +L(call_struct_to_ram_form): + ld r3,0(r27) // extended_cif->cif* + ld r3,16(r3) // ffi_cif->rtype* + addi r4,r1,SF_ARG9 // stored GPRs + addi r6,r1,SF_ARG17 // stored FPRs + li r5,0 // GPR size ptr (NULL) + li r7,0 // FPR size ptr (NULL) + li r8,0 // FPR count ptr (NULL) + li r10,0 // struct offset (NULL) + mr r9,r30 // return area + bl Lffi64_struct_to_ram_form$stub + lg r1,0(r1) // Restore stack pointer. + b L(done_return_value) +#endif + +L(fp_return_value): + /* Do we have long double to store? */ + bf 31,L(fd_return_value) + stfd f1,0(r30) + stfd f2,8(r30) + b L(done_return_value) + +L(fd_return_value): + /* Do we have double to store? */ + bf 28,L(float_return_value) + stfd f1,0(r30) + b L(done_return_value) + +L(float_return_value): + /* We only have a float to store. */ + stfs f1,0(r30) + b L(done_return_value) + +LFE1: +/* END(_ffi_call_DARWIN) */ + +/* Provide a null definition of _ffi_call_AIX. */ +.text + .align 2 +.globl _ffi_call_AIX +.text + .align 2 +_ffi_call_AIX: + blr +/* END(_ffi_call_AIX) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_call_DARWIN.eh +_ffi_call_DARWIN.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align LOG2_GPR_BYTES +LEFDE1: + +#if defined(__ppc64__) +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_ram_form$stub: + .indirect_symbol _ffi64_struct_to_ram_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_ram_form + +LO$ffi64_struct_to_ram_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_ram_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_ram_form + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ +#endif // __ppc__ || __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h new file mode 100644 index 0000000..cf4bd50 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h @@ -0,0 +1,85 @@ +/* ----------------------------------------------------------------------- + ppc-darwin.h - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define L(x) x + +#define SF_ARG9 MODE_CHOICE(56,112) +#define SF_ARG10 MODE_CHOICE(60,120) +#define SF_ARG11 MODE_CHOICE(64,128) +#define SF_ARG12 MODE_CHOICE(68,136) +#define SF_ARG13 MODE_CHOICE(72,144) +#define SF_ARG14 MODE_CHOICE(76,152) +#define SF_ARG15 MODE_CHOICE(80,160) +#define SF_ARG16 MODE_CHOICE(84,168) +#define SF_ARG17 MODE_CHOICE(88,176) +#define SF_ARG18 MODE_CHOICE(92,184) +#define SF_ARG19 MODE_CHOICE(96,192) +#define SF_ARG20 MODE_CHOICE(100,200) +#define SF_ARG21 MODE_CHOICE(104,208) +#define SF_ARG22 MODE_CHOICE(108,216) +#define SF_ARG23 MODE_CHOICE(112,224) +#define SF_ARG24 MODE_CHOICE(116,232) +#define SF_ARG25 MODE_CHOICE(120,240) +#define SF_ARG26 MODE_CHOICE(124,248) +#define SF_ARG27 MODE_CHOICE(128,256) +#define SF_ARG28 MODE_CHOICE(132,264) +#define SF_ARG29 MODE_CHOICE(136,272) + +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 +#define NUM_FPR_ARG_REGISTERS 13 + +#define FFI_TYPE_1_BYTE(x) ((x) == FFI_TYPE_UINT8 || (x) == FFI_TYPE_SINT8) +#define FFI_TYPE_2_BYTE(x) ((x) == FFI_TYPE_UINT16 || (x) == FFI_TYPE_SINT16) +#define FFI_TYPE_4_BYTE(x) \ + ((x) == FFI_TYPE_UINT32 || (x) == FFI_TYPE_SINT32 ||\ + (x) == FFI_TYPE_INT || (x) == FFI_TYPE_FLOAT) + +#if !defined(LIBFFI_ASM) + +enum { + FLAG_RETURNS_NOTHING = 1 << (31 - 30), // cr7 + FLAG_RETURNS_FP = 1 << (31 - 29), + FLAG_RETURNS_64BITS = 1 << (31 - 28), + FLAG_RETURNS_128BITS = 1 << (31 - 31), + + FLAG_RETURNS_STRUCT = 1 << (31 - 27), // cr6 + FLAG_STRUCT_CONTAINS_FP = 1 << (31 - 26), + + FLAG_ARG_NEEDS_COPY = 1 << (31 - 7), + FLAG_FP_ARGUMENTS = 1 << (31 - 6), // cr1.eq; specified by ABI + FLAG_4_GPR_ARGUMENTS = 1 << (31 - 5), + FLAG_RETVAL_REFERENCE = 1 << (31 - 4) +}; + +#if defined(__ppc64__) +void ffi64_struct_to_ram_form(const ffi_type*, const char*, unsigned int*, + const char*, unsigned int*, unsigned int*, char*, unsigned int*); +void ffi64_struct_to_reg_form(const ffi_type*, const char*, unsigned int*, + unsigned int*, char*, unsigned int*, char*, unsigned int*); +bool ffi64_stret_needs_ptr(const ffi_type* inType, + unsigned short*, unsigned short*); +#endif + +#endif // !defined(LIBFFI_ASM) \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S new file mode 100644 index 0000000..c3d30c2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S @@ -0,0 +1,308 @@ +#if defined(__ppc__) + +/* ----------------------------------------------------------------------- + ppc-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 // Save return address + stg r0,SF_RETURN(r1) + +LCFI0: + /* 24/48 bytes (Linkage Area) + 32/64 bytes (outgoing parameter area, always reserved) + 104 bytes (13*8 from FPR) + 16/32 bytes (result) + 176/232 total bytes */ + + /* skip over caller save area and keep stack aligned to 16/32. */ + stgu r1,-SF_ROUND(176)(r1) + +LCFI1: + /* We want to build up an area for the parameters passed + in registers. (both floating point and integer) */ + + /* 176/256 bytes (callee stack frame aligned to 16/32) + 24/48 bytes (caller linkage area) + 200/304 (start of caller parameter area aligned to 4/8) + */ + + /* Save GPRs 3 - 10 (aligned to 4/8) + in the parents outgoing area. */ + stg r3,200(r1) + stg r4,204(r1) + stg r5,208(r1) + stg r6,212(r1) + stg r7,216(r1) + stg r8,220(r1) + stg r9,224(r1) + stg r10,228(r1) + + /* Save FPRs 1 - 13. (aligned to 8) */ + stfd f1,56(r1) + stfd f2,64(r1) + stfd f3,72(r1) + stfd f4,80(r1) + stfd f5,88(r1) + stfd f6,96(r1) + stfd f7,104(r1) + stfd f8,112(r1) + stfd f9,120(r1) + stfd f10,128(r1) + stfd f11,136(r1) + stfd f12,144(r1) + stfd f13,152(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,160 // result storage + addi r5,r1,200 // saved GPRs + addi r6,r1,56 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + /* Now r3 contains the return type. Use it to look up in a table + so we know how to deal with each type. */ + addi r5,r1,160 // Copy result storage pointer. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: +/* Each of the ret_typeX code fragments has to be exactly 16 bytes long + (4 instructions). For cache effectiveness we align to a 16 byte boundary + first. */ + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +/* case FFI_TYPE_VOID */ +Lret_type0: + b Lfinish + nop + nop + nop + +/* case FFI_TYPE_INT */ +Lret_type1: + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_FLOAT */ +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_DOUBLE */ +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_LONGDOUBLE */ +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +/* case FFI_TYPE_UINT8 */ +Lret_type5: + lbz r3,3(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT8 */ +Lret_type6: + lbz r3,3(r5) + extsb r3,r3 + b Lfinish + nop + +/* case FFI_TYPE_UINT16 */ +Lret_type7: + lhz r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT16 */ +Lret_type8: + lha r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT32 */ +Lret_type9: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT32 */ +Lret_type10: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT64 */ +Lret_type11: + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_SINT64 */ +Lret_type12: // same as Lret_type11 + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_STRUCT */ +Lret_type13: + b Lfinish + nop + nop + nop + +/* End 16-byte aligned cases */ +/* case FFI_TYPE_POINTER */ +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + // fall through + +/* case done */ +Lfinish: + addi r1,r1,SF_ROUND(176) // Restore stack pointer. + lg r0,SF_RETURN(r1) // Restore return address. + mtlr r0 // Restore link register. + blr + +/* END(ffi_closure_ASM) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + + +#endif // __ppc__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c new file mode 100644 index 0000000..8953d5f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c @@ -0,0 +1,1776 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1998 Geoffrey Keating + + PowerPC Foreign Function Interface + + Darwin ABI support (c) 2001 John Hornkvist + AIX ABI support (c) 2002 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include +#include +#include +#include + +#if 0 +#if defined(POWERPC_DARWIN) +#include // for sys_icache_invalidate() +#endif + +#else + +#pragma weak sys_icache_invalidate +extern void sys_icache_invalidate(void *start, size_t len); + +#endif + + +extern void ffi_closure_ASM(void); + +// The layout of a function descriptor. A C function pointer really +// points to one of these. +typedef struct aix_fd_struct { + void* code_pointer; + void* toc; +} aix_fd; + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments. + + The stack layout we want looks like this: + + | Return address from ffi_call_DARWIN | higher addresses + |--------------------------------------------| + | Previous backchain pointer 4/8 | stack pointer here + |--------------------------------------------|-\ <<< on entry to + | Saved r28-r31 (4/8)*4 | | ffi_call_DARWIN + |--------------------------------------------| | + | Parameters (at least 8*(4/8)=32/64) | | (176) +112 - +288 + |--------------------------------------------| | + | Space for GPR2 4/8 | | + |--------------------------------------------| | stack | + | Reserved (4/8)*2 | | grows | + |--------------------------------------------| | down V + | Space for callee's LR 4/8 | | + |--------------------------------------------| | lower addresses + | Saved CR 4/8 | | + |--------------------------------------------| | stack pointer here + | Current backchain pointer 4/8 | | during + |--------------------------------------------|-/ <<< ffi_call_DARWIN + + Note: ppc64 CR is saved in the low word of a long on the stack. +*/ + +/*@-exportheader@*/ +void +ffi_prep_args( + extended_cif* inEcif, + unsigned *const stack) +/*@=exportheader@*/ +{ + /* Copy the ecif to a local var so we can trample the arg. + BC note: test this with GP later for possible problems... */ + volatile extended_cif* ecif = inEcif; + + const unsigned bytes = ecif->cif->bytes; + const unsigned flags = ecif->cif->flags; + + /* Cast the stack arg from int* to long*. sizeof(long) == 4 in 32-bit mode + and 8 in 64-bit mode. */ + unsigned long *const longStack = (unsigned long *const)stack; + + /* 'stacktop' points at the previous backchain pointer. */ +#if defined(__ppc64__) + // In ppc-darwin.s, an extra 96 bytes is reserved for the linkage area, + // saved registers, and an extra FPR. + unsigned long *const stacktop = + (unsigned long *)(unsigned long)((char*)longStack + bytes + 96); +#elif defined(__ppc__) + unsigned long *const stacktop = longStack + (bytes / sizeof(long)); +#else +#error undefined architecture +#endif + + /* 'fpr_base' points at the space for fpr1, and grows upwards as + we use FPR registers. */ + double* fpr_base = (double*)(stacktop - ASM_NEEDS_REGISTERS) - + NUM_FPR_ARG_REGISTERS; + +#if defined(__ppc64__) + // 64-bit saves an extra register, and uses an extra FPR. Knock fpr_base + // down a couple pegs. + fpr_base -= 2; +#endif + + unsigned int fparg_count = 0; + + /* 'next_arg' grows up as we put parameters in it. */ + unsigned long* next_arg = longStack + 6; /* 6 reserved positions. */ + + int i; + double double_tmp; + void** p_argv = ecif->avalue; + unsigned long gprvalue; + ffi_type** ptr = ecif->cif->arg_types; + + /* Check that everything starts aligned properly. */ + FFI_ASSERT(stack == SF_ROUND(stack)); + FFI_ASSERT(stacktop == SF_ROUND(stacktop)); + FFI_ASSERT(bytes == SF_ROUND(bytes)); + + /* Deal with return values that are actually pass-by-reference. + Rule: + Return values are referenced by r3, so r4 is the first parameter. */ + + if (flags & FLAG_RETVAL_REFERENCE) + *next_arg++ = (unsigned long)(char*)ecif->rvalue; + + /* Now for the arguments. */ + for (i = ecif->cif->nargs; i > 0; i--, ptr++, p_argv++) + { + switch ((*ptr)->type) + { + /* If a floating-point parameter appears before all of the general- + purpose registers are filled, the corresponding GPRs that match + the size of the floating-point parameter are shadowed for the + benefit of vararg and pre-ANSI functions. */ + case FFI_TYPE_FLOAT: + double_tmp = *(float*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg++; + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + + case FFI_TYPE_DOUBLE: + double_tmp = *(double*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg += MODE_CHOICE(2,1); + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double*)fpr_base = *(long double*)*p_argv; +#elif defined(__ppc__) + if (fparg_count < NUM_FPR_ARG_REGISTERS - 1) + *(long double*)fpr_base = *(long double*)*p_argv; + else if (fparg_count == NUM_FPR_ARG_REGISTERS - 1) + *(double*)fpr_base = *(double*)*p_argv; +#else +#error undefined architecture +#endif + + *(long double*)next_arg = *(long double*)*p_argv; + fparg_count += 2; + fpr_base += 2; + next_arg += MODE_CHOICE(4,2); + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: +#if defined(__ppc64__) + gprvalue = *(long long*)*p_argv; + goto putgpr; +#elif defined(__ppc__) + *(long long*)next_arg = *(long long*)*p_argv; + next_arg += 2; + break; +#else +#error undefined architecture +#endif + + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT8: + gprvalue = *(unsigned char*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT8: + gprvalue = *(signed char*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT16: + gprvalue = *(unsigned short*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT16: + gprvalue = *(signed short*)*p_argv; + goto putgpr; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + + ffi64_struct_to_reg_form(*ptr, (char*)*p_argv, NULL, &fparg_count, + (char*)next_arg, &gprSize, (char*)fpr_base, &fprSize); + next_arg += gprSize / sizeof(long); + fpr_base += fprSize / sizeof(double); + +#elif defined(__ppc__) + char* dest_cpy = (char*)next_arg; + + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. + Structures with 3 byte in size are padded upwards. */ + unsigned size_al = (*ptr)->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + + if (ecif->cif->abi == FFI_DARWIN) + { + if (size_al < 3) + dest_cpy += 4 - size_al; + } + + memcpy((char*)dest_cpy, (char*)*p_argv, size_al); + next_arg += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + gprvalue = *(unsigned*)*p_argv; + +putgpr: + *next_arg++ = gprvalue; + break; + + default: + break; + } + } + + /* Check that we didn't overrun the stack... */ + //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); + //FFI_ASSERT((unsigned *)fpr_base + // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); + //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); +} + +#if defined(__ppc64__) + +bool +ffi64_struct_contains_fp( + const ffi_type* inType) +{ + bool containsFP = false; + unsigned int i; + + for (i = 0; inType->elements[i] != NULL && !containsFP; i++) + { + if (inType->elements[i]->type == FFI_TYPE_FLOAT || + inType->elements[i]->type == FFI_TYPE_DOUBLE || + inType->elements[i]->type == FFI_TYPE_LONGDOUBLE) + containsFP = true; + else if (inType->elements[i]->type == FFI_TYPE_STRUCT) + containsFP = ffi64_struct_contains_fp(inType->elements[i]); + } + + return containsFP; +} + +#endif // defined(__ppc64__) + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + /* All this is for the DARWIN ABI. */ + int i; + ffi_type** ptr; + int intarg_count = 0; + int fparg_count = 0; + unsigned int flags = 0; + unsigned int size_al = 0; + + /* All the machine-independent calculation of cif->bytes will be wrong. + Redo the calculation for DARWIN. */ + + /* Space for the frame pointer, callee's LR, CR, etc, and for + the asm's temp regs. */ + unsigned int bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long); + + /* Return value handling. The rules are as follows: + - 32-bit (or less) integer values are returned in gpr3; + - Structures of size <= 4 bytes also returned in gpr3; + - 64-bit integer values and structures between 5 and 8 bytes are + returned in gpr3 and gpr4; + - Single/double FP values are returned in fpr1; + - Long double FP (if not equivalent to double) values are returned in + fpr1 and fpr2; + - Larger structures values are allocated space and a pointer is passed + as the first argument. */ + switch (cif->rtype->type) + { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_DOUBLE: + flags |= FLAG_RETURNS_64BITS; + /* Fall through. */ + case FFI_TYPE_FLOAT: + flags |= FLAG_RETURNS_FP; + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + flags |= FLAG_RETURNS_64BITS; + break; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + + if (ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) + { + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + } + else + { + flags |= FLAG_RETURNS_STRUCT; + + if (ffi64_struct_contains_fp(cif->rtype)) + flags |= FLAG_STRUCT_CONTAINS_FP; + } + +#elif defined(__ppc__) + + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_VOID: + flags |= FLAG_RETURNS_NOTHING; + break; + + default: + /* Returns 32-bit integer, or similar. Nothing to do here. */ + break; + } + + /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the + first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest + goes on the stack. Structures are passed as a pointer to a copy of + the structure. Stuff on the stack needs to keep proper alignment. */ + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + switch ((*ptr)->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + fparg_count++; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + if (fparg_count > NUM_FPR_ARG_REGISTERS + && intarg_count % 2 != 0) + intarg_count++; + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + fparg_count += 2; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + + if ( +#if defined(__ppc64__) + fparg_count > NUM_FPR_ARG_REGISTERS + 1 +#elif defined(__ppc__) + fparg_count > NUM_FPR_ARG_REGISTERS +#else +#error undefined architecture +#endif + && intarg_count % 2 != 0) + intarg_count++; + + intarg_count += 2; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + /* 'long long' arguments are passed as two words, but + either both words must fit in registers or both go + on the stack. If they go on the stack, they must + be 8-byte-aligned. */ + if (intarg_count == NUM_GPR_ARG_REGISTERS - 1 + || (intarg_count >= NUM_GPR_ARG_REGISTERS + && intarg_count % 2 != 0)) + intarg_count++; + + intarg_count += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_STRUCT: + size_al = (*ptr)->size; + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + +#if defined(__ppc64__) + // Look for FP struct members. + unsigned int j; + + for (j = 0; (*ptr)->elements[j] != NULL; j++) + { + if ((*ptr)->elements[j]->type == FFI_TYPE_FLOAT || + (*ptr)->elements[j]->type == FFI_TYPE_DOUBLE) + { + fparg_count++; + + if (fparg_count > NUM_FPR_ARG_REGISTERS) + intarg_count++; + } + else if ((*ptr)->elements[j]->type == FFI_TYPE_LONGDOUBLE) + { + fparg_count += 2; + + if (fparg_count > NUM_FPR_ARG_REGISTERS + 1) + intarg_count += 2; + } + else + intarg_count++; + } +#elif defined(__ppc__) + intarg_count += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + + break; + + default: + /* Everything else is passed as a 4/8-byte word in a GPR, either + the object itself or a pointer to it. */ + intarg_count++; + break; + } + } + + /* Space for the FPR registers, if needed. */ + if (fparg_count != 0) + { + flags |= FLAG_FP_ARGUMENTS; +#if defined(__ppc64__) + bytes += (NUM_FPR_ARG_REGISTERS + 1) * sizeof(double); +#elif defined(__ppc__) + bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); +#else +#error undefined architecture +#endif + } + + /* Stack space. */ +#if defined(__ppc64__) + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#elif defined(__ppc__) + if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#else +#error undefined architecture +#endif + else + bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); + + /* The stack space allocated needs to be a multiple of 16/32 bytes. */ + bytes = SF_ROUND(bytes); + + cif->flags = flags; + cif->bytes = bytes; + + return FFI_OK; +} + +/*@-declundef@*/ +/*@-exportheader@*/ +extern void +ffi_call_AIX( +/*@out@*/ extended_cif*, + unsigned, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); + +extern void +ffi_call_DARWIN( +/*@out@*/ extended_cif*, + unsigned long, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); +/*@=declundef@*/ +/*@=exportheader@*/ + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return + value address then we need to make one. */ + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + /*@-sysunrecog@*/ + ecif.rvalue = alloca(cif->rtype->size); + /*@=sysunrecog@*/ + } + else + ecif.rvalue = rvalue; + + switch (cif->abi) + { + case FFI_AIX: + /*@-usedef@*/ + ffi_call_AIX(&ecif, -cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + case FFI_DARWIN: + /*@-usedef@*/ + ffi_call_DARWIN(&ecif, -(long)cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + default: + FFI_ASSERT(0); + break; + } +} + +/* here I'd like to add the stack frame layout we use in darwin_closure.S + and aix_clsoure.S + + SP previous -> +---------------------------------------+ <--- child frame + | back chain to caller 4 | + +---------------------------------------+ 4 + | saved CR 4 | + +---------------------------------------+ 8 + | saved LR 4 | + +---------------------------------------+ 12 + | reserved for compilers 4 | + +---------------------------------------+ 16 + | reserved for binders 4 | + +---------------------------------------+ 20 + | saved TOC pointer 4 | + +---------------------------------------+ 24 + | always reserved 8*4=32 (previous GPRs)| + | according to the linkage convention | + | from AIX | + +---------------------------------------+ 56 + | our FPR area 13*8=104 | + | f1 | + | . | + | f13 | + +---------------------------------------+ 160 + | result area 8 | + +---------------------------------------+ 168 + | alignement to the next multiple of 16 | +SP current --> +---------------------------------------+ 176 <- parent frame + | back chain to caller 4 | + +---------------------------------------+ 180 + | saved CR 4 | + +---------------------------------------+ 184 + | saved LR 4 | + +---------------------------------------+ 188 + | reserved for compilers 4 | + +---------------------------------------+ 192 + | reserved for binders 4 | + +---------------------------------------+ 196 + | saved TOC pointer 4 | + +---------------------------------------+ 200 + | always reserved 8*4=32 we store our | + | GPRs here | + | r3 | + | . | + | r10 | + +---------------------------------------+ 232 + | overflow part | + +---------------------------------------+ xxx + | ???? | + +---------------------------------------+ xxx +*/ + +#if !defined(POWERPC_DARWIN) + +#define MIN_LINE_SIZE 32 + +static void +flush_icache( + char* addr) +{ +#ifndef _AIX + __asm__ volatile ( + "dcbf 0,%0\n" + "sync\n" + "icbi 0,%0\n" + "sync\n" + "isync" + : : "r" (addr) : "memory"); +#endif +} + +static void +flush_range( + char* addr, + int size) +{ + int i; + + for (i = 0; i < size; i += MIN_LINE_SIZE) + flush_icache(addr + i); + + flush_icache(addr + size - 1); +} + +#endif // !defined(POWERPC_DARWIN) + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + switch (cif->abi) + { + case FFI_DARWIN: + { + FFI_ASSERT (cif->abi == FFI_DARWIN); + + unsigned int* tramp = (unsigned int*)&closure->tramp[0]; + +#if defined(__ppc64__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0xe98b0018; // ld r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0xe96b0020; // ld r11,32(r11) + tramp[7] = 0x4e800420; // bctr + *(unsigned long*)&tramp[8] = (unsigned long)ffi_closure_ASM; + *(unsigned long*)&tramp[10] = (unsigned long)closure; +#elif defined(__ppc__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0x818b0018; // lwz r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0x816b001c; // lwz r11,28(r11) + tramp[7] = 0x4e800420; // bctr + tramp[8] = (unsigned long)ffi_closure_ASM; + tramp[9] = (unsigned long)closure; +#else +#error undefined architecture +#endif + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + // Flush the icache. Only necessary on Darwin. +#if defined(POWERPC_DARWIN) + sys_icache_invalidate(closure->tramp, FFI_TRAMPOLINE_SIZE); +#else + flush_range(closure->tramp, FFI_TRAMPOLINE_SIZE); +#endif + + break; + } + + case FFI_AIX: + { + FFI_ASSERT (cif->abi == FFI_AIX); + + ffi_aix_trampoline_struct* tramp_aix = + (ffi_aix_trampoline_struct*)(closure->tramp); + aix_fd* fd = (aix_fd*)(void*)ffi_closure_ASM; + + tramp_aix->code_pointer = fd->code_pointer; + tramp_aix->toc = fd->toc; + tramp_aix->static_chain = closure; + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + break; + } + + default: + return FFI_BAD_ABI; + } + + return FFI_OK; +} + +#if defined(__ppc__) + typedef double ldbits[2]; + + typedef union + { + ldbits lb; + long double ld; + } ldu; +#endif + +typedef union +{ + float f; + double d; +} ffi_dblfl; + +/* The trampoline invokes ffi_closure_ASM, and on entry, r11 holds the + address of the closure. After storing the registers that could possibly + contain parameters to be passed into the stack frame and setting up space + for a return value, ffi_closure_ASM invokes the following helper function + to do most of the work. */ +int +ffi_closure_helper_DARWIN( + ffi_closure* closure, + void* rvalue, + unsigned long* pgr, + ffi_dblfl* pfr) +{ + /* rvalue is the pointer to space for return value in closure assembly + pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM + pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ + +#if defined(__ppc__) + ldu temp_ld; +#endif + + double temp; + unsigned int i; + unsigned int nf = 0; /* number of FPRs already used. */ + unsigned int ng = 0; /* number of GPRs already used. */ + ffi_cif* cif = closure->cif; + long avn = cif->nargs; + void** avalue = alloca(cif->nargs * sizeof(void*)); + ffi_type** arg_types = cif->arg_types; + + /* Copy the caller's structure return value address so that the closure + returns the data directly to the caller. */ +#if defined(__ppc64__) + if (cif->rtype->type == FFI_TYPE_STRUCT && + ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) +#elif defined(__ppc__) + if (cif->rtype->type == FFI_TYPE_STRUCT) +#else +#error undefined architecture +#endif + { + rvalue = (void*)*pgr; + pgr++; + ng++; + } + + /* Grab the addresses of the arguments from the stack frame. */ + for (i = 0; i < avn; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = (char*)pgr + MODE_CHOICE(3,7); + ng++; + pgr++; + break; + + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = (char*)pgr + MODE_CHOICE(2,6); + ng++; + pgr++; + break; + +#if defined(__ppc__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + avalue[i] = (char*)pgr + MODE_CHOICE(0,4); + ng++; + pgr++; + + break; + + case FFI_TYPE_STRUCT: + if (cif->abi == FFI_DARWIN) + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + unsigned int savedFPRSize = fprSize; + + avalue[i] = alloca(arg_types[i]->size); + ffi64_struct_to_ram_form(arg_types[i], (const char*)pgr, + &gprSize, (const char*)pfr, &fprSize, &nf, avalue[i], NULL); + + ng += gprSize / sizeof(long); + pgr += gprSize / sizeof(long); + pfr += (fprSize - savedFPRSize) / sizeof(double); + +#elif defined(__ppc__) + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. */ + unsigned int size_al = size_al = arg_types[i]->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN(arg_types[i]->size, 8); + + if (size_al < 3) + avalue[i] = (void*)pgr + MODE_CHOICE(4,8) - size_al; + else + avalue[i] = (void*)pgr; + + ng += (size_al + 3) / sizeof(long); + pgr += (size_al + 3) / sizeof(long); +#else +#error undefined architecture +#endif + } + + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + /* Long long ints are passed in 1 or 2 GPRs. */ + avalue[i] = pgr; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_FLOAT: + /* A float value consumes a GPR. + There are 13 64-bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + temp = pfr->d; + pfr->f = (float)temp; + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng++; + pgr++; + break; + + case FFI_TYPE_DOUBLE: + /* A double value consumes one or two GPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr += 2; + } +#elif defined(__ppc__) + /* A long double value consumes 2/4 GPRs and 2 FPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS - 1) + { + avalue[i] = pfr; + pfr += 2; + } + /* Here we have the situation where one part of the long double + is stored in fpr13 and the other part is already on the stack. + We use a union to pass the long double to avalue[i]. */ + else if (nf == NUM_FPR_ARG_REGISTERS - 1) + { + memcpy (&temp_ld.lb[0], pfr, sizeof(temp_ld.lb[0])); + memcpy (&temp_ld.lb[1], pgr + 2, sizeof(temp_ld.lb[1])); + avalue[i] = &temp_ld.ld; + } +#else +#error undefined architecture +#endif + else + avalue[i] = pgr; + + nf += 2; + ng += MODE_CHOICE(4,2); + pgr += MODE_CHOICE(4,2); + + break; + +#endif /* FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE */ + + default: + FFI_ASSERT(0); + break; + } + } + + (closure->fun)(cif, rvalue, avalue, closure->user_data); + + /* Tell ffi_closure_ASM to perform return type promotions. */ + return cif->rtype->type; +} + +#if defined(__ppc64__) + +/* ffi64_struct_to_ram_form + + Rebuild a struct's natural layout from buffers of concatenated registers. + Return the number of registers used. + inGPRs[0-7] == r3, inFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_ram_form( + const ffi_type* inType, + const char* inGPRs, + unsigned int* ioGPRMarker, + const char* inFPRs, + unsigned int* ioFPRMarker, + unsigned int* ioFPRsUsed, + char* outStruct, // caller-allocated + unsigned int* ioStructMarker) +{ + unsigned int srcGMarker = 0; + unsigned int srcFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + unsigned int destMarker = 0; + + static unsigned int recurseCount = 0; + + if (ioGPRMarker) + srcGMarker = *ioGPRMarker; + + if (ioFPRMarker) + { + srcFMarker = *ioFPRMarker; + savedFMarker = srcFMarker; + } + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioStructMarker) + destMarker = *ioStructMarker; + + size_t i; + + switch (inType->size) + { + case 1: case 2: case 4: + srcGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + srcFMarker = ALIGN(srcFMarker, 4); + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(float*)&outStruct[destMarker] = + (float)*(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(float*)&outStruct[destMarker] = + (float)*(double*)&inGPRs[srcGMarker]; + + srcGMarker += 4; + destMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcFMarker = ALIGN(srcFMarker, 8); + destMarker = ALIGN(destMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(double*)&outStruct[destMarker] = + *(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(double*)&outStruct[destMarker] = + *(double*)&inGPRs[srcGMarker]; + + destMarker += 8; + + // Skip next GPR + srcGMarker += 8; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + destMarker = ALIGN(destMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + srcFMarker = ALIGN(srcFMarker, 8); + srcGMarker = ALIGN(srcGMarker, 8); + *(long double*)&outStruct[destMarker] = + *(long double*)&inFPRs[srcFMarker]; + srcFMarker += 16; + fprsUsed += 2; + } + else + { + srcFMarker = ALIGN(srcFMarker, 16); + srcGMarker = ALIGN(srcGMarker, 16); + *(long double*)&outStruct[destMarker] = + *(long double*)&inGPRs[srcGMarker]; + } + + destMarker += 16; + + // Skip next 2 GPRs + srcGMarker += 16; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + if (inType->alignment == 1) // chars only + { + if (inType->size == 1) + outStruct[destMarker++] = inGPRs[srcGMarker++]; + else if (inType->size == 2) + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + outStruct[destMarker++] = inGPRs[srcGMarker++]; + i++; + } + else + { + memcpy(&outStruct[destMarker], + &inGPRs[srcGMarker], inType->size); + srcGMarker += inType->size; + destMarker += inType->size; + i += inType->size - 1; + } + } + else // chars and other stuff + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, inType->alignment); // was 8 + } + } + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcGMarker = ALIGN(srcGMarker, 2); + destMarker = ALIGN(destMarker, 2); + + *(short*)&outStruct[destMarker] = + *(short*)&inGPRs[srcGMarker]; + srcGMarker += 2; + destMarker += 2; + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + *(int*)&outStruct[destMarker] = + *(int*)&inGPRs[srcGMarker]; + srcGMarker += 4; + destMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcGMarker = ALIGN(srcGMarker, 8); + destMarker = ALIGN(destMarker, 8); + + *(long long*)&outStruct[destMarker] = + *(long long*)&inGPRs[srcGMarker]; + srcGMarker += 8; + destMarker += 8; + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_ram_form(inType->elements[i], inGPRs, + &srcGMarker, inFPRs, &srcFMarker, &fprsUsed, + outStruct, &destMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); // unknown element type + break; + } + } + + srcGMarker = ALIGN(srcGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && srcGMarker == 16) + { + *(long double*)&outStruct[0] = *(long double*)&inGPRs[0]; + srcFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioGPRMarker) + *ioGPRMarker = ALIGN(srcGMarker, 8); + + if (ioFPRMarker) + *ioFPRMarker = srcFMarker; + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioStructMarker) + *ioStructMarker = ALIGN(destMarker, 8); +} + +/* ffi64_struct_to_reg_form + + Copy a struct's elements into buffers that can be sliced into registers. + Return the sizes of the output buffers in bytes. Pass NULL buffer pointers + to calculate size only. + outGPRs[0-7] == r3, outFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_reg_form( + const ffi_type* inType, + const char* inStruct, + unsigned int* ioStructMarker, + unsigned int* ioFPRsUsed, + char* outGPRs, // caller-allocated + unsigned int* ioGPRSize, + char* outFPRs, // caller-allocated + unsigned int* ioFPRSize) +{ + size_t i; + unsigned int srcMarker = 0; + unsigned int destGMarker = 0; + unsigned int destFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + + static unsigned int recurseCount = 0; + + if (ioStructMarker) + srcMarker = *ioStructMarker; + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioGPRSize) + destGMarker = *ioGPRSize; + + if (ioFPRSize) + { + destFMarker = *ioFPRSize; + savedFMarker = destFMarker; + } + + switch (inType->size) + { + case 1: case 2: case 4: + destGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + // Shadow floating-point types in GPRs for vararg and pre-ANSI + // functions. + case FFI_TYPE_FLOAT: + // Nudge markers to next 4/8-byte boundary + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + (double)*(float*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + (double)*(float*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcMarker = ALIGN(srcMarker, 8); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + *(double*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + *(double*)&inStruct[srcMarker]; + + srcMarker += 8; + + // Skip next GPR + destGMarker += 8; + destGMarker = ALIGN(destGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + srcMarker = ALIGN(srcMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + destFMarker = ALIGN(destFMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outFPRs != NULL && inStruct != NULL) + *(long double*)&outFPRs[destFMarker] = + *(long double*)&inStruct[srcMarker]; + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + + destFMarker += 16; + fprsUsed += 2; + } + else + { + destGMarker = ALIGN(destGMarker, 16); + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + } + + srcMarker += 16; + destGMarker += 16; // Skip next 2 GPRs + destGMarker = ALIGN(destGMarker, 8); // was 16 + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + if (inType->alignment == 1) // bytes only + { + if (inType->size == 1) + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + } + else if (inType->size == 2) + { + if (outGPRs != NULL && inStruct != NULL) + { + outGPRs[destGMarker] = inStruct[srcMarker]; + outGPRs[destGMarker + 1] = inStruct[srcMarker + 1]; + } + + srcMarker += 2; + destGMarker += 2; + + i++; + } + else + { + if (outGPRs != NULL && inStruct != NULL) + { + // Avoid memcpy for small chunks. + if (inType->size <= sizeof(long)) + *(long*)&outGPRs[destGMarker] = + *(long*)&inStruct[srcMarker]; + else + memcpy(&outGPRs[destGMarker], + &inStruct[srcMarker], inType->size); + } + + srcMarker += inType->size; + destGMarker += inType->size; + i += inType->size - 1; + } + } + else // bytes and other stuff + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, inType->alignment); // was 8 + } + } + + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcMarker = ALIGN(srcMarker, 2); + destGMarker = ALIGN(destGMarker, 2); + + if (outGPRs != NULL && inStruct != NULL) + *(short*)&outGPRs[destGMarker] = + *(short*)&inStruct[srcMarker]; + + srcMarker += 2; + destGMarker += 2; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + + if (outGPRs != NULL && inStruct != NULL) + *(int*)&outGPRs[destGMarker] = + *(int*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcMarker = ALIGN(srcMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outGPRs != NULL && inStruct != NULL) + *(long long*)&outGPRs[destGMarker] = + *(long long*)&inStruct[srcMarker]; + + srcMarker += 8; + destGMarker += 8; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_reg_form(inType->elements[i], + inStruct, &srcMarker, &fprsUsed, outGPRs, + &destGMarker, outFPRs, &destFMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); + break; + } + } + + destGMarker = ALIGN(destGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && destGMarker == 16) + { + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[0] = *(long double*)&inStruct[0]; + + destFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioStructMarker) + *ioStructMarker = ALIGN(srcMarker, 8); + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioGPRSize) + *ioGPRSize = ALIGN(destGMarker, 8); + + if (ioFPRSize) + *ioFPRSize = ALIGN(destFMarker, 8); +} + +/* ffi64_stret_needs_ptr + + Determine whether a returned struct needs a pointer in r3 or can fit + in registers. +*/ + +bool +ffi64_stret_needs_ptr( + const ffi_type* inType, + unsigned short* ioGPRCount, + unsigned short* ioFPRCount) +{ + // Obvious case first- struct is larger than combined FPR size. + if (inType->size > 14 * 8) + return true; + + // Now the struct can physically fit in registers, determine if it + // also fits logically. + bool needsPtr = false; + unsigned short gprsUsed = 0; + unsigned short fprsUsed = 0; + size_t i; + + if (ioGPRCount) + gprsUsed = *ioGPRCount; + + if (ioFPRCount) + fprsUsed = *ioFPRCount; + + for (i = 0; inType->elements[i] != NULL && !needsPtr; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + gprsUsed++; + fprsUsed++; + + if (fprsUsed > 13) + needsPtr = true; + + break; + + case FFI_TYPE_LONGDOUBLE: + gprsUsed += 2; + fprsUsed += 2; + + if (fprsUsed > 14) + needsPtr = true; + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + gprsUsed++; + + if (gprsUsed > 8) + { + needsPtr = true; + break; + } + + if (inType->elements[i + 1] == NULL) // last byte in the struct + break; + + // Count possible contiguous bytes ahead, up to 8. + unsigned short j; + + for (j = 1; j < 8; j++) + { + if (inType->elements[i + j] == NULL || + !FFI_TYPE_1_BYTE(inType->elements[i + j]->type)) + break; + } + + i += j - 1; // allow for i++ before the test condition + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + gprsUsed++; + + if (gprsUsed > 8) + needsPtr = true; + + break; + + case FFI_TYPE_STRUCT: + needsPtr = ffi64_stret_needs_ptr( + inType->elements[i], &gprsUsed, &fprsUsed); + + break; + + default: + FFI_ASSERT(0); + break; + } + } + + if (ioGPRCount) + *ioGPRCount = gprsUsed; + + if (ioFPRCount) + *ioFPRCount = fprsUsed; + + return needsPtr; +} + +/* ffi64_data_size + + Calculate the size in bytes of an ffi type. +*/ + +unsigned int +ffi64_data_size( + const ffi_type* inType) +{ + unsigned int size = 0; + + switch (inType->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + size = 1; + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + size = 2; + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_FLOAT: + size = 4; + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + size = 8; + break; + + case FFI_TYPE_LONGDOUBLE: + size = 16; + break; + + case FFI_TYPE_STRUCT: + ffi64_struct_to_reg_form( + inType, NULL, NULL, NULL, NULL, &size, NULL, NULL); + break; + + case FFI_TYPE_VOID: + break; + + default: + FFI_ASSERT(0); + break; + } + + return size; +} + +#endif /* defined(__ppc64__) */ +#endif /* __ppc__ || __ppc64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S new file mode 100644 index 0000000..7162fa1 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S @@ -0,0 +1,418 @@ +#if defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc64-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc64-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 + stg r0,SF_RETURN(r1) // save return address + + // Save GPRs 3 - 10 (aligned to 8) in the parents outgoing area. + stg r3,SF_ARG1(r1) + stg r4,SF_ARG2(r1) + stg r5,SF_ARG3(r1) + stg r6,SF_ARG4(r1) + stg r7,SF_ARG5(r1) + stg r8,SF_ARG6(r1) + stg r9,SF_ARG7(r1) + stg r10,SF_ARG8(r1) + +LCFI0: +/* 48 bytes (Linkage Area) + 64 bytes (outgoing parameter area, always reserved) + 112 bytes (14*8 for incoming FPR) + ? bytes (result) + 112 bytes (14*8 for outgoing FPR) + 16 bytes (2 saved registers) + 352 + ? total bytes +*/ + + std r31,-8(r1) // Save registers we use. + std r30,-16(r1) + mr r30,r1 // Save the old SP. + mr r31,r11 // Save the ffi_closure around ffi64_data_size. + + // Calculate the space we need. + stdu r1,-SF_MINSIZE(r1) + ld r3,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r3) // ffi_cif->rtype* + bl Lffi64_data_size$stub + ld r1,0(r1) + + addi r3,r3,352 // Add our overhead. + neg r3,r3 + li r0,-32 // Align to 32 bytes. + and r3,r3,r0 + stdux r1,r1,r3 // Grow the stack. + + mr r11,r31 // Copy the ffi_closure back. + +LCFI1: + // We want to build up an area for the parameters passed + // in registers. (both floating point and integer) + +/* 320 bytes (callee stack frame aligned to 32) + 48 bytes (caller linkage area) + 368 (start of caller parameter area aligned to 8) +*/ + + // Save FPRs 1 - 14. (aligned to 8) + stfd f1,112(r1) + stfd f2,120(r1) + stfd f3,128(r1) + stfd f4,136(r1) + stfd f5,144(r1) + stfd f6,152(r1) + stfd f7,160(r1) + stfd f8,168(r1) + stfd f9,176(r1) + stfd f10,184(r1) + stfd f11,192(r1) + stfd f12,200(r1) + stfd f13,208(r1) + stfd f14,216(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,224 // result storage + addi r5,r30,SF_ARG1 // saved GPRs + addi r6,r1,112 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + // Look the proper starting point in table + // by using return type as an offset. + addi r5,r1,224 // Get pointer to results area. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Now multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: + // Each of the ret_typeX code fragments has to be exactly 16 bytes long + // (4 instructions). For cache effectiveness we align to a 16 byte + // boundary first. + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +// case FFI_TYPE_VOID +Lret_type0: + b Lfinish + nop + nop + nop + +// case FFI_TYPE_INT +Lret_type1: + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_FLOAT +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_DOUBLE +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_LONGDOUBLE +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +// case FFI_TYPE_UINT8 +Lret_type5: + lbz r3,7(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT8 +Lret_type6: + lbz r3,7(r5) + extsb r3,r3 + b Lfinish + nop + +// case FFI_TYPE_UINT16 +Lret_type7: + lhz r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT16 +Lret_type8: + lha r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT32 +Lret_type9: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT32 +Lret_type10: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT64 +Lret_type11: + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT64 +Lret_type12: // same as Lret_type11 + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_STRUCT +Lret_type13: + b Lret_struct + nop + nop + nop + +// ** End 16-byte aligned cases ** +// case FFI_TYPE_POINTER +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + b Lfinish + +// copy struct into registers +Lret_struct: + ld r31,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r31) // ffi_cif->rtype* + ld r31,24(r31) // ffi_cif->flags + mr r4,r5 // copy struct* to 2nd arg + addi r7,r1,SF_ARG9 // GPR return area + addi r9,r30,-16-(14*8) // FPR return area + li r5,0 // struct offset ptr (NULL) + li r6,0 // FPR used count ptr (NULL) + li r8,0 // GPR return area size ptr (NULL) + li r10,0 // FPR return area size ptr (NULL) + bl Lffi64_struct_to_reg_form$stub + + // Load GPRs + ld r3,SF_ARG9(r1) + ld r4,SF_ARG10(r1) + ld r5,SF_ARG11(r1) + ld r6,SF_ARG12(r1) + nop + ld r7,SF_ARG13(r1) + ld r8,SF_ARG14(r1) + ld r9,SF_ARG15(r1) + ld r10,SF_ARG16(r1) + nop + + // Load FPRs + mtcrf 0x2,r31 + bf 26,Lfinish + lfd f1,-16-(14*8)(r30) + lfd f2,-16-(13*8)(r30) + lfd f3,-16-(12*8)(r30) + lfd f4,-16-(11*8)(r30) + nop + lfd f5,-16-(10*8)(r30) + lfd f6,-16-(9*8)(r30) + lfd f7,-16-(8*8)(r30) + lfd f8,-16-(7*8)(r30) + nop + lfd f9,-16-(6*8)(r30) + lfd f10,-16-(5*8)(r30) + lfd f11,-16-(4*8)(r30) + lfd f12,-16-(3*8)(r30) + nop + lfd f13,-16-(2*8)(r30) + lfd f14,-16-(1*8)(r30) + // Fall through + +// case done +Lfinish: + lg r1,0(r1) // Restore stack pointer. + ld r31,-8(r1) // Restore registers we used. + ld r30,-16(r1) + lg r0,SF_RETURN(r1) // Get return address. + mtlr r0 // Reset link register. + blr + +// END(ffi_closure_ASM) + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_reg_form$stub: + .indirect_symbol _ffi64_struct_to_reg_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_reg_form + +LO$ffi64_struct_to_reg_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form)(r11) + mtctr r12 + bctr + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_data_size$stub: + .indirect_symbol _ffi64_data_size + mflr r0 + bcl 20,31,LO$ffi64_data_size + +LO$ffi64_data_size: + mflr r11 + addis r11,r11,ha16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size) + mtlr r0 + lgu r12,lo16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_reg_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_reg_form + .g_long dyld_stub_binding_helper + +L_ffi64_data_size$lazy_ptr: + .indirect_symbol _ffi64_data_size + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/types.c ./Modules/_ctypes/libffi_osx/types.c new file mode 100644 index 0000000..44806ae --- /dev/null +++ ./Modules/_ctypes/libffi_osx/types.c @@ -0,0 +1,115 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +/* Type definitions */ +#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) \ + ffi_type ffi_type_##n = { s, a, t, NULL } +#define FFI_AGGREGATE_TYPEDEF(n, e) \ + ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } + +FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); +FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); +FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); +FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); +FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); +FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); +FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); + +/* Size and alignment are fake here. They must not be 0. */ +FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); + +#if defined ALPHA || defined SPARC64 || defined X86_64 || \ + defined S390X || defined IA64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); +#else +FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); +#endif + +#if defined X86 || defined ARM || defined M68K || defined(X86_DARWIN) + +# ifdef X86_64 + FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +# else + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +# endif + +#elif defined(POWERPC_DARWIN) +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#elif defined SH +FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +#else +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#endif + +#if defined X86 || defined X86_WIN32 || defined M68K || defined(X86_DARWIN) + +# if defined X86_WIN32 || defined X86_64 + FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +# endif + +# ifdef X86_DARWIN + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined ARM || defined SH || defined POWERPC_AIX +FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); +#elif defined POWERPC_DARWIN +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# if __GNUC__ >= 4 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined SPARC +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# ifdef SPARC64 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined X86_64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +#else +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/x86/darwin64.S ./Modules/_ctypes/libffi_osx/x86/darwin64.S new file mode 100644 index 0000000..165d469 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -0,0 +1,417 @@ +/* ----------------------------------------------------------------------- + darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. + derived from unix64.S + + x86-64 Foreign Function Interface for Darwin. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifdef __x86_64__ +#define LIBFFI_ASM +#include +#include + + .file "darwin64.S" +.text + +/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, + void *raddr, void (*fnaddr)()); + + Bit o trickiness here -- ARGS+BYTES is the base of the stack frame + for this function. This has been allocated by ffi_call. We also + deallocate some of the stack that has been alloca'd. */ + + .align 3 + .globl _ffi_call_unix64 + +_ffi_call_unix64: +LUW0: + movq (%rsp), %r10 /* Load return address. */ + movq %rdi, %r12 /* Save a copy of the register area. */ + leaq (%rdi, %rsi), %rax /* Find local stack base. */ + movq %rdx, (%rax) /* Save flags. */ + movq %rcx, 8(%rax) /* Save raddr. */ + movq %rbp, 16(%rax) /* Save old frame pointer. */ + movq %r10, 24(%rax) /* Relocate return address. */ + movq %rax, %rbp /* Finalize local stack frame. */ +LUW1: + /* movq %rdi, %r10 // Save a copy of the register area. */ + movq %r12, %r10 + movq %r8, %r11 /* Save a copy of the target fn. */ + movl %r9d, %eax /* Set number of SSE registers. */ + + /* Load up all argument registers. */ + movq (%r10), %rdi + movq 8(%r10), %rsi + movq 16(%r10), %rdx + movq 24(%r10), %rcx + movq 32(%r10), %r8 + movq 40(%r10), %r9 + testl %eax, %eax + jnz Lload_sse +Lret_from_load_sse: + + /* Deallocate the reg arg area. */ + leaq 176(%r10), %rsp + + /* Call the user function. */ + call *%r11 + + /* Deallocate stack arg area; local stack frame in redzone. */ + leaq 24(%rbp), %rsp + + movq 0(%rbp), %rcx /* Reload flags. */ + movq 8(%rbp), %rdi /* Reload raddr. */ + movq 16(%rbp), %rbp /* Reload old frame pointer. */ +LUW2: + + /* The first byte of the flags contains the FFI_TYPE. */ + movzbl %cl, %r10d + leaq Lstore_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lstore_table: + .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ + .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ + .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ + .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ + .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ + .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ + .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ + .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ + .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ + .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ + .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lst_void: + ret + .align 3 +Lst_uint8: + movzbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_sint8: + movsbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint16: + movzwq %ax, %rax + movq %rax, (%rdi) + .align 3 +Lst_sint16: + movswq %ax, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint32: + movl %eax, %eax + movq %rax, (%rdi) + .align 3 +Lst_sint32: + cltq + movq %rax, (%rdi) + ret + .align 3 +Lst_int64: + movq %rax, (%rdi) + ret + .align 3 +Lst_float: + movss %xmm0, (%rdi) + ret + .align 3 +Lst_double: + movsd %xmm0, (%rdi) + ret +Lst_ldouble: + fstpt (%rdi) + ret + .align 3 +Lst_struct: + leaq -20(%rsp), %rsi /* Scratch area in redzone. */ + + /* We have to locate the values now, and since we don't want to + write too much data into the user's return value, we spill the + value to a 16 byte scratch area first. Bits 8, 9, and 10 + control where the values are located. Only one of the three + bits will be set; see ffi_prep_cif_machdep for the pattern. */ + movd %xmm0, %r10 + movd %xmm1, %r11 + testl $0x100, %ecx + cmovnz %rax, %rdx + cmovnz %r10, %rax + testl $0x200, %ecx + cmovnz %r10, %rdx + testl $0x400, %ecx + cmovnz %r10, %rax + cmovnz %r11, %rdx + movq %rax, (%rsi) + movq %rdx, 8(%rsi) + + /* Bits 12-31 contain the true size of the structure. Copy from + the scratch area to the true destination. */ + shrl $12, %ecx + rep movsb + ret + + /* Many times we can avoid loading any SSE registers at all. + It's not worth an indirect jump to load the exact set of + SSE registers needed; zero or all is a good compromise. */ + .align 3 +LUW3: +Lload_sse: + movdqa 48(%r10), %xmm0 + movdqa 64(%r10), %xmm1 + movdqa 80(%r10), %xmm2 + movdqa 96(%r10), %xmm3 + movdqa 112(%r10), %xmm4 + movdqa 128(%r10), %xmm5 + movdqa 144(%r10), %xmm6 + movdqa 160(%r10), %xmm7 + jmp Lret_from_load_sse + +LUW4: + .align 3 + .globl _ffi_closure_unix64 + +_ffi_closure_unix64: +LUW5: + /* The carry flag is set by the trampoline iff SSE registers + are used. Don't clobber it before the branch instruction. */ + leaq -200(%rsp), %rsp +LUW6: + movq %rdi, (%rsp) + movq %rsi, 8(%rsp) + movq %rdx, 16(%rsp) + movq %rcx, 24(%rsp) + movq %r8, 32(%rsp) + movq %r9, 40(%rsp) + jc Lsave_sse +Lret_from_save_sse: + + movq %r10, %rdi + leaq 176(%rsp), %rsi + movq %rsp, %rdx + leaq 208(%rsp), %rcx + call _ffi_closure_unix64_inner + + /* Deallocate stack frame early; return value is now in redzone. */ + addq $200, %rsp +LUW7: + + /* The first byte of the return value contains the FFI_TYPE. */ + movzbl %al, %r10d + leaq Lload_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lload_table: + .long Lld_void-Lload_table /* FFI_TYPE_VOID */ + .long Lld_int32-Lload_table /* FFI_TYPE_INT */ + .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ + .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ + .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ + .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ + .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ + .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ + .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ + .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ + .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ + .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ + .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ + .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ + .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lld_void: + ret + .align 3 +Lld_int8: + movzbl -24(%rsp), %eax + ret + .align 3 +Lld_int16: + movzwl -24(%rsp), %eax + ret + .align 3 +Lld_int32: + movl -24(%rsp), %eax + ret + .align 3 +Lld_int64: + movq -24(%rsp), %rax + ret + .align 3 +Lld_float: + movss -24(%rsp), %xmm0 + ret + .align 3 +Lld_double: + movsd -24(%rsp), %xmm0 + ret + .align 3 +Lld_ldouble: + fldt -24(%rsp) + ret + .align 3 +Lld_struct: + /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, + %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading + both rdx and xmm1 with the second word. For the remaining, + bit 8 set means xmm0 gets the second word, and bit 9 means + that rax gets the second word. */ + movq -24(%rsp), %rcx + movq -16(%rsp), %rdx + movq -16(%rsp), %xmm1 + testl $0x100, %eax + cmovnz %rdx, %rcx + movd %rcx, %xmm0 + testl $0x200, %eax + movq -24(%rsp), %rax + cmovnz %rdx, %rax + ret + + /* See the comment above Lload_sse; the same logic applies here. */ + .align 3 +LUW8: +Lsave_sse: + movdqa %xmm0, 48(%rsp) + movdqa %xmm1, 64(%rsp) + movdqa %xmm2, 80(%rsp) + movdqa %xmm3, 96(%rsp) + movdqa %xmm4, 112(%rsp) + movdqa %xmm5, 128(%rsp) + movdqa %xmm6, 144(%rsp) + movdqa %xmm7, 160(%rsp) + jmp Lret_from_save_sse + +LUW9: +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ + .long L$set$0 +LSCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "zR\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ + .byte 0x10 /* CIE RA Column */ + .byte 0x1 /* uleb128 0x1; Augmentation size */ + .byte 0x10 /* FDE Encoding (pcrel sdata4) */ + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 /* uleb128 0x7 */ + .byte 0x8 /* uleb128 0x8 */ + .byte 0x90 /* DW_CFA_offset, column 0x10 */ + .byte 0x1 + .align 3 +LECIE1: + .globl _ffi_call_unix64.eh +_ffi_call_unix64.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 /* FDE CIE offset */ + .quad LUW0-. /* FDE initial location */ + .set L$set$2,LUW4-LUW0 /* FDE address range */ + .quad L$set$2 + .byte 0x0 /* Augmentation size */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$3,LUW1-LUW0 + .long L$set$3 + + /* New stack frame based off rbp. This is a itty bit of unwind + trickery in that the CFA *has* changed. There is no easy way + to describe it correctly on entry to the function. Fortunately, + it doesn't matter too much since at all points we can correctly + unwind back to ffi_call. Note that the location to which we + moved the return address is (the new) CFA-8, so from the + perspective of the unwind info, it hasn't moved. */ + .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ + .byte 0x6 + .byte 0x20 + .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ + .byte 0x2 + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$4,LUW2-LUW1 + .long L$set$4 + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 + .byte 0x8 + .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$5,LUW3-LUW2 + .long L$set$5 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE1: + .globl _ffi_closure_unix64.eh +_ffi_closure_unix64.eh: +LSFDE3: + .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ + .long L$set$6 +LASFDE3: + .long LASFDE3-EH_frame1 /* FDE CIE offset */ + .quad LUW5-. /* FDE initial location */ + .set L$set$7,LUW9-LUW5 /* FDE address range */ + .quad L$set$7 + .byte 0x0 /* Augmentation size */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$8,LUW6-LUW5 + .long L$set$8 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 208,1 /* uleb128 208 */ + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$9,LUW7-LUW6 + .long L$set$9 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 0x8 + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$10,LUW8-LUW7 + .long L$set$10 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE3: + .subsections_via_symbols + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S new file mode 100644 index 0000000..925a841 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S @@ -0,0 +1,422 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. + + X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +/* + * This file is based on sysv.S and then hacked up by Ronald who hasn't done + * assembly programming in 8 years. + */ + +#ifndef __x86_64__ + +#define LIBFFI_ASM +#include +#include + +#ifdef PyObjC_STRICT_DEBUGGING + /* XXX: Debugging of stack alignment, to be removed */ +#define ASSERT_STACK_ALIGNED movdqa -16(%esp), %xmm0 +#else +#define ASSERT_STACK_ALIGNED +#endif + +.text + +.globl _ffi_prep_args + + .align 4 +.globl _ffi_call_SYSV + +_ffi_call_SYSV: +LFB1: + pushl %ebp +LCFI0: + movl %esp,%ebp +LCFI1: + subl $8,%esp + /* Make room for all of the new args. */ + movl 16(%ebp),%ecx + subl %ecx,%esp + + movl %esp,%eax + + /* Place all of the ffi_prep_args in position */ + subl $8,%esp + pushl 12(%ebp) + pushl %eax + call *8(%ebp) + + /* Return stack to previous state and call the function */ + addl $16,%esp + + call *28(%ebp) + + /* Remove the space we pushed for the args */ + movl 16(%ebp),%ecx + addl %ecx,%esp + + /* Load %ecx with the return type code */ + movl 20(%ebp),%ecx + + /* If the return value pointer is NULL, assume no return value. */ + cmpl $0,24(%ebp) + jne Lretint + + /* Even if there is no space for the return value, we are + obliged to handle floating-point values. */ + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lnoretval + fstp %st(0) + + jmp Lepilogue + +Lretint: + cmpl $FFI_TYPE_INT,%ecx + jne Lretfloat + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp Lepilogue + +Lretfloat: + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lretdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstps (%ecx) + jmp Lepilogue + +Lretdouble: + cmpl $FFI_TYPE_DOUBLE,%ecx + jne Lretlongdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpl (%ecx) + jmp Lepilogue + +Lretlongdouble: + cmpl $FFI_TYPE_LONGDOUBLE,%ecx + jne Lretint64 + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpt (%ecx) + jmp Lepilogue + +Lretint64: + cmpl $FFI_TYPE_SINT64,%ecx + jne Lretstruct1b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + movl %edx,4(%ecx) + jmp Lepilogue + +Lretstruct1b: + cmpl $FFI_TYPE_SINT8,%ecx + jne Lretstruct2b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movb %al,0(%ecx) + jmp Lepilogue + +Lretstruct2b: + cmpl $FFI_TYPE_SINT16,%ecx + jne Lretstruct + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movw %ax,0(%ecx) + jmp Lepilogue + +Lretstruct: + cmpl $FFI_TYPE_STRUCT,%ecx + jne Lnoretval + /* Nothing to do! */ + addl $4,%esp + popl %ebp + ret + +Lnoretval: +Lepilogue: + addl $8,%esp + movl %ebp,%esp + popl %ebp + ret +LFE1: +.ffi_call_SYSV_end: + + .align 4 +FFI_HIDDEN (ffi_closure_SYSV) +.globl _ffi_closure_SYSV + +_ffi_closure_SYSV: +LFB2: + pushl %ebp +LCFI2: + movl %esp, %ebp +LCFI3: + subl $56, %esp + leal -40(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 8(%ebp), %edx + movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + movl %ebx, 8(%esp) +LCFI7: + call L_ffi_closure_SYSV_inner$stub + movl 8(%esp), %ebx + movl -12(%ebp), %ecx + cmpl $FFI_TYPE_INT, %eax + je Lcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lcls_retllong + cmpl $FFI_TYPE_UINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_SINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_UINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_SINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_STRUCT, %eax + je Lcls_retstruct +Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret +Lcls_retint: + movl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retfloat: + flds (%ecx) + jmp Lcls_epilogue +Lcls_retdouble: + fldl (%ecx) + jmp Lcls_epilogue +Lcls_retldouble: + fldt (%ecx) + jmp Lcls_epilogue +Lcls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp Lcls_epilogue +Lcls_retstruct1: + movsbl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct2: + movswl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct: + lea -8(%ebp),%esp + movl %ebp, %esp + popl %ebp + ret $4 +LFE2: + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + + .align 4 +FFI_HIDDEN (ffi_closure_raw_SYSV) +.globl _ffi_closure_raw_SYSV + +_ffi_closure_raw_SYSV: +LFB3: + pushl %ebp +LCFI4: + movl %esp, %ebp +LCFI5: + pushl %esi +LCFI6: + subl $36, %esp + movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ + movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ + movl %edx, 12(%esp) /* user_data */ + leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ + movl %edx, 8(%esp) /* raw_args */ + leal -24(%ebp), %edx + movl %edx, 4(%esp) /* &res */ + movl %esi, (%esp) /* cif */ + call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ + movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ + cmpl $FFI_TYPE_INT, %eax + je Lrcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lrcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lrcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lrcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lrcls_retllong +Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret +Lrcls_retint: + movl -24(%ebp), %eax + jmp Lrcls_epilogue +Lrcls_retfloat: + flds -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retdouble: + fldl -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retldouble: + fldt -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retllong: + movl -24(%ebp), %eax + movl -20(%ebp), %edx + jmp Lrcls_epilogue +LFE3: +#endif + +.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 +L_ffi_closure_SYSV_inner$stub: + .indirect_symbol _ffi_closure_SYSV_inner + hlt ; hlt ; hlt ; hlt ; hlt + + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 +LSCIE1: + .long 0x0 + .byte 0x1 + .ascii "zR\0" + .byte 0x1 + .byte 0x7c + .byte 0x8 + .byte 0x1 + .byte 0x10 + .byte 0xc + .byte 0x5 + .byte 0x4 + .byte 0x88 + .byte 0x1 + .align 2 +LECIE1: +.globl _ffi_call_SYSV.eh +_ffi_call_SYSV.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 + .long LFB1-. + .set L$set$2,LFE1-LFB1 + .long L$set$2 + .byte 0x0 + .byte 0x4 + .set L$set$3,LCFI0-LFB1 + .long L$set$3 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$4,LCFI1-LCFI0 + .long L$set$4 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE1: +.globl _ffi_closure_SYSV.eh +_ffi_closure_SYSV.eh: +LSFDE2: + .set L$set$5,LEFDE2-LASFDE2 + .long L$set$5 +LASFDE2: + .long LASFDE2-EH_frame1 + .long LFB2-. + .set L$set$6,LFE2-LFB2 + .long L$set$6 + .byte 0x0 + .byte 0x4 + .set L$set$7,LCFI2-LFB2 + .long L$set$7 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$8,LCFI3-LCFI2 + .long L$set$8 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE2: + +#if !FFI_NO_RAW_API + +.globl _ffi_closure_raw_SYSV.eh +_ffi_closure_raw_SYSV.eh: +LSFDE3: + .set L$set$10,LEFDE3-LASFDE3 + .long L$set$10 +LASFDE3: + .long LASFDE3-EH_frame1 + .long LFB3-. + .set L$set$11,LFE3-LFB3 + .long L$set$11 + .byte 0x0 + .byte 0x4 + .set L$set$12,LCFI4-LFB3 + .long L$set$12 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$13,LCFI5-LCFI4 + .long L$set$13 + .byte 0xd + .byte 0x4 + .byte 0x4 + .set L$set$14,LCFI6-LCFI5 + .long L$set$14 + .byte 0x85 + .byte 0x3 + .align 2 +LEFDE3: + +#endif + +#endif /* ifndef __x86_64__ */ + +#endif /* defined __i386__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c new file mode 100644 index 0000000..06feaf2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c @@ -0,0 +1,734 @@ +#ifdef __x86_64__ + +/* ----------------------------------------------------------------------- + x86-ffi64.c - Copyright (c) 2002 Bo Thorsen + + x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#define MAX_GPR_REGS 6 +#define MAX_SSE_REGS 8 + +typedef struct RegisterArgs { + /* Registers for argument passing. */ + UINT64 gpr[MAX_GPR_REGS]; + __int128_t sse[MAX_SSE_REGS]; +} RegisterArgs; + +extern void +ffi_call_unix64( + void* args, + unsigned long bytes, + unsigned flags, + void* raddr, + void (*fnaddr)(), + unsigned ssecount); + +/* All reference to register classes here is identical to the code in + gcc/config/i386/i386.c. Do *not* change one without the other. */ + +/* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +enum x86_64_reg_class +{ + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_COMPLEX_X87_CLASS, + X86_64_MEMORY_CLASS +}; + +#define MAX_CLASSES 4 +#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + +/* x86-64 register passing implementation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + +/* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ +static enum x86_64_reg_class +merge_classes( + enum x86_64_reg_class class1, + enum x86_64_reg_class class2) +{ + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, + MEMORY is used. */ + if (class1 == X86_64_X87_CLASS + || class1 == X86_64_X87UP_CLASS + || class1 == X86_64_COMPLEX_X87_CLASS + || class2 == X86_64_X87_CLASS + || class2 == X86_64_X87UP_CLASS + || class2 == X86_64_COMPLEX_X87_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; +} + +/* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + See the x86-64 PS ABI for details. */ + +static int +classify_argument( + ffi_type* type, + enum x86_64_reg_class classes[], + size_t byte_offset) +{ + switch (type->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_POINTER: +#if 0 + if (byte_offset + type->size <= 4) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + + return 1; +#else + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } +#endif + + case FFI_TYPE_FLOAT: + if (byte_offset == 0) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + + return 1; + + case FFI_TYPE_DOUBLE: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + + case FFI_TYPE_LONGDOUBLE: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + + case FFI_TYPE_STRUCT: + { + ffi_type** ptr; + int i; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + const int UNITS_PER_WORD = 8; + int words = + (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + /* If the struct is larger than 16 bytes, pass it on the stack. */ + if (type->size > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Merge the fields of structure. */ + for (ptr = type->elements; *ptr != NULL; ptr++) + { + byte_offset = ALIGN(byte_offset, (*ptr)->alignment); + + int num = classify_argument(*ptr, subclasses, byte_offset % 8); + + if (num == 0) + return 0; + + int pos = byte_offset / 8; + + for (i = 0; i < num; i++) + { + classes[i + pos] = + merge_classes(subclasses[i], classes[i + pos]); + } + + byte_offset += (*ptr)->size; + } + + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && classes[i - 1] != X86_64_X87_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + } + + return words; + } + + default: + FFI_ASSERT(0); + } + + return 0; /* Never reached. */ +} + +/* Examine the argument and return set number of register required in each + class. Return zero if parameter should be passed in memory, otherwise + the number of registers. */ +static int +examine_argument( + ffi_type* type, + enum x86_64_reg_class classes[MAX_CLASSES], + _Bool in_return, + int* pngpr, + int* pnsse) +{ + int n = classify_argument(type, classes, 0); + int ngpr = 0; + int nsse = 0; + int i; + + if (n == 0) + return 0; + + for (i = 0; i < n; ++i) + { + switch (classes[i]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + ngpr++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + nsse++; + break; + + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + case X86_64_COMPLEX_X87_CLASS: + return in_return != 0; + + default: + abort(); + } + } + + *pngpr = ngpr; + *pnsse = nsse; + + return n; +} + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + int gprcount = 0; + int ssecount = 0; + int flags = cif->rtype->type; + int i, avn, n, ngpr, nsse; + enum x86_64_reg_class classes[MAX_CLASSES]; + size_t bytes; + + if (flags != FFI_TYPE_VOID) + { + n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value is passed in memory. A pointer to that + memory is the first argument. Allocate a register for it. */ + gprcount++; + + /* We don't have to do anything in asm for the return. */ + flags = FFI_TYPE_VOID; + } + else if (flags == FFI_TYPE_STRUCT) + { + /* Mark which registers the result appears in. */ + _Bool sse0 = SSE_CLASS_P(classes[0]); + _Bool sse1 = n == 2 && SSE_CLASS_P(classes[1]); + + if (sse0 && !sse1) + flags |= 1 << 8; + else if (!sse0 && sse1) + flags |= 1 << 9; + else if (sse0 && sse1) + flags |= 1 << 10; + + /* Mark the true size of the structure. */ + flags |= cif->rtype->size << 12; + } + } + + /* Go over all arguments and determine the way they should be passed. + If it's in a register and there is space for it, let that be so. If + not, add it's size to the stack byte count. */ + for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) + { + if (examine_argument(cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = cif->arg_types[i]->alignment; + + if (align < 8) + align = 8; + + bytes = ALIGN(bytes, align); + bytes += cif->arg_types[i]->size; + } + else + { + gprcount += ngpr; + ssecount += nsse; + } + } + + if (ssecount) + flags |= 1 << 11; + + cif->flags = flags; + cif->bytes = bytes; + cif->bytes = ALIGN(bytes,8); + + return FFI_OK; +} + +void +ffi_call( + ffi_cif* cif, + void (*fn)(), + void* rvalue, + void** avalue) +{ + enum x86_64_reg_class classes[MAX_CLASSES]; + char* stack; + char* argp; + ffi_type** arg_types; + int gprcount, ssecount, ngpr, nsse, i, avn; + _Bool ret_in_memory; + RegisterArgs* reg_args; + + /* Can't call 32-bit mode from 64-bit mode. */ + FFI_ASSERT(cif->abi == FFI_UNIX64); + + /* If the return value is a struct and we don't have a return value + address then we need to make one. Note the setting of flags to + VOID above in ffi_prep_cif_machdep. */ + ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT + && (cif->flags & 0xff) == FFI_TYPE_VOID); + + if (rvalue == NULL && ret_in_memory) + rvalue = alloca (cif->rtype->size); + + /* Allocate the space for the arguments, plus 4 words of temp space. */ + stack = alloca(sizeof(RegisterArgs) + cif->bytes + 4 * 8); + reg_args = (RegisterArgs*)stack; + argp = stack + sizeof(RegisterArgs); + + gprcount = ssecount = 0; + + /* If the return value is passed in memory, add the pointer as the + first integer argument. */ + if (ret_in_memory) + reg_args->gpr[gprcount++] = (long) rvalue; + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + size_t size = arg_types[i]->size; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + memcpy (argp, avalue[i], size); + argp += size; + } + else + { /* The argument is passed entirely in registers. */ + char *a = (char *) avalue[i]; + int j; + + for (j = 0; j < n; j++, a += 8, size -= 8) + { + switch (classes[j]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + reg_args->gpr[gprcount] = 0; + switch (arg_types[i]->type) { + case FFI_TYPE_SINT8: + { + int8_t shortval = *(int8_t*)a; + int64_t actval = (int64_t)shortval; + reg_args->gpr[gprcount] = actval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + break; + } + + case FFI_TYPE_SINT16: + { + int16_t shortval = *(int16_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_SINT32: + { + int32_t shortval = *(int32_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT8: + { + u_int8_t shortval = *(u_int8_t*)a; + u_int64_t actval = (u_int64_t)shortval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + reg_args->gpr[gprcount] = actval; + break; + } + + case FFI_TYPE_UINT16: + { + u_int16_t shortval = *(u_int16_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT32: + { + u_int32_t shortval = *(u_int32_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + default: + //memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); + reg_args->gpr[gprcount] = *(int64_t*)a; + } + gprcount++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSEDF_CLASS: + reg_args->sse[ssecount++] = *(UINT64 *) a; + break; + + case X86_64_SSESF_CLASS: + reg_args->sse[ssecount++] = *(UINT32 *) a; + break; + + default: + abort(); + } + } + } + } + + ffi_call_unix64 (stack, cif->bytes + sizeof(RegisterArgs), + cif->flags, rvalue, fn, ssecount); +} + +extern void ffi_closure_unix64(void); + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + if (cif->abi != FFI_UNIX64) + return FFI_BAD_ABI; + + volatile unsigned short* tramp = + (volatile unsigned short*)&closure->tramp[0]; + + tramp[0] = 0xbb49; /* mov , %r11 */ + *(void* volatile*)&tramp[1] = ffi_closure_unix64; + tramp[5] = 0xba49; /* mov , %r10 */ + *(void* volatile*)&tramp[6] = closure; + + /* Set the carry bit if the function uses any sse registers. + This is clc or stc, together with the first byte of the jmp. */ + tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + tramp[11] = 0xe3ff; /* jmp *%r11 */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmissing-prototypes" +int +ffi_closure_unix64_inner( + ffi_closure* closure, + void* rvalue, + RegisterArgs* reg_args, + char* argp) +#pragma clang diagnostic pop +{ + ffi_cif* cif = closure->cif; + void** avalue = alloca(cif->nargs * sizeof(void *)); + ffi_type** arg_types; + long i, avn; + int gprcount = 0; + int ssecount = 0; + int ngpr, nsse; + int ret; + + ret = cif->rtype->type; + + if (ret != FFI_TYPE_VOID) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value goes in memory. Arrange for the closure + return value to go directly back to the original caller. */ + rvalue = (void *) reg_args->gpr[gprcount++]; + + /* We don't have to do anything in asm for the return. */ + ret = FFI_TYPE_VOID; + } + else if (ret == FFI_TYPE_STRUCT && n == 2) + { + /* Mark which register the second word of the structure goes in. */ + _Bool sse0 = SSE_CLASS_P (classes[0]); + _Bool sse1 = SSE_CLASS_P (classes[1]); + + if (!sse0 && sse1) + ret |= 1 << 8; + else if (sse0 && !sse1) + ret |= 1 << 9; + } + } + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + avalue[i] = argp; + argp += arg_types[i]->size; + } + +#if !defined(X86_DARWIN) + /* If the argument is in a single register, or two consecutive + registers, then we can use that address directly. */ + else if (n == 1 || (n == 2 && + SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + { + // The argument is in a single register. + if (SSE_CLASS_P (classes[0])) + { + avalue[i] = ®_args->sse[ssecount]; + ssecount += n; + } + else + { + avalue[i] = ®_args->gpr[gprcount]; + gprcount += n; + } + } +#endif + + /* Otherwise, allocate space to make them consecutive. */ + else + { + char *a = alloca (16); + int j; + + avalue[i] = a; + + for (j = 0; j < n; j++, a += 8) + { + if (SSE_CLASS_P (classes[j])) + memcpy (a, ®_args->sse[ssecount++], 8); + else + memcpy (a, ®_args->gpr[gprcount++], 8); + } + } + } + + /* Invoke the closure. */ + closure->fun (cif, rvalue, avalue, closure->user_data); + + /* Tell assembly how to perform return type promotions. */ + return ret; +} + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c new file mode 100644 index 0000000..706ea0f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c @@ -0,0 +1,438 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2002 Bo Thorsen + Copyright (c) 2002 Roger Sayle + + x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void ffi_prep_args(char *stack, extended_cif *ecif); + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if (ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void **) argp = ecif->rvalue; + argp += 4; + } + + p_argv = ecif->avalue; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + i != 0; + i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) + argp = (char *) ALIGN(argp, sizeof(int)); + + z = (*p_arg)->size; + if (z < sizeof(int)) + { + z = sizeof(int); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } + else + { + memcpy(argp, *p_argv, z); + } + p_argv++; + argp += z; + } + + return; +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Set the return type flag */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: +#ifdef X86 + case FFI_TYPE_STRUCT: + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: +#endif + + case FFI_TYPE_SINT64: + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_UINT64: + cif->flags = FFI_TYPE_SINT64; + break; + +#ifndef X86 + case FFI_TYPE_STRUCT: + if (cif->rtype->size == 1) + { + cif->flags = FFI_TYPE_SINT8; /* same as char size */ + } + else if (cif->rtype->size == 2) + { + cif->flags = FFI_TYPE_SINT16; /* same as short size */ + } + else if (cif->rtype->size == 4) + { + cif->flags = FFI_TYPE_INT; /* same as int type */ + } + else if (cif->rtype->size == 8) + { + cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ + } + else + { + cif->flags = FFI_TYPE_STRUCT; + } + break; +#endif + + default: + cif->flags = FFI_TYPE_INT; + break; + } + +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + + return FFI_OK; +} + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#endif /* X86_WIN32 */ + +void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->flags == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, + fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + + +/** private members **/ + +static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) +__attribute__ ((regparm(1))); +unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) +__attribute__ ((regparm(1))); +void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) +__attribute__ ((regparm(1))); + +/* This function is jumped to by the trampoline */ + +unsigned int FFI_HIDDEN +ffi_closure_SYSV_inner (closure, respp, args) +ffi_closure *closure; +void **respp; +void *args; +{ + // our various things... + ffi_cif *cif; + void **arg_area; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will re-set RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun) (cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +static void +ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, + ffi_cif *cif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if ( cif->flags == FFI_TYPE_STRUCT ) { + *rvalue = *(void **) argp; + argp += 4; + } + + p_argv = avalue; + + for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, sizeof(int)); + } + + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + + p_argv++; + argp += z; + } + + return; +} + +/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ + +#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ +({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +unsigned int __fun = (unsigned int)(FUN); \ +unsigned int __ctx = (unsigned int)(CTX); \ +unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \ +*(unsigned char*) &__tramp[0] = 0xb8; \ +*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ +*(unsigned char *) &__tramp[5] = 0xe9; \ +*(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ +}) + + +/* the cif must already be prep'ed */ +ffi_status +ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data) +{ + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ + &ffi_closure_SYSV, \ + (void*)closure); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +/* ------- Native raw API support -------------------------------- */ + +#if !FFI_NO_RAW_API + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + int i; + + FFI_ASSERT (cif->abi == FFI_SYSV); + + // we currently don't support certain kinds of arguments for raw + // closures. This should be implemented by a separate assembly language + // routine, since it would require argument processing, something we + // don't do now for performance. + + for (i = cif->nargs-1; i >= 0; i--) + { + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); + } + + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, + codeloc); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +static void +ffi_prep_args_raw(char *stack, extended_cif *ecif) +{ + memcpy (stack, ecif->avalue, ecif->cif->bytes); +} + +/* we borrow this routine from libffi (it must be changed, though, to + * actually call the function passed in the first argument. as of + * libffi-1.20, this is not the case.) + */ + +extern void +ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void +ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); +#endif /* X86_WIN32 */ + +void +ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue) +{ + extended_cif ecif; + void **avalue = (void **)fake_avalue; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + +#endif +#endif // __i386__ diff -r -u ./setup.py ./setup.py index 46b92fe..2bf6b4b 100644 --- ./setup.py +++ ./setup.py @@ -98,8 +98,14 @@ class PyBuildExt(build_ext): self.detect_modules() # Remove modules that are present on the disabled list - self.extensions = [ext for ext in self.extensions - if ext.name not in disabled_module_list] + extensions = [ext for ext in self.extensions + if ext.name not in disabled_module_list] + # move ctypes to the end, it depends on other modules + ext_map = dict((ext.name, i) for i, ext in enumerate(extensions)) + if "_ctypes" in ext_map: + ctypes = extensions.pop(ext_map["_ctypes"]) + extensions.append(ctypes) + self.extensions = extensions # Fix up the autodetected modules, prefixing all the source files # with Modules/ and adding Python's include directory to the path. @@ -1330,9 +1336,39 @@ class PyBuildExt(build_ext): # *** Uncomment these for TOGL extension only: # -lGL -lGLU -lXext -lXmu \ + def configure_ctypes_darwin(self, ext): + # Darwin (OS X) uses preconfigured files, in + # the Modules/_ctypes/libffi_osx directory. + srcdir = sysconfig.get_config_var('srcdir') + ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', + '_ctypes', 'libffi_osx')) + sources = [os.path.join(ffi_srcdir, p) + for p in ['ffi.c', + 'x86/darwin64.S', + 'x86/x86-darwin.S', + 'x86/x86-ffi_darwin.c', + 'x86/x86-ffi64.c', + 'powerpc/ppc-darwin.S', + 'powerpc/ppc-darwin_closure.S', + 'powerpc/ppc-ffi_darwin.c', + 'powerpc/ppc64-darwin_closure.S', + ]] + + # Add .S (preprocessed assembly) to C compiler source extensions. + self.compiler.src_extensions.append('.S') + + include_dirs = [os.path.join(ffi_srcdir, 'include'), + os.path.join(ffi_srcdir, 'powerpc')] + ext.include_dirs.extend(include_dirs) + ext.sources.extend(sources) + return True + def configure_ctypes(self, ext): if not self.use_system_libffi: - (srcdir,) = sysconfig.get_config_vars('srcdir') + if sys.platform == 'darwin': + return self.configure_ctypes_darwin(ext) + + srcdir = sysconfig.get_config_var('srcdir') ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', '_ctypes', 'libffi')) @@ -1347,7 +1383,10 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = [arg for arg in sysconfig.get_config_var("CONFIG_ARGS").split() + if (('--host=' in arg) or ('--build=' in arg))] + if not self.verbose: + config_args.append("-q") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. @@ -1367,10 +1406,12 @@ class PyBuildExt(build_ext): self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), - ffi_builddir, ffi_srcdir] + ffi_builddir, + os.path.join(ffi_srcdir, 'src')] extra_compile_args = fficonfig['ffi_cflags'].split() - ext.sources.extend(fficonfig['ffi_sources']) + ext.sources.extend(os.path.join(ffi_srcdir, f) for f in + fficonfig['ffi_sources']) ext.include_dirs.extend(include_dirs) ext.extra_compile_args.extend(extra_compile_args) return True @@ -1390,6 +1431,7 @@ class PyBuildExt(build_ext): if sys.platform == 'darwin': sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') # XXX Is this still needed? ## extra_link_args.extend(['-read_only_relocs', 'warning']) @@ -1419,7 +1461,14 @@ class PyBuildExt(build_ext): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = find_file('ffi.h', [], inc_dirs) + if sys.platform == 'darwin': + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + if not ffi_inc or ffi_inc[0] == '': + ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' fp = open(ffi_h) 005_osx_failed_modules.patch000066400000000000000000000076331476513315000337370ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.5/Python-2.5.5diff -r -u ./Mac/Modules/cg/_CGmodule.c ./Mac/Modules/cg/_CGmodule.c index 8115614..e36fce9 100755 --- ./Mac/Modules/cg/_CGmodule.c +++ ./Mac/Modules/cg/_CGmodule.c @@ -1025,6 +1025,7 @@ static PyObject *CGContextRefObj_CGContextSetShouldAntialias(CGContextRefObject return _res; } +#ifndef __LP64__ static PyObject *CGContextRefObj_SyncCGContextOriginWithPort(CGContextRefObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1055,6 +1056,7 @@ static PyObject *CGContextRefObj_ClipCGContextToRegion(CGContextRefObject *_self _res = Py_None; return _res; } +#endif static PyMethodDef CGContextRefObj_methods[] = { {"CGContextSaveGState", (PyCFunction)CGContextRefObj_CGContextSaveGState, 1, @@ -1173,10 +1175,12 @@ static PyMethodDef CGContextRefObj_methods[] = { PyDoc_STR("() -> None")}, {"CGContextSetShouldAntialias", (PyCFunction)CGContextRefObj_CGContextSetShouldAntialias, 1, PyDoc_STR("(int shouldAntialias) -> None")}, +#ifndef __LP64__ {"SyncCGContextOriginWithPort", (PyCFunction)CGContextRefObj_SyncCGContextOriginWithPort, 1, PyDoc_STR("(CGrafPtr port) -> None")}, {"ClipCGContextToRegion", (PyCFunction)CGContextRefObj_ClipCGContextToRegion, 1, PyDoc_STR("(Rect portRect, RgnHandle region) -> None")}, +#endif {NULL, NULL, 0} }; @@ -1254,6 +1258,7 @@ PyTypeObject CGContextRef_Type = { /* ------------------ End object type CGContextRef ------------------ */ +#ifndef __LP64__ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1271,10 +1276,13 @@ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) return _res; } +#endif static PyMethodDef CG_methods[] = { +#ifndef __LP64__ {"CreateCGContextForPort", (PyCFunction)CG_CreateCGContextForPort, 1, PyDoc_STR("(CGrafPtr) -> CGContextRef")}, +#endif {NULL, NULL, 0} }; diff -r -u ./Modules/_curses_panel.c ./Modules/_curses_panel.c index 0acf3fd..1728b59 100644 --- ./Modules/_curses_panel.c +++ ./Modules/_curses_panel.c @@ -56,7 +56,7 @@ typedef struct { PyTypeObject PyCursesPanel_Type; -#define PyCursesPanel_Check(v) ((v)->ob_type == &PyCursesPanel_Type) +#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type) /* Some helper functions. The problem is that there's always a window associated with a panel. To ensure that Python's GC doesn't pull @@ -178,12 +178,13 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo) po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); - return NULL; + po->wo = NULL; + Py_DECREF(po); + return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ static void PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } @@ -338,11 +341,10 @@ PyCursesPanel_GetAttr(PyCursesPanelObject *self, char *name) /* -------------------------------------------------------*/ PyTypeObject PyCursesPanel_Type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "_curses_panel.curses panel", /*tp_name*/ - sizeof(PyCursesPanelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + "_curses_panel.curses panel", /*tp_name*/ + sizeof(PyCursesPanelObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/ 0, /*tp_print*/ @@ -458,7 +460,7 @@ init_curses_panel(void) PyObject *m, *d, *v; /* Initialize object type */ - PyCursesPanel_Type.ob_type = &PyType_Type; + Py_TYPE(&PyCursesPanel_Type) = &PyType_Type; import_curses(); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/000077500000000000000000000000001476513315000246065ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/Python-2.5.6/000077500000000000000000000000001476513315000265355ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035211476513315000325540ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/Python-2.5.6--- setup.py.orig 2011-07-07 19:19:43.800122463 +0900 +++ setup.py 2011-07-07 19:25:04.548416377 +0900 @@ -13,6 +13,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 = [] @@ -242,10 +243,34 @@ 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: + fp = open(tmpfile) + multiarch_path_component = fp.readline().strip() + fp.close() + 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. 001_patch-svnversion.patch000066400000000000000000000023661476513315000333770ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/Python-2.5.6--- configure.in +++ configure.in @@ -767,7 +767,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in --- Makefile.pre.in +++ Makefile.pre.in @@ -501,7 +501,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ --- Modules/getbuildinfo.c +++ Modules/getbuildinfo.c @@ -48,5 +48,5 @@ static const char svnversion[] = SVNVERSION; if (svnversion[0] != '$') return svnversion; /* it was interpolated, or passed on command line */ - return "exported"; + return "Unversioned directory"; } --- Python/sysmodule.c +++ Python/sysmodule.c @@ -1161,7 +1161,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0 && strcmp(svnversion, "exported") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); 002_darwin_c_source.patch000066400000000000000000000132671476513315000332370ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/Python-2.5.6diff -r -u ./configure ../Python-2.5/configure --- ./configure 2006-09-05 11:54:42.000000000 +0900 +++ ../Python-2.5/configure 2013-07-19 15:27:46.000000000 +0900 @@ -1396,6 +1396,16 @@ _ACEOF +# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable +# them. + +cat >>confdefs.h <<\_ACEOF +#define _DARWIN_C_SOURCE 1 +_ACEOF + + + define_xopen_source=yes # Arguments passed to configure. @@ -3885,11 +3895,110 @@ ;; # is there any other compiler on Darwin besides gcc? Darwin*) - BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd" + # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd + # used to be here, but non-Apple gcc doesn't accept them. + if test "${CC}" = gcc + then + { echo "$as_me:${as_lineno-$LINENO}: checking which compiler should be used" >&5 +echo -n "checking which compiler should be used... " >&6; } + case "${UNIVERSALSDK}" in + */MacOSX10.4u.sdk) + # Build using 10.4 SDK, force usage of gcc when the + # compiler is gcc, otherwise the user will get very + # confusing error messages when building on OSX 10.6 + CC=gcc-4.0 + CPP=cpp-4.0 + ;; + esac + { echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +echo "$CC" >&6; } + fi + + if test "${enable_universalsdk}"; then - BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}" + UNIVERSAL_ARCH_FLAGS="" + if test "$UNIVERSAL_ARCHS" = "32-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" + ARCH_RUN_32BIT="" + LIPO_32BIT_FLAGS="" + elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + + elif test "$UNIVERSAL_ARCHS" = "all" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + elif test "$UNIVERSAL_ARCHS" = "intel" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386" + + elif test "$UNIVERSAL_ARCHS" = "3-way" ; then + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" + ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + + else + as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + + fi + + + CFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${CFLAGS}" + if test "${UNIVERSALSDK}" != "/" + then + CFLAGS="-isysroot ${UNIVERSALSDK} ${CFLAGS}" + LDFLAGS="-isysroot ${UNIVERSALSDK} ${LDFLAGS}" + CPPFLAGS="-isysroot ${UNIVERSALSDK} ${CPPFLAGS}" + fi fi + # Calculate the right deployment target for this build. + # + cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` + if test ${cur_target} '>' 10.2 && \ + test ${cur_target} '<' 10.6 + then + cur_target=10.3 + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "3-way"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "intel"; then + cur_target='10.5' + + elif test "${UNIVERSAL_ARCHS}" = "64-bit"; then + cur_target='10.5' + fi + else + if test `/usr/bin/arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi + fi + CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} + + # Make sure that MACOSX_DEPLOYMENT_TARGET is set in the + # environment with a value that is the same as what we'll use + # in the Makefile to ensure that we'll get the same compiler + # environment during configure and build time. + MACOSX_DEPLOYMENT_TARGET="$CONFIGURE_MACOSX_DEPLOYMENT_TARGET" + export MACOSX_DEPLOYMENT_TARGET + EXPORT_MACOSX_DEPLOYMENT_TARGET='' + ;; OSF*) BASECFLAGS="$BASECFLAGS -mieee" @@ -10851,7 +10960,7 @@ if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT}" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -10863,7 +10972,7 @@ else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac diff -r -u ./pyconfig.h.in ../Python-2.5/pyconfig.h.in --- ./pyconfig.h.in 2006-07-30 23:09:47.000000000 +0900 +++ ../Python-2.5/pyconfig.h.in 2013-07-17 23:12:31.000000000 +0900 @@ -912,6 +912,11 @@ /* Define on Irix to enable u_int */ #undef _BSD_TYPES +/* Define on Darwin to activate all library features */ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE +#endif + /* This must be set to 64 on some systems to enable large file support. */ #undef _FILE_OFFSET_BITS pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/Python-2.5.6/003_osx_lp64.patch000066400000000000000000000215441476513315000316240ustar00rootroot00000000000000diff -r -u ./Include/pymactoolbox.h ../Python-2.5/Include/pymactoolbox.h --- ./Include/pymactoolbox.h 2004-11-05 16:02:59.000000000 +0900 +++ ../Python-2.5/Include/pymactoolbox.h 2013-07-17 23:38:51.000000000 +0900 @@ -8,7 +8,10 @@ #endif #include + +#ifndef __LP64__ #include +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +21,11 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* __LP64__ */ + /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,8 +89,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +109,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +169,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +178,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); diff -r -u ./Mac/Modules/res/_Resmodule.c ../Python-2.5/Mac/Modules/res/_Resmodule.c --- ./Mac/Modules/res/_Resmodule.c 2005-07-04 05:59:44.000000000 +0900 +++ ../Python-2.5/Mac/Modules/res/_Resmodule.c 2013-07-17 23:38:51.000000000 +0900 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -1152,6 +1154,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1290,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1331,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1418,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1444,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1541,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* __LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1645,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1656,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1670,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* __LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* __LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, diff -r -u ./Modules/_ctypes/libffi/src/darwin/ffitarget.h ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h --- ./Modules/_ctypes/libffi/src/darwin/ffitarget.h 2006-05-26 06:58:05.000000000 +0900 +++ ../Python-2.5/Modules/_ctypes/libffi/src/darwin/ffitarget.h 2013-07-17 23:38:51.000000000 +0900 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN diff -r -u ./Python/mactoolboxglue.c ../Python-2.5/Python/mactoolboxglue.c --- ./Python/mactoolboxglue.c 2006-07-12 01:44:25.000000000 +0900 +++ ../Python-2.5/Python/mactoolboxglue.c 2013-07-17 23:39:09.000000000 +0900 @@ -106,6 +106,7 @@ } +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +154,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +419,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +432,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/Python-2.5.6/004_osx_libffi.patch000066400000000000000000005661361476513315000323060ustar00rootroot00000000000000diff -r -u ./Modules/_ctypes/libffi_osx/LICENSE ./Modules/_ctypes/libffi_osx/LICENSE new file mode 100644 index 0000000..f591795 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/LICENSE @@ -0,0 +1,20 @@ +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff -r -u ./Modules/_ctypes/libffi_osx/README ./Modules/_ctypes/libffi_osx/README new file mode 100644 index 0000000..1fc2747 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README @@ -0,0 +1,500 @@ +This directory contains the libffi package, which is not part of GCC but +shipped with GCC as convenience. + +Status +====== + +libffi-2.00 has not been released yet! This is a development snapshot! + +libffi-1.20 was released on October 5, 1998. Check the libffi web +page for updates: . + + +What is libffi? +=============== + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. Libffi can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The libffi library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + +Ffi stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +libffi library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above libffi that handles type conversions for values passed +between the two languages. + + +Supported Platforms and Prerequisites +===================================== + +Libffi has been ported to: + + SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) + + Irix 5.3 & 6.2 (System V/o32 & n32) + + Intel x86 - Linux (System V ABI) + + Alpha - Linux and OSF/1 + + m68k - Linux (System V ABI) + + PowerPC - Linux (System V ABI, Darwin, AIX) + + ARM - Linux (System V ABI) + +Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are +that other versions will work. Libffi has also been built and tested +with the SGI compiler tools. + +On PowerPC, the tests failed (see the note below). + +You must use GNU make to build libffi. SGI's make will not work. +Sun's probably won't either. + +If you port libffi to another platform, please let me know! I assume +that some will be easy (x86 NetBSD), and others will be more difficult +(HP). + + +Installing libffi +================= + +[Note: before actually performing any of these installation steps, + you may wish to read the "Platform Specific Notes" below.] + +First you must configure the distribution for your particular +system. Go to the directory you wish to build libffi in and run the +"configure" program found in the root directory of the libffi source +distribution. + +You may want to tell configure where to install the libffi library and +header files. To do that, use the --prefix configure switch. Libffi +will install under /usr/local by default. + +If you want to enable extra run-time debugging checks use the the +--enable-debug configure switch. This is useful when your program dies +mysteriously while using libffi. + +Another useful configure switch is --enable-purify-safety. Using this +will add some extra code which will suppress certain warnings when you +are using Purify with libffi. Only use this switch when using +Purify, as it will slow down the library. + +Configure has many other options. Use "configure --help" to see them all. + +Once configure has finished, type "make". Note that you must be using +GNU make. SGI's make will not work. Sun's probably won't either. +You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. + +To ensure that libffi is working as advertised, type "make test". + +To install the library and header files, type "make install". + + +Using libffi +============ + + The Basics + ---------- + +Libffi assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, +as well as the return type of the function. + +The first thing you must do is create an ffi_cif object that matches +the signature of the function you wish to call. The cif in ffi_cif +stands for Call InterFace. To prepare a call interface object, use the +following function: + +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, ffi_type **atypes); + + CIF is a pointer to the call interface object you wish + to initialize. + + ABI is an enum that specifies the calling convention + to use for the call. FFI_DEFAULT_ABI defaults + to the system's native calling convention. Other + ABI's may be used with care. They are system + specific. + + NARGS is the number of arguments this function accepts. + libffi does not yet support vararg functions. + + RTYPE is a pointer to an ffi_type structure that represents + the return type of the function. Ffi_type objects + describe the types of values. libffi provides + ffi_type objects for many of the native C types: + signed int, unsigned int, signed char, unsigned char, + etc. There is also a pointer ffi_type object and + a void ffi_type. Use &ffi_type_void for functions that + don't return values. + + ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. + If NARGS is 0, this is ignored. + + +ffi_prep_cif will return a status code that you are responsible +for checking. It will be one of the following: + + FFI_OK - All is good. + + FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif + came across is bad. + + +Before making the call, the VALUES vector should be initialized +with pointers to the appropriate argument values. + +To call the function using the initialized ffi_cif, use the +ffi_call function: + +void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); + + CIF is a pointer to the ffi_cif initialized specifically + for this function. + + FN is a pointer to the function you want to call. + + RVALUE is a pointer to a chunk of memory that is to hold the + result of the function call. Currently, it must be + at least one word in size (except for the n32 version + under Irix 6.x, which must be a pointer to an 8 byte + aligned value (a long long). It must also be at least + word aligned (depending on the return type, and the + system's alignment requirements). If RTYPE is + &ffi_type_void, this is ignored. If RVALUE is NULL, + the return value is discarded. + + AVALUES is a vector of void* that point to the memory locations + holding the argument values for a call. + If NARGS is 0, this is ignored. + + +If you are expecting a return value from FN it will have been stored +at RVALUE. + + + + An Example + ---------- + +Here is a trivial example that calls puts() a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_uint; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + + + Aggregate Types + --------------- + +Although libffi has no special support for unions or bit-fields, it is +perfectly happy passing structures back and forth. You must first +describe the structure to libffi by creating a new ffi_type object +for it. Here is the definition of ffi_type: + + typedef struct _ffi_type + { + unsigned size; + short alignment; + short type; + struct _ffi_type **elements; + } ffi_type; + +All structures must have type set to FFI_TYPE_STRUCT. You may set +size and alignment to 0. These will be calculated and reset to the +appropriate values by ffi_prep_cif(). + +elements is a NULL terminated array of pointers to ffi_type objects +that describe the type of the structure elements. These may, in turn, +be structure elements. + +The following example initializes a ffi_type object representing the +tm struct from Linux's time.h: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + + +Platform Specific Notes +======================= + + Intel x86 + --------- + +There are no known problems with the x86 port. + + Sun SPARC - SunOS 4.1.3 & Solaris 2.x + ------------------------------------- + +You must use GNU Make to build libffi on Sun platforms. + + MIPS - Irix 5.3 & 6.x + --------------------- + +Irix 6.2 and better supports three different calling conventions: o32, +n32 and n64. Currently, libffi only supports both o32 and n32 under +Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be +configured for whichever calling convention it was built for. + +By default, the configure script will try to build libffi with the GNU +development tools. To build libffi with the SGI development tools, set +the environment variable CC to either "cc -32" or "cc -n32" before +running configure under Irix 6.x (depending on whether you want an o32 +or n32 library), or just "cc" for Irix 5.3. + +With the n32 calling convention, when returning structures smaller +than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. +Here's one way of forcing this: + + double struct_storage[2]; + my_small_struct *s = (my_small_struct *) struct_storage; + /* Use s for RVALUE */ + +If you don't do this you are liable to get spurious bus errors. + +"long long" values are not supported yet. + +You must use GNU Make to build libffi on SGI platforms. + + ARM - System V ABI + ------------------ + +The ARM port was performed on a NetWinder running ARM Linux ELF +(2.0.31) and gcc 2.8.1. + + + + PowerPC System V ABI + -------------------- + +There are two `System V ABI's which libffi implements for PowerPC. +They differ only in how small structures are returned from functions. + +In the FFI_SYSV version, structures that are 8 bytes or smaller are +returned in registers. This is what GCC does when it is configured +for solaris, and is what the System V ABI I have (dated September +1995) says. + +In the FFI_GCC_SYSV version, all structures are returned the same way: +by passing a pointer as the first argument to the function. This is +what GCC does when it is configured for linux or a generic sysv +target. + +EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a +inconsistency with the SysV ABI: When a procedure is called with many +floating-point arguments, some of them get put on the stack. They are +all supposed to be stored in double-precision format, even if they are +only single-precision, but EGCS stores single-precision arguments as +single-precision anyway. This causes one test to fail (the `many +arguments' test). + + +What's With The Crazy Comments? +=============================== + +You might notice a number of cryptic comments in the code, delimited +by /*@ and @*/. These are annotations read by the program LCLint, a +tool for statically checking C programs. You can read all about it at +. + + +History +======= + +1.20 Oct-5-98 + Raffaele Sena produces ARM port. + +1.19 Oct-5-98 + Fixed x86 long double and long long return support. + m68k bug fixes from Andreas Schwab. + Patch for DU assembler compatibility for the Alpha from Richard + Henderson. + +1.18 Apr-17-98 + Bug fixes and MIPS configuration changes. + +1.17 Feb-24-98 + Bug fixes and m68k port from Andreas Schwab. PowerPC port from + Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + +1.16 Feb-11-98 + Richard Henderson produces Alpha port. + +1.15 Dec-4-97 + Fixed an n32 ABI bug. New libtool, auto* support. + +1.14 May-13-97 + libtool is now used to generate shared and static libraries. + Fixed a minor portability problem reported by Russ McManus + . + +1.13 Dec-2-96 + Added --enable-purify-safety to keep Purify from complaining + about certain low level code. + Sparc fix for calling functions with < 6 args. + Linux x86 a.out fix. + +1.12 Nov-22-96 + Added missing ffi_type_void, needed for supporting void return + types. Fixed test case for non MIPS machines. Cygnus Support + is now Cygnus Solutions. + +1.11 Oct-30-96 + Added notes about GNU make. + +1.10 Oct-29-96 + Added configuration fix for non GNU compilers. + +1.09 Oct-29-96 + Added --enable-debug configure switch. Clean-ups based on LCLint + feedback. ffi_mips.h is always installed. Many configuration + fixes. Fixed ffitest.c for sparc builds. + +1.08 Oct-15-96 + Fixed n32 problem. Many clean-ups. + +1.07 Oct-14-96 + Gordon Irlam rewrites v8.S again. Bug fixes. + +1.06 Oct-14-96 + Gordon Irlam improved the sparc port. + +1.05 Oct-14-96 + Interface changes based on feedback. + +1.04 Oct-11-96 + Sparc port complete (modulo struct passing bug). + +1.03 Oct-10-96 + Passing struct args, and returning struct values works for + all architectures/calling conventions. Expanded tests. + +1.02 Oct-9-96 + Added SGI n32 support. Fixed bugs in both o32 and Linux support. + Added "make test". + +1.01 Oct-8-96 + Fixed float passing bug in mips version. Restructured some + of the code. Builds cleanly with SGI tools. + +1.00 Oct-7-96 + First release. No public announcement. + + +Authors & Credits +================= + +libffi was written by Anthony Green . + +Portions of libffi were derived from Gianni Mariani's free gencall +library for Silicon Graphics machines. + +The closure mechanism was designed and implemented by Kresten Krab +Thorup. + +The Sparc port was derived from code contributed by the fine folks at +Visible Decisions Inc . Further enhancements were +made by Gordon Irlam at Cygnus Solutions . + +The Alpha port was written by Richard Henderson at Cygnus Solutions. + +Andreas Schwab ported libffi to m68k Linux and provided a number of +bug fixes. + +Geoffrey Keating ported libffi to the PowerPC. + +Raffaele Sena ported libffi to the ARM. + +Jesper Skov and Andrew Haley both did more than their fair share of +stepping through the code and tracking down bugs. + +Thanks also to Tom Tromey for bug fixes and configuration help. + +Thanks to Jim Blandy, who provided some useful feedback on the libffi +interface. + +If you have a problem, or have found a bug, please send a note to +green@cygnus.com. diff -r -u ./Modules/_ctypes/libffi_osx/README.pyobjc ./Modules/_ctypes/libffi_osx/README.pyobjc new file mode 100644 index 0000000..405d85f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/README.pyobjc @@ -0,0 +1,5 @@ +This directory contains a slightly modified version of libffi, extracted from +the GCC source-tree. + +The only modifications are those that are necessary to compile libffi using +the Apple provided compiler and outside of the GCC source tree. diff -r -u ./Modules/_ctypes/libffi_osx/ffi.c ./Modules/_ctypes/libffi_osx/ffi.c new file mode 100644 index 0000000..bf42093 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/ffi.c @@ -0,0 +1,226 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +/* Round up to FFI_SIZEOF_ARG. */ +#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + +/* Perform machine independent initialization of aggregate type + specifications. */ + +static ffi_status +initialize_aggregate( +/*@out@*/ ffi_type* arg) +{ +/*@-usedef@*/ + + if (arg == NULL || arg->elements == NULL || + arg->size != 0 || arg->alignment != 0) + return FFI_BAD_TYPEDEF; + + ffi_type** ptr = &(arg->elements[0]); + + while ((*ptr) != NULL) + { + if (((*ptr)->size == 0) && (initialize_aggregate(*ptr) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#ifdef POWERPC_DARWIN + int curalign = (*ptr)->alignment; + + if (ptr != &(arg->elements[0])) + { + if (curalign > 4 && curalign != 16) + curalign = 4; + } + + arg->size = ALIGN(arg->size, curalign); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > curalign) ? + arg->alignment : curalign; +#else + arg->size = ALIGN(arg->size, (*ptr)->alignment); + arg->size += (*ptr)->size; + arg->alignment = (arg->alignment > (*ptr)->alignment) ? + arg->alignment : (*ptr)->alignment; +#endif + + ptr++; + } + + /* Structure size includes tail padding. This is important for + structures that fit in one register on ABIs like the PowerPC64 + Linux ABI that right justify small structs in a register. + It's also needed for nested structure layout, for example + struct A { long a; char b; }; struct B { struct A x; char y; }; + should find y at an offset of 2*sizeof(long) and result in a + total size of 3*sizeof(long). */ + arg->size = ALIGN(arg->size, arg->alignment); + + if (arg->size == 0) + return FFI_BAD_TYPEDEF; + + return FFI_OK; + +/*@=usedef@*/ +} + +#ifndef __CRIS__ +/* The CRIS ABI specifies structure elements to have byte + alignment only, so it completely overrides this functions, + which assumes "natural" alignment and padding. */ + +/* Perform machine independent ffi_cif preparation, then call + machine dependent routine. */ + +#if defined(X86_DARWIN) + +static inline bool +struct_on_stack( + int size) +{ + if (size > 8) + return true; + + /* This is not what the ABI says, but is what is really implemented */ + switch (size) + { + case 1: + case 2: + case 4: + case 8: + return false; + + default: + return true; + } +} + +#endif // defined(X86_DARWIN) + +// Arguments' ffi_type->alignment must be nonzero. +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes) +{ + if (cif == NULL) + return FFI_BAD_TYPEDEF; + + if (abi <= FFI_FIRST_ABI || abi > FFI_DEFAULT_ABI) + return FFI_BAD_ABI; + + unsigned int bytes = 0; + unsigned int i; + ffi_type** ptr; + + cif->abi = abi; + cif->arg_types = atypes; + cif->nargs = nargs; + cif->rtype = rtype; + cif->flags = 0; + + /* Initialize the return type if necessary */ + /*@-usedef@*/ + if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) + return FFI_BAD_TYPEDEF; + /*@=usedef@*/ + + /* Perform a sanity check on the return type */ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT +#ifdef SPARC + && (cif->abi != FFI_V9 || cif->rtype->size > 32) +#endif +#ifdef X86_DARWIN + && (struct_on_stack(cif->rtype->size)) +#endif + ) + bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + /* Initialize any uninitialized aggregate type definitions */ + if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + return FFI_BAD_TYPEDEF; + + if ((*ptr)->alignment == 0) + return FFI_BAD_TYPEDEF; + + /* Perform a sanity check on the argument type, do this + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +#if defined(X86_DARWIN) + { + int align = (*ptr)->alignment; + + if (align > 4) + align = 4; + + if ((align - 1) & bytes) + bytes = ALIGN(bytes, align); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#elif !defined __x86_64__ && !defined S390 && !defined PA +#ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) + || ((*ptr)->type == FFI_TYPE_LONGDOUBLE + && cif->abi != FFI_V9)) + bytes += sizeof(void*); + else +#endif + { + /* Add any padding if necessary */ + if (((*ptr)->alignment - 1) & bytes) + bytes = ALIGN(bytes, (*ptr)->alignment); + + bytes += STACK_ARG_SIZE((*ptr)->size); + } +#endif + } + + cif->bytes = bytes; + + /* Perform machine dependent cif processing */ + return ffi_prep_cif_machdep(cif); +} +#endif /* not __CRIS__ */ diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi.h ./Modules/_ctypes/libffi_osx/include/ffi.h new file mode 100644 index 0000000..c104a5c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi.h @@ -0,0 +1,355 @@ +/* -----------------------------------------------------------------*-C-*- + libffi PyOBJC - Copyright (c) 1996-2003 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and closure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifdef MACOSX +# if defined(__i386__) || defined(__x86_64__) +# define X86_DARWIN +# elif defined(__ppc__) || defined(__ppc64__) +# define POWERPC_DARWIN +# else +# error "Unsupported MacOS X CPU type" +# endif +#else +#error "Unsupported OS type" +#endif + +/* ---- System configuration information --------------------------------- */ + +#include "ffitarget.h" +#include "fficonfig.h" + +#ifndef LIBFFI_ASM + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# endif +#endif + +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +#error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else +#error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else +#error "int size not supported" +#endif + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != 9223372036854775807 +# error "no 64-bit data type supported" +# endif +#elif LONG_MAX != 9223372036854775807 +#error "long size not supported" +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t + can hold a pointer. */ + +typedef struct _ffi_type { + size_t size; + unsigned short alignment; + unsigned short type; +/*@null@*/ struct _ffi_type** elements; +} ffi_type; + +/* These are defined in types.c */ +extern ffi_type ffi_type_void; +extern ffi_type ffi_type_uint8; +extern ffi_type ffi_type_sint8; +extern ffi_type ffi_type_uint16; +extern ffi_type ffi_type_sint16; +extern ffi_type ffi_type_uint32; +extern ffi_type ffi_type_sint32; +extern ffi_type ffi_type_uint64; +extern ffi_type ffi_type_sint64; +extern ffi_type ffi_type_float; +extern ffi_type ffi_type_double; +extern ffi_type ffi_type_longdouble; +extern ffi_type ffi_type_pointer; + +typedef enum ffi_status { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct ffi_cif { + ffi_abi abi; + unsigned nargs; +/*@dependent@*/ ffi_type** arg_types; +/*@dependent@*/ ffi_type* rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +void +ffi_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_raw_size( + ffi_cif* cif); + +/* This is analogous to the raw API, except it uses Java parameter + packing, even on 64-bit machines. I.e. on 64-bit machines + longs and doubles are followed by an empty 64-bit word. */ +void +ffi_java_raw_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ ffi_raw* avalue); + +void +ffi_java_ptrarray_to_raw( + ffi_cif* cif, + void** args, + ffi_raw* raw); + +void +ffi_java_raw_to_ptrarray( + ffi_cif* cif, + ffi_raw* raw, + void** args); + +size_t +ffi_java_raw_size( + ffi_cif* cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +typedef struct ffi_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void* user_data; +} ffi_closure; + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void* user_data); + +void ffi_closure_free(void *); +void *ffi_closure_alloc (size_t size, void **code); + +typedef struct ffi_raw_closure { + char tramp[FFI_TRAMPOLINE_SIZE]; + ffi_cif* cif; + +#if !FFI_NATIVE_RAW_API + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + void (*translate_args)(ffi_cif*,void*,void**,void*); + void* this_closure; +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void* user_data; +} ffi_raw_closure; + +ffi_status +ffi_prep_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +ffi_status +ffi_prep_java_raw_closure( + ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void* user_data); + +#endif // FFI_CLOSURES + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status +ffi_prep_cif( +/*@out@*/ /*@partial@*/ ffi_cif* cif, + ffi_abi abi, + unsigned int nargs, +/*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type* rtype, +/*@dependent@*/ ffi_type** atypes); + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +#endif // #ifndef LIBFFI_ASM +/* ---- Definitions shared with assembly code ---------------------------- */ + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 + +#ifdef HAVE_LONG_DOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#else +# define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif + +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_POINTER + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef LIBFFI_H diff -r -u ./Modules/_ctypes/libffi_osx/include/ffi_common.h ./Modules/_ctypes/libffi_osx/include/ffi_common.h new file mode 100644 index 0000000..685a358 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffi_common.h @@ -0,0 +1,102 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fficonfig.h" + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char* alloca(); +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy((s), (d), (n)) +# endif +#endif + +/*#if defined(FFI_DEBUG) +#include +#endif*/ + +#ifdef FFI_DEBUG +#include + +/*@exits@*/ void +ffi_assert( +/*@temp@*/ char* expr, +/*@temp@*/ char* file, + int line); +void +ffi_stop_here(void); +void +ffi_type_test( +/*@temp@*/ /*@out@*/ ffi_type* a, +/*@temp@*/ char* file, + int line); + +# define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +# define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +# define FFI_ASSERT_VALID_TYPE(x) ffi_type_test(x, __FILE__, __LINE__) +#else +# define FFI_ASSERT(x) +# define FFI_ASSERT_AT(x, f, l) +# define FFI_ASSERT_VALID_TYPE(x) +#endif // #ifdef FFI_DEBUG + +#define ALIGN(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) + +/* Perform machine dependent cif processing */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif); + +/* Extended cif, used in callback from assembly routine */ +typedef struct extended_cif { +/*@dependent@*/ ffi_cif* cif; +/*@dependent@*/ void* rvalue; +/*@dependent@*/ void** avalue; +} extended_cif; + +/* Terse sized type definitions. */ +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +typedef float FLOAT32; + +#ifdef __cplusplus +} +#endif + +#endif // #ifndef FFI_COMMON_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/fficonfig.h ./Modules/_ctypes/libffi_osx/include/fficonfig.h new file mode 100644 index 0000000..2172490 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/fficonfig.h @@ -0,0 +1,150 @@ +/* Manually created fficonfig.h for Darwin on PowerPC or Intel + + This file is manually generated to do away with the need for autoconf and + therefore make it easier to cross-compile and build fat binaries. + + NOTE: This file was added by PyObjC. +*/ + +#ifndef MACOSX +#error "This file is only supported on Mac OS X" +#endif + +#if defined(__i386__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__x86_64__) +# define BYTEORDER 1234 +# undef HOST_WORDS_BIG_ENDIAN +# undef WORDS_BIGENDIAN +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#elif defined(__ppc__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# if __GNUC__ >= 4 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 +# else +# undef HAVE_LONG_DOUBLE +# define SIZEOF_LONG_DOUBLE 8 +# endif + +#elif defined(__ppc64__) +# define BYTEORDER 4321 +# define HOST_WORDS_BIG_ENDIAN 1 +# define WORDS_BIGENDIAN 1 +# define SIZEOF_DOUBLE 8 +# define HAVE_LONG_DOUBLE 1 +# define SIZEOF_LONG_DOUBLE 16 + +#else +#error "Unknown CPU type" +#endif + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "aw" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Define this is you do not want support for the raw API. */ +#define FFI_NO_RAW_API 1 + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +/* #undef HAVE_MMAP_DEV_ZERO */ + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +/* #undef HAVE_RO_EH_FRAME */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://gcc.gnu.org/bugs.html" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.1" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if you are using Purify and want to suppress spurious messages. */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "2.1-pyobjc" + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) .hidden name +# else +# define FFI_HIDDEN __attribute__((visibility ("hidden"))) +# endif +#else +# ifdef LIBFFI_ASM +# define FFI_HIDDEN(name) +# else +# define FFI_HIDDEN +# endif +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ffitarget.h ./Modules/_ctypes/libffi_osx/include/ffitarget.h new file mode 100644 index 0000000..faaa30d --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ffitarget.h @@ -0,0 +1,13 @@ +/* Dispatch to the right ffitarget file. This file is PyObjC specific; in a + normal build, the build environment copies the file to the right location or + sets up the right include flags. We want to do neither because that would + make building fat binaries harder. +*/ + +#if defined(__i386__) || defined(__x86_64__) +#include "x86-ffitarget.h" +#elif defined(__ppc__) || defined(__ppc64__) +#include "ppc-ffitarget.h" +#else +#error "Unsupported CPU type" +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h new file mode 100644 index 0000000..2318421 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/ppc-ffitarget.h @@ -0,0 +1,104 @@ +/* -----------------------------------------------------------------*-C-*- + ppc-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if (defined(POWERPC) && defined(__powerpc64__)) || \ + (defined(POWERPC_DARWIN) && defined(__ppc64__)) +#define POWERPC64 +#endif + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef POWERPC + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, +# ifdef POWERPC64 + FFI_DEFAULT_ABI = FFI_LINUX64, +# else + FFI_DEFAULT_ABI = FFI_GCC_SYSV, +# endif +#endif + +#ifdef POWERPC_AIX + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_AIX, +#endif + +#ifdef POWERPC_DARWIN + FFI_AIX, + FFI_DARWIN, + FFI_DEFAULT_ABI = FFI_DARWIN, +#endif + +#ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_NATIVE_RAW_API 0 + +/* Needed for FFI_SYSV small structure returns. */ +#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + +#if defined(POWERPC64) /*|| defined(POWERPC_AIX)*/ +# define FFI_TRAMPOLINE_SIZE 48 +#elif defined(POWERPC_AIX) +# define FFI_TRAMPOLINE_SIZE 24 +#else +# define FFI_TRAMPOLINE_SIZE 40 +#endif + +#ifndef LIBFFI_ASM +# if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) +typedef struct ffi_aix_trampoline_struct { + void* code_pointer; /* Pointer to ffi_closure_ASM */ + void* toc; /* TOC */ + void* static_chain; /* Pointer to closure */ +} ffi_aix_trampoline_struct; +# endif +#endif // #ifndef LIBFFI_ASM + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h new file mode 100644 index 0000000..55c2b6c --- /dev/null +++ ./Modules/_ctypes/libffi_osx/include/x86-ffitarget.h @@ -0,0 +1,88 @@ +/* -----------------------------------------------------------------*-C-*- + x86-ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +/* ---- System specific configurations ----------------------------------- */ + +#if defined(X86_64) && defined(__i386__) +# undef X86_64 +# define X86 +#endif + +#if defined(__x86_64__) +# ifndef X86_64 +# define X86_64 +# endif +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +#ifndef LIBFFI_ASM + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + + /* ---- Intel x86 Win32 ---------- */ +#ifdef X86_WIN32 + FFI_SYSV, + FFI_STDCALL, + /* TODO: Add fastcall support for the sake of completeness */ + FFI_DEFAULT_ABI = FFI_SYSV, +#endif + + /* ---- Intel x86 and AMD x86-64 - */ +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) + FFI_SYSV, + FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ +# ifdef __i386__ + FFI_DEFAULT_ABI = FFI_SYSV, +# else + FFI_DEFAULT_ABI = FFI_UNIX64, +# endif +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; + +#endif // #ifndef LIBFFI_ASM + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 + +#if defined(X86_64) || (defined(__x86_64__) && defined(X86_DARWIN)) +# define FFI_TRAMPOLINE_SIZE 24 +# define FFI_NATIVE_RAW_API 0 +#else +# define FFI_TRAMPOLINE_SIZE 10 +# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + +#endif // #ifndef LIBFFI_TARGET_H \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S new file mode 100644 index 0000000..f143dbd --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.S @@ -0,0 +1,365 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc-darwin.S - Copyright (c) 2000 John Hornkvist + Copyright (c) 2004 Free Software Foundation, Inc. + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include +#include +#include + +.text + .align 2 +.globl _ffi_prep_args + +.text + .align 2 +.globl _ffi_call_DARWIN + +.text + .align 2 +_ffi_call_DARWIN: +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved. */ + +LFB1: + /* Save the old stack pointer as AP. */ + mr r8,r1 + +LCFI0: +#if defined(__ppc64__) + /* Allocate the stack space we need. + r4 (size of input data) + 48 bytes (linkage area) + 40 bytes (saved registers) + 8 bytes (extra FPR) + r4 + 96 bytes total + */ + + addi r4,r4,-96 // Add our overhead. + li r0,-32 // Align to 32 bytes. + and r4,r4,r0 +#endif + stgux r1,r1,r4 // Grow the stack. + mflr r9 + + /* Save registers we use. */ +#if defined(__ppc64__) + std r27,-40(r8) +#endif + stg r28,MODE_CHOICE(-16,-32)(r8) + stg r29,MODE_CHOICE(-12,-24)(r8) + stg r30,MODE_CHOICE(-8,-16)(r8) + stg r31,MODE_CHOICE(-4,-8)(r8) + stg r9,SF_RETURN(r8) /* return address */ +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + stg r2,MODE_CHOICE(20,40)(r1) +#endif + +LCFI1: +#if defined(__ppc64__) + mr r27,r3 // our extended_cif +#endif + /* Save arguments over call. */ + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ + +LCFI2: + /* Call ffi_prep_args. */ + mr r4,r1 + li r9,0 + mtctr r12 /* r12 holds address of _ffi_prep_args. */ + bctrl +#if !defined(POWERPC_DARWIN) /* TOC unused in OS X */ + lg r2,MODE_CHOICE(20,40)(r1) +#endif + + /* Now do the call. + Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40,r31 + + /* Load all those argument registers. + We have set up a nice stack frame, just load it into registers. */ + lg r3,SF_ARG1(r1) + lg r4,SF_ARG2(r1) + lg r5,SF_ARG3(r1) + lg r6,SF_ARG4(r1) + nop + lg r7,SF_ARG5(r1) + lg r8,SF_ARG6(r1) + lg r9,SF_ARG7(r1) + lg r10,SF_ARG8(r1) + + /* Load all the FP registers. */ + bf 6,L2 /* No floats to load. */ +#if defined(__ppc64__) + lfd f1,MODE_CHOICE(-16,-40)-(14*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(11*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(10*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(7*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(6*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(3*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(2*8)(r28) + lfd f14,MODE_CHOICE(-16,-40)-(1*8)(r28) +#elif defined(__ppc__) + lfd f1,MODE_CHOICE(-16,-40)-(13*8)(r28) + lfd f2,MODE_CHOICE(-16,-40)-(12*8)(r28) + lfd f3,MODE_CHOICE(-16,-40)-(11*8)(r28) + lfd f4,MODE_CHOICE(-16,-40)-(10*8)(r28) + nop + lfd f5,MODE_CHOICE(-16,-40)-(9*8)(r28) + lfd f6,MODE_CHOICE(-16,-40)-(8*8)(r28) + lfd f7,MODE_CHOICE(-16,-40)-(7*8)(r28) + lfd f8,MODE_CHOICE(-16,-40)-(6*8)(r28) + nop + lfd f9,MODE_CHOICE(-16,-40)-(5*8)(r28) + lfd f10,MODE_CHOICE(-16,-40)-(4*8)(r28) + lfd f11,MODE_CHOICE(-16,-40)-(3*8)(r28) + lfd f12,MODE_CHOICE(-16,-40)-(2*8)(r28) + nop + lfd f13,MODE_CHOICE(-16,-40)-(1*8)(r28) +#else +#error undefined architecture +#endif + +L2: + mr r12,r29 // Put the target address in r12 as specified. + mtctr r12 // Get the address to call into CTR. + nop + nop + bctrl // Make the call. + + // Deal with the return value. +#if defined(__ppc64__) + mtcrf 0x3,r31 // flags in cr6 and cr7 + bt 27,L(st_return_value) +#elif defined(__ppc__) + mtcrf 0x1,r31 // flags in cr7 +#else +#error undefined architecture +#endif + + bt 30,L(done_return_value) + bt 29,L(fp_return_value) + stg r3,0(r30) +#if defined(__ppc__) + bf 28,L(done_return_value) // Store the second long if necessary. + stg r4,4(r30) +#endif + // Fall through + +L(done_return_value): + lg r1,0(r1) // Restore stack pointer. + // Restore the registers we used. + lg r9,SF_RETURN(r1) // return address + lg r31,MODE_CHOICE(-4,-8)(r1) + mtlr r9 + lg r30,MODE_CHOICE(-8,-16)(r1) + lg r29,MODE_CHOICE(-12,-24)(r1) + lg r28,MODE_CHOICE(-16,-32)(r1) +#if defined(__ppc64__) + ld r27,-40(r1) +#endif + blr + +#if defined(__ppc64__) +L(st_return_value): + // Grow the stack enough to fit the registers. Leave room for 8 args + // to trample the 1st 8 slots in param area. + stgu r1,-SF_ROUND(280)(r1) // 64 + 104 + 48 + 64 + + // Store GPRs + std r3,SF_ARG9(r1) + std r4,SF_ARG10(r1) + std r5,SF_ARG11(r1) + std r6,SF_ARG12(r1) + nop + std r7,SF_ARG13(r1) + std r8,SF_ARG14(r1) + std r9,SF_ARG15(r1) + std r10,SF_ARG16(r1) + + // Store FPRs + nop + bf 26,L(call_struct_to_ram_form) + stfd f1,SF_ARG17(r1) + stfd f2,SF_ARG18(r1) + stfd f3,SF_ARG19(r1) + stfd f4,SF_ARG20(r1) + nop + stfd f5,SF_ARG21(r1) + stfd f6,SF_ARG22(r1) + stfd f7,SF_ARG23(r1) + stfd f8,SF_ARG24(r1) + nop + stfd f9,SF_ARG25(r1) + stfd f10,SF_ARG26(r1) + stfd f11,SF_ARG27(r1) + stfd f12,SF_ARG28(r1) + nop + stfd f13,SF_ARG29(r1) + +L(call_struct_to_ram_form): + ld r3,0(r27) // extended_cif->cif* + ld r3,16(r3) // ffi_cif->rtype* + addi r4,r1,SF_ARG9 // stored GPRs + addi r6,r1,SF_ARG17 // stored FPRs + li r5,0 // GPR size ptr (NULL) + li r7,0 // FPR size ptr (NULL) + li r8,0 // FPR count ptr (NULL) + li r10,0 // struct offset (NULL) + mr r9,r30 // return area + bl Lffi64_struct_to_ram_form$stub + lg r1,0(r1) // Restore stack pointer. + b L(done_return_value) +#endif + +L(fp_return_value): + /* Do we have long double to store? */ + bf 31,L(fd_return_value) + stfd f1,0(r30) + stfd f2,8(r30) + b L(done_return_value) + +L(fd_return_value): + /* Do we have double to store? */ + bf 28,L(float_return_value) + stfd f1,0(r30) + b L(done_return_value) + +L(float_return_value): + /* We only have a float to store. */ + stfs f1,0(r30) + b L(done_return_value) + +LFE1: +/* END(_ffi_call_DARWIN) */ + +/* Provide a null definition of _ffi_call_AIX. */ +.text + .align 2 +.globl _ffi_call_AIX +.text + .align 2 +_ffi_call_AIX: + blr +/* END(_ffi_call_AIX) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_call_DARWIN.eh +_ffi_call_DARWIN.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align LOG2_GPR_BYTES +LEFDE1: + +#if defined(__ppc64__) +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_ram_form$stub: + .indirect_symbol _ffi64_struct_to_ram_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_ram_form + +LO$ffi64_struct_to_ram_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_ram_form$lazy_ptr - LO$ffi64_struct_to_ram_form)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_ram_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_ram_form + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ +#endif // __ppc__ || __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h new file mode 100644 index 0000000..cf4bd50 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin.h @@ -0,0 +1,85 @@ +/* ----------------------------------------------------------------------- + ppc-darwin.h - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define L(x) x + +#define SF_ARG9 MODE_CHOICE(56,112) +#define SF_ARG10 MODE_CHOICE(60,120) +#define SF_ARG11 MODE_CHOICE(64,128) +#define SF_ARG12 MODE_CHOICE(68,136) +#define SF_ARG13 MODE_CHOICE(72,144) +#define SF_ARG14 MODE_CHOICE(76,152) +#define SF_ARG15 MODE_CHOICE(80,160) +#define SF_ARG16 MODE_CHOICE(84,168) +#define SF_ARG17 MODE_CHOICE(88,176) +#define SF_ARG18 MODE_CHOICE(92,184) +#define SF_ARG19 MODE_CHOICE(96,192) +#define SF_ARG20 MODE_CHOICE(100,200) +#define SF_ARG21 MODE_CHOICE(104,208) +#define SF_ARG22 MODE_CHOICE(108,216) +#define SF_ARG23 MODE_CHOICE(112,224) +#define SF_ARG24 MODE_CHOICE(116,232) +#define SF_ARG25 MODE_CHOICE(120,240) +#define SF_ARG26 MODE_CHOICE(124,248) +#define SF_ARG27 MODE_CHOICE(128,256) +#define SF_ARG28 MODE_CHOICE(132,264) +#define SF_ARG29 MODE_CHOICE(136,272) + +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 +#define NUM_FPR_ARG_REGISTERS 13 + +#define FFI_TYPE_1_BYTE(x) ((x) == FFI_TYPE_UINT8 || (x) == FFI_TYPE_SINT8) +#define FFI_TYPE_2_BYTE(x) ((x) == FFI_TYPE_UINT16 || (x) == FFI_TYPE_SINT16) +#define FFI_TYPE_4_BYTE(x) \ + ((x) == FFI_TYPE_UINT32 || (x) == FFI_TYPE_SINT32 ||\ + (x) == FFI_TYPE_INT || (x) == FFI_TYPE_FLOAT) + +#if !defined(LIBFFI_ASM) + +enum { + FLAG_RETURNS_NOTHING = 1 << (31 - 30), // cr7 + FLAG_RETURNS_FP = 1 << (31 - 29), + FLAG_RETURNS_64BITS = 1 << (31 - 28), + FLAG_RETURNS_128BITS = 1 << (31 - 31), + + FLAG_RETURNS_STRUCT = 1 << (31 - 27), // cr6 + FLAG_STRUCT_CONTAINS_FP = 1 << (31 - 26), + + FLAG_ARG_NEEDS_COPY = 1 << (31 - 7), + FLAG_FP_ARGUMENTS = 1 << (31 - 6), // cr1.eq; specified by ABI + FLAG_4_GPR_ARGUMENTS = 1 << (31 - 5), + FLAG_RETVAL_REFERENCE = 1 << (31 - 4) +}; + +#if defined(__ppc64__) +void ffi64_struct_to_ram_form(const ffi_type*, const char*, unsigned int*, + const char*, unsigned int*, unsigned int*, char*, unsigned int*); +void ffi64_struct_to_reg_form(const ffi_type*, const char*, unsigned int*, + unsigned int*, char*, unsigned int*, char*, unsigned int*); +bool ffi64_stret_needs_ptr(const ffi_type* inType, + unsigned short*, unsigned short*); +#endif + +#endif // !defined(LIBFFI_ASM) \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S new file mode 100644 index 0000000..c3d30c2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-darwin_closure.S @@ -0,0 +1,308 @@ +#if defined(__ppc__) + +/* ----------------------------------------------------------------------- + ppc-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 // Save return address + stg r0,SF_RETURN(r1) + +LCFI0: + /* 24/48 bytes (Linkage Area) + 32/64 bytes (outgoing parameter area, always reserved) + 104 bytes (13*8 from FPR) + 16/32 bytes (result) + 176/232 total bytes */ + + /* skip over caller save area and keep stack aligned to 16/32. */ + stgu r1,-SF_ROUND(176)(r1) + +LCFI1: + /* We want to build up an area for the parameters passed + in registers. (both floating point and integer) */ + + /* 176/256 bytes (callee stack frame aligned to 16/32) + 24/48 bytes (caller linkage area) + 200/304 (start of caller parameter area aligned to 4/8) + */ + + /* Save GPRs 3 - 10 (aligned to 4/8) + in the parents outgoing area. */ + stg r3,200(r1) + stg r4,204(r1) + stg r5,208(r1) + stg r6,212(r1) + stg r7,216(r1) + stg r8,220(r1) + stg r9,224(r1) + stg r10,228(r1) + + /* Save FPRs 1 - 13. (aligned to 8) */ + stfd f1,56(r1) + stfd f2,64(r1) + stfd f3,72(r1) + stfd f4,80(r1) + stfd f5,88(r1) + stfd f6,96(r1) + stfd f7,104(r1) + stfd f8,112(r1) + stfd f9,120(r1) + stfd f10,128(r1) + stfd f11,136(r1) + stfd f12,144(r1) + stfd f13,152(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,160 // result storage + addi r5,r1,200 // saved GPRs + addi r6,r1,56 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + /* Now r3 contains the return type. Use it to look up in a table + so we know how to deal with each type. */ + addi r5,r1,160 // Copy result storage pointer. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: +/* Each of the ret_typeX code fragments has to be exactly 16 bytes long + (4 instructions). For cache effectiveness we align to a 16 byte boundary + first. */ + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +/* case FFI_TYPE_VOID */ +Lret_type0: + b Lfinish + nop + nop + nop + +/* case FFI_TYPE_INT */ +Lret_type1: + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_FLOAT */ +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_DOUBLE */ +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_LONGDOUBLE */ +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +/* case FFI_TYPE_UINT8 */ +Lret_type5: + lbz r3,3(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT8 */ +Lret_type6: + lbz r3,3(r5) + extsb r3,r3 + b Lfinish + nop + +/* case FFI_TYPE_UINT16 */ +Lret_type7: + lhz r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT16 */ +Lret_type8: + lha r3,2(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT32 */ +Lret_type9: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_SINT32 */ +Lret_type10: // same as Lret_type1 + lwz r3,0(r5) + b Lfinish + nop + nop + +/* case FFI_TYPE_UINT64 */ +Lret_type11: + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_SINT64 */ +Lret_type12: // same as Lret_type11 + lwz r3,0(r5) + lwz r4,4(r5) + b Lfinish + nop + +/* case FFI_TYPE_STRUCT */ +Lret_type13: + b Lfinish + nop + nop + nop + +/* End 16-byte aligned cases */ +/* case FFI_TYPE_POINTER */ +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + // fall through + +/* case done */ +Lfinish: + addi r1,r1,SF_ROUND(176) // Restore stack pointer. + lg r0,SF_RETURN(r1) // Restore return address. + mtlr r0 // Restore link register. + blr + +/* END(ffi_closure_ASM) */ + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + + +#endif // __ppc__ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c new file mode 100644 index 0000000..8953d5f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc-ffi_darwin.c @@ -0,0 +1,1776 @@ +#if defined(__ppc__) || defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1998 Geoffrey Keating + + PowerPC Foreign Function Interface + + Darwin ABI support (c) 2001 John Hornkvist + AIX ABI support (c) 2002 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include +#include +#include +#include + +#if 0 +#if defined(POWERPC_DARWIN) +#include // for sys_icache_invalidate() +#endif + +#else + +#pragma weak sys_icache_invalidate +extern void sys_icache_invalidate(void *start, size_t len); + +#endif + + +extern void ffi_closure_ASM(void); + +// The layout of a function descriptor. A C function pointer really +// points to one of these. +typedef struct aix_fd_struct { + void* code_pointer; + void* toc; +} aix_fd; + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments. + + The stack layout we want looks like this: + + | Return address from ffi_call_DARWIN | higher addresses + |--------------------------------------------| + | Previous backchain pointer 4/8 | stack pointer here + |--------------------------------------------|-\ <<< on entry to + | Saved r28-r31 (4/8)*4 | | ffi_call_DARWIN + |--------------------------------------------| | + | Parameters (at least 8*(4/8)=32/64) | | (176) +112 - +288 + |--------------------------------------------| | + | Space for GPR2 4/8 | | + |--------------------------------------------| | stack | + | Reserved (4/8)*2 | | grows | + |--------------------------------------------| | down V + | Space for callee's LR 4/8 | | + |--------------------------------------------| | lower addresses + | Saved CR 4/8 | | + |--------------------------------------------| | stack pointer here + | Current backchain pointer 4/8 | | during + |--------------------------------------------|-/ <<< ffi_call_DARWIN + + Note: ppc64 CR is saved in the low word of a long on the stack. +*/ + +/*@-exportheader@*/ +void +ffi_prep_args( + extended_cif* inEcif, + unsigned *const stack) +/*@=exportheader@*/ +{ + /* Copy the ecif to a local var so we can trample the arg. + BC note: test this with GP later for possible problems... */ + volatile extended_cif* ecif = inEcif; + + const unsigned bytes = ecif->cif->bytes; + const unsigned flags = ecif->cif->flags; + + /* Cast the stack arg from int* to long*. sizeof(long) == 4 in 32-bit mode + and 8 in 64-bit mode. */ + unsigned long *const longStack = (unsigned long *const)stack; + + /* 'stacktop' points at the previous backchain pointer. */ +#if defined(__ppc64__) + // In ppc-darwin.s, an extra 96 bytes is reserved for the linkage area, + // saved registers, and an extra FPR. + unsigned long *const stacktop = + (unsigned long *)(unsigned long)((char*)longStack + bytes + 96); +#elif defined(__ppc__) + unsigned long *const stacktop = longStack + (bytes / sizeof(long)); +#else +#error undefined architecture +#endif + + /* 'fpr_base' points at the space for fpr1, and grows upwards as + we use FPR registers. */ + double* fpr_base = (double*)(stacktop - ASM_NEEDS_REGISTERS) - + NUM_FPR_ARG_REGISTERS; + +#if defined(__ppc64__) + // 64-bit saves an extra register, and uses an extra FPR. Knock fpr_base + // down a couple pegs. + fpr_base -= 2; +#endif + + unsigned int fparg_count = 0; + + /* 'next_arg' grows up as we put parameters in it. */ + unsigned long* next_arg = longStack + 6; /* 6 reserved positions. */ + + int i; + double double_tmp; + void** p_argv = ecif->avalue; + unsigned long gprvalue; + ffi_type** ptr = ecif->cif->arg_types; + + /* Check that everything starts aligned properly. */ + FFI_ASSERT(stack == SF_ROUND(stack)); + FFI_ASSERT(stacktop == SF_ROUND(stacktop)); + FFI_ASSERT(bytes == SF_ROUND(bytes)); + + /* Deal with return values that are actually pass-by-reference. + Rule: + Return values are referenced by r3, so r4 is the first parameter. */ + + if (flags & FLAG_RETVAL_REFERENCE) + *next_arg++ = (unsigned long)(char*)ecif->rvalue; + + /* Now for the arguments. */ + for (i = ecif->cif->nargs; i > 0; i--, ptr++, p_argv++) + { + switch ((*ptr)->type) + { + /* If a floating-point parameter appears before all of the general- + purpose registers are filled, the corresponding GPRs that match + the size of the floating-point parameter are shadowed for the + benefit of vararg and pre-ANSI functions. */ + case FFI_TYPE_FLOAT: + double_tmp = *(float*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg++; + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + + case FFI_TYPE_DOUBLE: + double_tmp = *(double*)*p_argv; + + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *fpr_base++ = double_tmp; + + *(double*)next_arg = double_tmp; + + next_arg += MODE_CHOICE(2,1); + fparg_count++; + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double*)fpr_base = *(long double*)*p_argv; +#elif defined(__ppc__) + if (fparg_count < NUM_FPR_ARG_REGISTERS - 1) + *(long double*)fpr_base = *(long double*)*p_argv; + else if (fparg_count == NUM_FPR_ARG_REGISTERS - 1) + *(double*)fpr_base = *(double*)*p_argv; +#else +#error undefined architecture +#endif + + *(long double*)next_arg = *(long double*)*p_argv; + fparg_count += 2; + fpr_base += 2; + next_arg += MODE_CHOICE(4,2); + FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); + + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: +#if defined(__ppc64__) + gprvalue = *(long long*)*p_argv; + goto putgpr; +#elif defined(__ppc__) + *(long long*)next_arg = *(long long*)*p_argv; + next_arg += 2; + break; +#else +#error undefined architecture +#endif + + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT8: + gprvalue = *(unsigned char*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT8: + gprvalue = *(signed char*)*p_argv; + goto putgpr; + + case FFI_TYPE_UINT16: + gprvalue = *(unsigned short*)*p_argv; + goto putgpr; + + case FFI_TYPE_SINT16: + gprvalue = *(signed short*)*p_argv; + goto putgpr; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + + ffi64_struct_to_reg_form(*ptr, (char*)*p_argv, NULL, &fparg_count, + (char*)next_arg, &gprSize, (char*)fpr_base, &fprSize); + next_arg += gprSize / sizeof(long); + fpr_base += fprSize / sizeof(double); + +#elif defined(__ppc__) + char* dest_cpy = (char*)next_arg; + + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. + Structures with 3 byte in size are padded upwards. */ + unsigned size_al = (*ptr)->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + + if (ecif->cif->abi == FFI_DARWIN) + { + if (size_al < 3) + dest_cpy += 4 - size_al; + } + + memcpy((char*)dest_cpy, (char*)*p_argv, size_al); + next_arg += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + gprvalue = *(unsigned*)*p_argv; + +putgpr: + *next_arg++ = gprvalue; + break; + + default: + break; + } + } + + /* Check that we didn't overrun the stack... */ + //FFI_ASSERT(gpr_base <= stacktop - ASM_NEEDS_REGISTERS); + //FFI_ASSERT((unsigned *)fpr_base + // <= stacktop - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); + //FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); +} + +#if defined(__ppc64__) + +bool +ffi64_struct_contains_fp( + const ffi_type* inType) +{ + bool containsFP = false; + unsigned int i; + + for (i = 0; inType->elements[i] != NULL && !containsFP; i++) + { + if (inType->elements[i]->type == FFI_TYPE_FLOAT || + inType->elements[i]->type == FFI_TYPE_DOUBLE || + inType->elements[i]->type == FFI_TYPE_LONGDOUBLE) + containsFP = true; + else if (inType->elements[i]->type == FFI_TYPE_STRUCT) + containsFP = ffi64_struct_contains_fp(inType->elements[i]); + } + + return containsFP; +} + +#endif // defined(__ppc64__) + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + /* All this is for the DARWIN ABI. */ + int i; + ffi_type** ptr; + int intarg_count = 0; + int fparg_count = 0; + unsigned int flags = 0; + unsigned int size_al = 0; + + /* All the machine-independent calculation of cif->bytes will be wrong. + Redo the calculation for DARWIN. */ + + /* Space for the frame pointer, callee's LR, CR, etc, and for + the asm's temp regs. */ + unsigned int bytes = (6 + ASM_NEEDS_REGISTERS) * sizeof(long); + + /* Return value handling. The rules are as follows: + - 32-bit (or less) integer values are returned in gpr3; + - Structures of size <= 4 bytes also returned in gpr3; + - 64-bit integer values and structures between 5 and 8 bytes are + returned in gpr3 and gpr4; + - Single/double FP values are returned in fpr1; + - Long double FP (if not equivalent to double) values are returned in + fpr1 and fpr2; + - Larger structures values are allocated space and a pointer is passed + as the first argument. */ + switch (cif->rtype->type) + { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + flags |= FLAG_RETURNS_128BITS; + flags |= FLAG_RETURNS_FP; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_DOUBLE: + flags |= FLAG_RETURNS_64BITS; + /* Fall through. */ + case FFI_TYPE_FLOAT: + flags |= FLAG_RETURNS_FP; + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + flags |= FLAG_RETURNS_64BITS; + break; + + case FFI_TYPE_STRUCT: + { +#if defined(__ppc64__) + + if (ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) + { + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + } + else + { + flags |= FLAG_RETURNS_STRUCT; + + if (ffi64_struct_contains_fp(cif->rtype)) + flags |= FLAG_STRUCT_CONTAINS_FP; + } + +#elif defined(__ppc__) + + flags |= FLAG_RETVAL_REFERENCE; + flags |= FLAG_RETURNS_NOTHING; + intarg_count++; + +#else +#error undefined architecture +#endif + break; + } + + case FFI_TYPE_VOID: + flags |= FLAG_RETURNS_NOTHING; + break; + + default: + /* Returns 32-bit integer, or similar. Nothing to do here. */ + break; + } + + /* The first NUM_GPR_ARG_REGISTERS words of integer arguments, and the + first NUM_FPR_ARG_REGISTERS fp arguments, go in registers; the rest + goes on the stack. Structures are passed as a pointer to a copy of + the structure. Stuff on the stack needs to keep proper alignment. */ + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + switch ((*ptr)->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + fparg_count++; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + if (fparg_count > NUM_FPR_ARG_REGISTERS + && intarg_count % 2 != 0) + intarg_count++; + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + fparg_count += 2; + /* If this FP arg is going on the stack, it must be + 8-byte-aligned. */ + + if ( +#if defined(__ppc64__) + fparg_count > NUM_FPR_ARG_REGISTERS + 1 +#elif defined(__ppc__) + fparg_count > NUM_FPR_ARG_REGISTERS +#else +#error undefined architecture +#endif + && intarg_count % 2 != 0) + intarg_count++; + + intarg_count += 2; + break; +#endif // FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + /* 'long long' arguments are passed as two words, but + either both words must fit in registers or both go + on the stack. If they go on the stack, they must + be 8-byte-aligned. */ + if (intarg_count == NUM_GPR_ARG_REGISTERS - 1 + || (intarg_count >= NUM_GPR_ARG_REGISTERS + && intarg_count % 2 != 0)) + intarg_count++; + + intarg_count += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_STRUCT: + size_al = (*ptr)->size; + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN((*ptr)->size, 8); + +#if defined(__ppc64__) + // Look for FP struct members. + unsigned int j; + + for (j = 0; (*ptr)->elements[j] != NULL; j++) + { + if ((*ptr)->elements[j]->type == FFI_TYPE_FLOAT || + (*ptr)->elements[j]->type == FFI_TYPE_DOUBLE) + { + fparg_count++; + + if (fparg_count > NUM_FPR_ARG_REGISTERS) + intarg_count++; + } + else if ((*ptr)->elements[j]->type == FFI_TYPE_LONGDOUBLE) + { + fparg_count += 2; + + if (fparg_count > NUM_FPR_ARG_REGISTERS + 1) + intarg_count += 2; + } + else + intarg_count++; + } +#elif defined(__ppc__) + intarg_count += (size_al + 3) / 4; +#else +#error undefined architecture +#endif + + break; + + default: + /* Everything else is passed as a 4/8-byte word in a GPR, either + the object itself or a pointer to it. */ + intarg_count++; + break; + } + } + + /* Space for the FPR registers, if needed. */ + if (fparg_count != 0) + { + flags |= FLAG_FP_ARGUMENTS; +#if defined(__ppc64__) + bytes += (NUM_FPR_ARG_REGISTERS + 1) * sizeof(double); +#elif defined(__ppc__) + bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); +#else +#error undefined architecture +#endif + } + + /* Stack space. */ +#if defined(__ppc64__) + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#elif defined(__ppc__) + if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#else +#error undefined architecture +#endif + else + bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); + + /* The stack space allocated needs to be a multiple of 16/32 bytes. */ + bytes = SF_ROUND(bytes); + + cif->flags = flags; + cif->bytes = bytes; + + return FFI_OK; +} + +/*@-declundef@*/ +/*@-exportheader@*/ +extern void +ffi_call_AIX( +/*@out@*/ extended_cif*, + unsigned, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); + +extern void +ffi_call_DARWIN( +/*@out@*/ extended_cif*, + unsigned long, + unsigned, +/*@out@*/ unsigned*, + void (*fn)(void), + void (*fn2)(extended_cif*, unsigned *const)); +/*@=declundef@*/ +/*@=exportheader@*/ + +void +ffi_call( +/*@dependent@*/ ffi_cif* cif, + void (*fn)(void), +/*@out@*/ void* rvalue, +/*@dependent@*/ void** avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return + value address then we need to make one. */ + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + /*@-sysunrecog@*/ + ecif.rvalue = alloca(cif->rtype->size); + /*@=sysunrecog@*/ + } + else + ecif.rvalue = rvalue; + + switch (cif->abi) + { + case FFI_AIX: + /*@-usedef@*/ + ffi_call_AIX(&ecif, -cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + case FFI_DARWIN: + /*@-usedef@*/ + ffi_call_DARWIN(&ecif, -(long)cif->bytes, + cif->flags, ecif.rvalue, fn, ffi_prep_args); + /*@=usedef@*/ + break; + + default: + FFI_ASSERT(0); + break; + } +} + +/* here I'd like to add the stack frame layout we use in darwin_closure.S + and aix_clsoure.S + + SP previous -> +---------------------------------------+ <--- child frame + | back chain to caller 4 | + +---------------------------------------+ 4 + | saved CR 4 | + +---------------------------------------+ 8 + | saved LR 4 | + +---------------------------------------+ 12 + | reserved for compilers 4 | + +---------------------------------------+ 16 + | reserved for binders 4 | + +---------------------------------------+ 20 + | saved TOC pointer 4 | + +---------------------------------------+ 24 + | always reserved 8*4=32 (previous GPRs)| + | according to the linkage convention | + | from AIX | + +---------------------------------------+ 56 + | our FPR area 13*8=104 | + | f1 | + | . | + | f13 | + +---------------------------------------+ 160 + | result area 8 | + +---------------------------------------+ 168 + | alignement to the next multiple of 16 | +SP current --> +---------------------------------------+ 176 <- parent frame + | back chain to caller 4 | + +---------------------------------------+ 180 + | saved CR 4 | + +---------------------------------------+ 184 + | saved LR 4 | + +---------------------------------------+ 188 + | reserved for compilers 4 | + +---------------------------------------+ 192 + | reserved for binders 4 | + +---------------------------------------+ 196 + | saved TOC pointer 4 | + +---------------------------------------+ 200 + | always reserved 8*4=32 we store our | + | GPRs here | + | r3 | + | . | + | r10 | + +---------------------------------------+ 232 + | overflow part | + +---------------------------------------+ xxx + | ???? | + +---------------------------------------+ xxx +*/ + +#if !defined(POWERPC_DARWIN) + +#define MIN_LINE_SIZE 32 + +static void +flush_icache( + char* addr) +{ +#ifndef _AIX + __asm__ volatile ( + "dcbf 0,%0\n" + "sync\n" + "icbi 0,%0\n" + "sync\n" + "isync" + : : "r" (addr) : "memory"); +#endif +} + +static void +flush_range( + char* addr, + int size) +{ + int i; + + for (i = 0; i < size; i += MIN_LINE_SIZE) + flush_icache(addr + i); + + flush_icache(addr + size - 1); +} + +#endif // !defined(POWERPC_DARWIN) + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + switch (cif->abi) + { + case FFI_DARWIN: + { + FFI_ASSERT (cif->abi == FFI_DARWIN); + + unsigned int* tramp = (unsigned int*)&closure->tramp[0]; + +#if defined(__ppc64__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0xe98b0018; // ld r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0xe96b0020; // ld r11,32(r11) + tramp[7] = 0x4e800420; // bctr + *(unsigned long*)&tramp[8] = (unsigned long)ffi_closure_ASM; + *(unsigned long*)&tramp[10] = (unsigned long)closure; +#elif defined(__ppc__) + tramp[0] = 0x7c0802a6; // mflr r0 + tramp[1] = 0x429f0005; // bcl 20,31,+0x8 + tramp[2] = 0x7d6802a6; // mflr r11 + tramp[3] = 0x7c0803a6; // mtlr r0 + tramp[4] = 0x818b0018; // lwz r12,24(r11) + tramp[5] = 0x7d8903a6; // mtctr r12 + tramp[6] = 0x816b001c; // lwz r11,28(r11) + tramp[7] = 0x4e800420; // bctr + tramp[8] = (unsigned long)ffi_closure_ASM; + tramp[9] = (unsigned long)closure; +#else +#error undefined architecture +#endif + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + // Flush the icache. Only necessary on Darwin. +#if defined(POWERPC_DARWIN) + sys_icache_invalidate(closure->tramp, FFI_TRAMPOLINE_SIZE); +#else + flush_range(closure->tramp, FFI_TRAMPOLINE_SIZE); +#endif + + break; + } + + case FFI_AIX: + { + FFI_ASSERT (cif->abi == FFI_AIX); + + ffi_aix_trampoline_struct* tramp_aix = + (ffi_aix_trampoline_struct*)(closure->tramp); + aix_fd* fd = (aix_fd*)(void*)ffi_closure_ASM; + + tramp_aix->code_pointer = fd->code_pointer; + tramp_aix->toc = fd->toc; + tramp_aix->static_chain = closure; + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + break; + } + + default: + return FFI_BAD_ABI; + } + + return FFI_OK; +} + +#if defined(__ppc__) + typedef double ldbits[2]; + + typedef union + { + ldbits lb; + long double ld; + } ldu; +#endif + +typedef union +{ + float f; + double d; +} ffi_dblfl; + +/* The trampoline invokes ffi_closure_ASM, and on entry, r11 holds the + address of the closure. After storing the registers that could possibly + contain parameters to be passed into the stack frame and setting up space + for a return value, ffi_closure_ASM invokes the following helper function + to do most of the work. */ +int +ffi_closure_helper_DARWIN( + ffi_closure* closure, + void* rvalue, + unsigned long* pgr, + ffi_dblfl* pfr) +{ + /* rvalue is the pointer to space for return value in closure assembly + pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM + pfr is the pointer to where f1-f13 are stored in ffi_closure_ASM. */ + +#if defined(__ppc__) + ldu temp_ld; +#endif + + double temp; + unsigned int i; + unsigned int nf = 0; /* number of FPRs already used. */ + unsigned int ng = 0; /* number of GPRs already used. */ + ffi_cif* cif = closure->cif; + long avn = cif->nargs; + void** avalue = alloca(cif->nargs * sizeof(void*)); + ffi_type** arg_types = cif->arg_types; + + /* Copy the caller's structure return value address so that the closure + returns the data directly to the caller. */ +#if defined(__ppc64__) + if (cif->rtype->type == FFI_TYPE_STRUCT && + ffi64_stret_needs_ptr(cif->rtype, NULL, NULL)) +#elif defined(__ppc__) + if (cif->rtype->type == FFI_TYPE_STRUCT) +#else +#error undefined architecture +#endif + { + rvalue = (void*)*pgr; + pgr++; + ng++; + } + + /* Grab the addresses of the arguments from the stack frame. */ + for (i = 0; i < avn; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = (char*)pgr + MODE_CHOICE(3,7); + ng++; + pgr++; + break; + + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = (char*)pgr + MODE_CHOICE(2,6); + ng++; + pgr++; + break; + +#if defined(__ppc__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + avalue[i] = (char*)pgr + MODE_CHOICE(0,4); + ng++; + pgr++; + + break; + + case FFI_TYPE_STRUCT: + if (cif->abi == FFI_DARWIN) + { +#if defined(__ppc64__) + unsigned int gprSize = 0; + unsigned int fprSize = 0; + unsigned int savedFPRSize = fprSize; + + avalue[i] = alloca(arg_types[i]->size); + ffi64_struct_to_ram_form(arg_types[i], (const char*)pgr, + &gprSize, (const char*)pfr, &fprSize, &nf, avalue[i], NULL); + + ng += gprSize / sizeof(long); + pgr += gprSize / sizeof(long); + pfr += (fprSize - savedFPRSize) / sizeof(double); + +#elif defined(__ppc__) + /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, + SI 4 bytes) are aligned as if they were those modes. */ + unsigned int size_al = size_al = arg_types[i]->size; + + /* If the first member of the struct is a double, then align + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN(arg_types[i]->size, 8); + + if (size_al < 3) + avalue[i] = (void*)pgr + MODE_CHOICE(4,8) - size_al; + else + avalue[i] = (void*)pgr; + + ng += (size_al + 3) / sizeof(long); + pgr += (size_al + 3) / sizeof(long); +#else +#error undefined architecture +#endif + } + + break; + +#if defined(__ppc64__) + case FFI_TYPE_POINTER: +#endif + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + /* Long long ints are passed in 1 or 2 GPRs. */ + avalue[i] = pgr; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + + case FFI_TYPE_FLOAT: + /* A float value consumes a GPR. + There are 13 64-bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + temp = pfr->d; + pfr->f = (float)temp; + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng++; + pgr++; + break; + + case FFI_TYPE_DOUBLE: + /* A double value consumes one or two GPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr++; + } + else + avalue[i] = pgr; + + nf++; + ng += MODE_CHOICE(2,1); + pgr += MODE_CHOICE(2,1); + + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + + case FFI_TYPE_LONGDOUBLE: +#if defined(__ppc64__) + if (nf < NUM_FPR_ARG_REGISTERS) + { + avalue[i] = pfr; + pfr += 2; + } +#elif defined(__ppc__) + /* A long double value consumes 2/4 GPRs and 2 FPRs. + There are 13 64bit floating point registers. */ + if (nf < NUM_FPR_ARG_REGISTERS - 1) + { + avalue[i] = pfr; + pfr += 2; + } + /* Here we have the situation where one part of the long double + is stored in fpr13 and the other part is already on the stack. + We use a union to pass the long double to avalue[i]. */ + else if (nf == NUM_FPR_ARG_REGISTERS - 1) + { + memcpy (&temp_ld.lb[0], pfr, sizeof(temp_ld.lb[0])); + memcpy (&temp_ld.lb[1], pgr + 2, sizeof(temp_ld.lb[1])); + avalue[i] = &temp_ld.ld; + } +#else +#error undefined architecture +#endif + else + avalue[i] = pgr; + + nf += 2; + ng += MODE_CHOICE(4,2); + pgr += MODE_CHOICE(4,2); + + break; + +#endif /* FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE */ + + default: + FFI_ASSERT(0); + break; + } + } + + (closure->fun)(cif, rvalue, avalue, closure->user_data); + + /* Tell ffi_closure_ASM to perform return type promotions. */ + return cif->rtype->type; +} + +#if defined(__ppc64__) + +/* ffi64_struct_to_ram_form + + Rebuild a struct's natural layout from buffers of concatenated registers. + Return the number of registers used. + inGPRs[0-7] == r3, inFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_ram_form( + const ffi_type* inType, + const char* inGPRs, + unsigned int* ioGPRMarker, + const char* inFPRs, + unsigned int* ioFPRMarker, + unsigned int* ioFPRsUsed, + char* outStruct, // caller-allocated + unsigned int* ioStructMarker) +{ + unsigned int srcGMarker = 0; + unsigned int srcFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + unsigned int destMarker = 0; + + static unsigned int recurseCount = 0; + + if (ioGPRMarker) + srcGMarker = *ioGPRMarker; + + if (ioFPRMarker) + { + srcFMarker = *ioFPRMarker; + savedFMarker = srcFMarker; + } + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioStructMarker) + destMarker = *ioStructMarker; + + size_t i; + + switch (inType->size) + { + case 1: case 2: case 4: + srcGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + srcFMarker = ALIGN(srcFMarker, 4); + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(float*)&outStruct[destMarker] = + (float)*(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(float*)&outStruct[destMarker] = + (float)*(double*)&inGPRs[srcGMarker]; + + srcGMarker += 4; + destMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcFMarker = ALIGN(srcFMarker, 8); + destMarker = ALIGN(destMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + *(double*)&outStruct[destMarker] = + *(double*)&inFPRs[srcFMarker]; + srcFMarker += 8; + fprsUsed++; + } + else + *(double*)&outStruct[destMarker] = + *(double*)&inGPRs[srcGMarker]; + + destMarker += 8; + + // Skip next GPR + srcGMarker += 8; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + destMarker = ALIGN(destMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + srcFMarker = ALIGN(srcFMarker, 8); + srcGMarker = ALIGN(srcGMarker, 8); + *(long double*)&outStruct[destMarker] = + *(long double*)&inFPRs[srcFMarker]; + srcFMarker += 16; + fprsUsed += 2; + } + else + { + srcFMarker = ALIGN(srcFMarker, 16); + srcGMarker = ALIGN(srcGMarker, 16); + *(long double*)&outStruct[destMarker] = + *(long double*)&inGPRs[srcGMarker]; + } + + destMarker += 16; + + // Skip next 2 GPRs + srcGMarker += 16; + srcGMarker = ALIGN(srcGMarker, 8); + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + if (inType->alignment == 1) // chars only + { + if (inType->size == 1) + outStruct[destMarker++] = inGPRs[srcGMarker++]; + else if (inType->size == 2) + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + outStruct[destMarker++] = inGPRs[srcGMarker++]; + i++; + } + else + { + memcpy(&outStruct[destMarker], + &inGPRs[srcGMarker], inType->size); + srcGMarker += inType->size; + destMarker += inType->size; + i += inType->size - 1; + } + } + else // chars and other stuff + { + outStruct[destMarker++] = inGPRs[srcGMarker++]; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(srcGMarker, 8) - srcGMarker) < 4)) + srcGMarker = ALIGN(srcGMarker, inType->alignment); // was 8 + } + } + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcGMarker = ALIGN(srcGMarker, 2); + destMarker = ALIGN(destMarker, 2); + + *(short*)&outStruct[destMarker] = + *(short*)&inGPRs[srcGMarker]; + srcGMarker += 2; + destMarker += 2; + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcGMarker = ALIGN(srcGMarker, 4); + destMarker = ALIGN(destMarker, 4); + + *(int*)&outStruct[destMarker] = + *(int*)&inGPRs[srcGMarker]; + srcGMarker += 4; + destMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcGMarker = ALIGN(srcGMarker, 8); + destMarker = ALIGN(destMarker, 8); + + *(long long*)&outStruct[destMarker] = + *(long long*)&inGPRs[srcGMarker]; + srcGMarker += 8; + destMarker += 8; + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_ram_form(inType->elements[i], inGPRs, + &srcGMarker, inFPRs, &srcFMarker, &fprsUsed, + outStruct, &destMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); // unknown element type + break; + } + } + + srcGMarker = ALIGN(srcGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && srcGMarker == 16) + { + *(long double*)&outStruct[0] = *(long double*)&inGPRs[0]; + srcFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioGPRMarker) + *ioGPRMarker = ALIGN(srcGMarker, 8); + + if (ioFPRMarker) + *ioFPRMarker = srcFMarker; + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioStructMarker) + *ioStructMarker = ALIGN(destMarker, 8); +} + +/* ffi64_struct_to_reg_form + + Copy a struct's elements into buffers that can be sliced into registers. + Return the sizes of the output buffers in bytes. Pass NULL buffer pointers + to calculate size only. + outGPRs[0-7] == r3, outFPRs[0-7] == f1 ... +*/ +void +ffi64_struct_to_reg_form( + const ffi_type* inType, + const char* inStruct, + unsigned int* ioStructMarker, + unsigned int* ioFPRsUsed, + char* outGPRs, // caller-allocated + unsigned int* ioGPRSize, + char* outFPRs, // caller-allocated + unsigned int* ioFPRSize) +{ + size_t i; + unsigned int srcMarker = 0; + unsigned int destGMarker = 0; + unsigned int destFMarker = 0; + unsigned int savedFMarker = 0; + unsigned int fprsUsed = 0; + unsigned int savedFPRsUsed = 0; + + static unsigned int recurseCount = 0; + + if (ioStructMarker) + srcMarker = *ioStructMarker; + + if (ioFPRsUsed) + { + fprsUsed = *ioFPRsUsed; + savedFPRsUsed = fprsUsed; + } + + if (ioGPRSize) + destGMarker = *ioGPRSize; + + if (ioFPRSize) + { + destFMarker = *ioFPRSize; + savedFMarker = destFMarker; + } + + switch (inType->size) + { + case 1: case 2: case 4: + destGMarker += 8 - inType->size; + break; + + default: + break; + } + + for (i = 0; inType->elements[i] != NULL; i++) + { + switch (inType->elements[i]->type) + { + // Shadow floating-point types in GPRs for vararg and pre-ANSI + // functions. + case FFI_TYPE_FLOAT: + // Nudge markers to next 4/8-byte boundary + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + (double)*(float*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + (double)*(float*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (srcMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, 8); + } + + break; + + case FFI_TYPE_DOUBLE: + srcMarker = ALIGN(srcMarker, 8); + destFMarker = ALIGN(destFMarker, 8); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + if (outFPRs != NULL && inStruct != NULL) + *(double*)&outFPRs[destFMarker] = + *(double*)&inStruct[srcMarker]; + + destFMarker += 8; + fprsUsed++; + } + + if (outGPRs != NULL && inStruct != NULL) + *(double*)&outGPRs[destGMarker] = + *(double*)&inStruct[srcMarker]; + + srcMarker += 8; + + // Skip next GPR + destGMarker += 8; + destGMarker = ALIGN(destGMarker, 8); + + break; + + case FFI_TYPE_LONGDOUBLE: + srcMarker = ALIGN(srcMarker, 16); + + if (fprsUsed < NUM_FPR_ARG_REGISTERS) + { + destFMarker = ALIGN(destFMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outFPRs != NULL && inStruct != NULL) + *(long double*)&outFPRs[destFMarker] = + *(long double*)&inStruct[srcMarker]; + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + + destFMarker += 16; + fprsUsed += 2; + } + else + { + destGMarker = ALIGN(destGMarker, 16); + + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[destGMarker] = + *(long double*)&inStruct[srcMarker]; + } + + srcMarker += 16; + destGMarker += 16; // Skip next 2 GPRs + destGMarker = ALIGN(destGMarker, 8); // was 16 + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + if (inType->alignment == 1) // bytes only + { + if (inType->size == 1) + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + } + else if (inType->size == 2) + { + if (outGPRs != NULL && inStruct != NULL) + { + outGPRs[destGMarker] = inStruct[srcMarker]; + outGPRs[destGMarker + 1] = inStruct[srcMarker + 1]; + } + + srcMarker += 2; + destGMarker += 2; + + i++; + } + else + { + if (outGPRs != NULL && inStruct != NULL) + { + // Avoid memcpy for small chunks. + if (inType->size <= sizeof(long)) + *(long*)&outGPRs[destGMarker] = + *(long*)&inStruct[srcMarker]; + else + memcpy(&outGPRs[destGMarker], + &inStruct[srcMarker], inType->size); + } + + srcMarker += inType->size; + destGMarker += inType->size; + i += inType->size - 1; + } + } + else // bytes and other stuff + { + if (outGPRs != NULL && inStruct != NULL) + outGPRs[destGMarker] = inStruct[srcMarker]; + + srcMarker++; + destGMarker++; + + // Skip to next GPR if next element won't fit and we're + // not already at a register boundary. + if (inType->elements[i + 1] != NULL && (destGMarker % 8)) + { + if (!FFI_TYPE_1_BYTE(inType->elements[i + 1]->type) && + (!FFI_TYPE_2_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 2) && + (!FFI_TYPE_4_BYTE(inType->elements[i + 1]->type) || + (ALIGN(destGMarker, 8) - destGMarker) < 4)) + destGMarker = ALIGN(destGMarker, inType->alignment); // was 8 + } + } + + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + srcMarker = ALIGN(srcMarker, 2); + destGMarker = ALIGN(destGMarker, 2); + + if (outGPRs != NULL && inStruct != NULL) + *(short*)&outGPRs[destGMarker] = + *(short*)&inStruct[srcMarker]; + + srcMarker += 2; + destGMarker += 2; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + srcMarker = ALIGN(srcMarker, 4); + destGMarker = ALIGN(destGMarker, 4); + + if (outGPRs != NULL && inStruct != NULL) + *(int*)&outGPRs[destGMarker] = + *(int*)&inStruct[srcMarker]; + + srcMarker += 4; + destGMarker += 4; + + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + srcMarker = ALIGN(srcMarker, 8); + destGMarker = ALIGN(destGMarker, 8); + + if (outGPRs != NULL && inStruct != NULL) + *(long long*)&outGPRs[destGMarker] = + *(long long*)&inStruct[srcMarker]; + + srcMarker += 8; + destGMarker += 8; + + if (inType->elements[i + 1] == NULL) + destGMarker = ALIGN(destGMarker, inType->alignment); + + break; + + case FFI_TYPE_STRUCT: + recurseCount++; + ffi64_struct_to_reg_form(inType->elements[i], + inStruct, &srcMarker, &fprsUsed, outGPRs, + &destGMarker, outFPRs, &destFMarker); + recurseCount--; + break; + + default: + FFI_ASSERT(0); + break; + } + } + + destGMarker = ALIGN(destGMarker, inType->alignment); + + // Take care of the special case for 16-byte structs, but not for + // nested structs. + if (recurseCount == 0 && destGMarker == 16) + { + if (outGPRs != NULL && inStruct != NULL) + *(long double*)&outGPRs[0] = *(long double*)&inStruct[0]; + + destFMarker = savedFMarker; + fprsUsed = savedFPRsUsed; + } + + if (ioStructMarker) + *ioStructMarker = ALIGN(srcMarker, 8); + + if (ioFPRsUsed) + *ioFPRsUsed = fprsUsed; + + if (ioGPRSize) + *ioGPRSize = ALIGN(destGMarker, 8); + + if (ioFPRSize) + *ioFPRSize = ALIGN(destFMarker, 8); +} + +/* ffi64_stret_needs_ptr + + Determine whether a returned struct needs a pointer in r3 or can fit + in registers. +*/ + +bool +ffi64_stret_needs_ptr( + const ffi_type* inType, + unsigned short* ioGPRCount, + unsigned short* ioFPRCount) +{ + // Obvious case first- struct is larger than combined FPR size. + if (inType->size > 14 * 8) + return true; + + // Now the struct can physically fit in registers, determine if it + // also fits logically. + bool needsPtr = false; + unsigned short gprsUsed = 0; + unsigned short fprsUsed = 0; + size_t i; + + if (ioGPRCount) + gprsUsed = *ioGPRCount; + + if (ioFPRCount) + fprsUsed = *ioFPRCount; + + for (i = 0; inType->elements[i] != NULL && !needsPtr; i++) + { + switch (inType->elements[i]->type) + { + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + gprsUsed++; + fprsUsed++; + + if (fprsUsed > 13) + needsPtr = true; + + break; + + case FFI_TYPE_LONGDOUBLE: + gprsUsed += 2; + fprsUsed += 2; + + if (fprsUsed > 14) + needsPtr = true; + + break; + + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + { + gprsUsed++; + + if (gprsUsed > 8) + { + needsPtr = true; + break; + } + + if (inType->elements[i + 1] == NULL) // last byte in the struct + break; + + // Count possible contiguous bytes ahead, up to 8. + unsigned short j; + + for (j = 1; j < 8; j++) + { + if (inType->elements[i + j] == NULL || + !FFI_TYPE_1_BYTE(inType->elements[i + j]->type)) + break; + } + + i += j - 1; // allow for i++ before the test condition + + break; + } + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + gprsUsed++; + + if (gprsUsed > 8) + needsPtr = true; + + break; + + case FFI_TYPE_STRUCT: + needsPtr = ffi64_stret_needs_ptr( + inType->elements[i], &gprsUsed, &fprsUsed); + + break; + + default: + FFI_ASSERT(0); + break; + } + } + + if (ioGPRCount) + *ioGPRCount = gprsUsed; + + if (ioFPRCount) + *ioFPRCount = fprsUsed; + + return needsPtr; +} + +/* ffi64_data_size + + Calculate the size in bytes of an ffi type. +*/ + +unsigned int +ffi64_data_size( + const ffi_type* inType) +{ + unsigned int size = 0; + + switch (inType->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + size = 1; + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + size = 2; + break; + + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_FLOAT: + size = 4; + break; + + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + size = 8; + break; + + case FFI_TYPE_LONGDOUBLE: + size = 16; + break; + + case FFI_TYPE_STRUCT: + ffi64_struct_to_reg_form( + inType, NULL, NULL, NULL, NULL, &size, NULL, NULL); + break; + + case FFI_TYPE_VOID: + break; + + default: + FFI_ASSERT(0); + break; + } + + return size; +} + +#endif /* defined(__ppc64__) */ +#endif /* __ppc__ || __ppc64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S new file mode 100644 index 0000000..7162fa1 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/powerpc/ppc64-darwin_closure.S @@ -0,0 +1,418 @@ +#if defined(__ppc64__) + +/* ----------------------------------------------------------------------- + ppc64-darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation, + Inc. based on ppc_closure.S + + PowerPC Assembly glue. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM + +#include +#include // for FFI_TRAMPOLINE_SIZE +#include +#include + + .file "ppc64-darwin_closure.S" +.text + .align LOG2_GPR_BYTES + .globl _ffi_closure_ASM + +.text + .align LOG2_GPR_BYTES + +_ffi_closure_ASM: +LFB1: + mflr r0 + stg r0,SF_RETURN(r1) // save return address + + // Save GPRs 3 - 10 (aligned to 8) in the parents outgoing area. + stg r3,SF_ARG1(r1) + stg r4,SF_ARG2(r1) + stg r5,SF_ARG3(r1) + stg r6,SF_ARG4(r1) + stg r7,SF_ARG5(r1) + stg r8,SF_ARG6(r1) + stg r9,SF_ARG7(r1) + stg r10,SF_ARG8(r1) + +LCFI0: +/* 48 bytes (Linkage Area) + 64 bytes (outgoing parameter area, always reserved) + 112 bytes (14*8 for incoming FPR) + ? bytes (result) + 112 bytes (14*8 for outgoing FPR) + 16 bytes (2 saved registers) + 352 + ? total bytes +*/ + + std r31,-8(r1) // Save registers we use. + std r30,-16(r1) + mr r30,r1 // Save the old SP. + mr r31,r11 // Save the ffi_closure around ffi64_data_size. + + // Calculate the space we need. + stdu r1,-SF_MINSIZE(r1) + ld r3,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r3) // ffi_cif->rtype* + bl Lffi64_data_size$stub + ld r1,0(r1) + + addi r3,r3,352 // Add our overhead. + neg r3,r3 + li r0,-32 // Align to 32 bytes. + and r3,r3,r0 + stdux r1,r1,r3 // Grow the stack. + + mr r11,r31 // Copy the ffi_closure back. + +LCFI1: + // We want to build up an area for the parameters passed + // in registers. (both floating point and integer) + +/* 320 bytes (callee stack frame aligned to 32) + 48 bytes (caller linkage area) + 368 (start of caller parameter area aligned to 8) +*/ + + // Save FPRs 1 - 14. (aligned to 8) + stfd f1,112(r1) + stfd f2,120(r1) + stfd f3,128(r1) + stfd f4,136(r1) + stfd f5,144(r1) + stfd f6,152(r1) + stfd f7,160(r1) + stfd f8,168(r1) + stfd f9,176(r1) + stfd f10,184(r1) + stfd f11,192(r1) + stfd f12,200(r1) + stfd f13,208(r1) + stfd f14,216(r1) + + // Set up registers for the routine that actually does the work. + mr r3,r11 // context pointer from the trampoline + addi r4,r1,224 // result storage + addi r5,r30,SF_ARG1 // saved GPRs + addi r6,r1,112 // saved FPRs + bl Lffi_closure_helper_DARWIN$stub + + // Look the proper starting point in table + // by using return type as an offset. + addi r5,r1,224 // Get pointer to results area. + bl Lget_ret_type0_addr // Get pointer to Lret_type0 into LR. + mflr r4 // Move to r4. + slwi r3,r3,4 // Now multiply return type by 16. + add r3,r3,r4 // Add contents of table to table address. + mtctr r3 + bctr + +LFE1: + // Each of the ret_typeX code fragments has to be exactly 16 bytes long + // (4 instructions). For cache effectiveness we align to a 16 byte + // boundary first. + .align 4 + nop + nop + nop + +Lget_ret_type0_addr: + blrl + +// case FFI_TYPE_VOID +Lret_type0: + b Lfinish + nop + nop + nop + +// case FFI_TYPE_INT +Lret_type1: + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_FLOAT +Lret_type2: + lfs f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_DOUBLE +Lret_type3: + lfd f1,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_LONGDOUBLE +Lret_type4: + lfd f1,0(r5) + lfd f2,8(r5) + b Lfinish + nop + +// case FFI_TYPE_UINT8 +Lret_type5: + lbz r3,7(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT8 +Lret_type6: + lbz r3,7(r5) + extsb r3,r3 + b Lfinish + nop + +// case FFI_TYPE_UINT16 +Lret_type7: + lhz r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT16 +Lret_type8: + lha r3,6(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT32 +Lret_type9: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT32 +Lret_type10: // same as Lret_type1 + lwz r3,4(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_UINT64 +Lret_type11: + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_SINT64 +Lret_type12: // same as Lret_type11 + ld r3,0(r5) + b Lfinish + nop + nop + +// case FFI_TYPE_STRUCT +Lret_type13: + b Lret_struct + nop + nop + nop + +// ** End 16-byte aligned cases ** +// case FFI_TYPE_POINTER +// This case assumes that FFI_TYPE_POINTER == FFI_TYPE_LAST. If more types +// are added in future, the following code will need to be updated and +// padded to 16 bytes. +Lret_type14: + lg r3,0(r5) + b Lfinish + +// copy struct into registers +Lret_struct: + ld r31,FFI_TRAMPOLINE_SIZE(r31) // ffi_closure->cif* + ld r3,16(r31) // ffi_cif->rtype* + ld r31,24(r31) // ffi_cif->flags + mr r4,r5 // copy struct* to 2nd arg + addi r7,r1,SF_ARG9 // GPR return area + addi r9,r30,-16-(14*8) // FPR return area + li r5,0 // struct offset ptr (NULL) + li r6,0 // FPR used count ptr (NULL) + li r8,0 // GPR return area size ptr (NULL) + li r10,0 // FPR return area size ptr (NULL) + bl Lffi64_struct_to_reg_form$stub + + // Load GPRs + ld r3,SF_ARG9(r1) + ld r4,SF_ARG10(r1) + ld r5,SF_ARG11(r1) + ld r6,SF_ARG12(r1) + nop + ld r7,SF_ARG13(r1) + ld r8,SF_ARG14(r1) + ld r9,SF_ARG15(r1) + ld r10,SF_ARG16(r1) + nop + + // Load FPRs + mtcrf 0x2,r31 + bf 26,Lfinish + lfd f1,-16-(14*8)(r30) + lfd f2,-16-(13*8)(r30) + lfd f3,-16-(12*8)(r30) + lfd f4,-16-(11*8)(r30) + nop + lfd f5,-16-(10*8)(r30) + lfd f6,-16-(9*8)(r30) + lfd f7,-16-(8*8)(r30) + lfd f8,-16-(7*8)(r30) + nop + lfd f9,-16-(6*8)(r30) + lfd f10,-16-(5*8)(r30) + lfd f11,-16-(4*8)(r30) + lfd f12,-16-(3*8)(r30) + nop + lfd f13,-16-(2*8)(r30) + lfd f14,-16-(1*8)(r30) + // Fall through + +// case done +Lfinish: + lg r1,0(r1) // Restore stack pointer. + ld r31,-8(r1) // Restore registers we used. + ld r30,-16(r1) + lg r0,SF_RETURN(r1) // Get return address. + mtlr r0 // Reset link register. + blr + +// END(ffi_closure_ASM) + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align LOG2_GPR_BYTES +LECIE1: +.globl _ffi_closure_ASM.eh +_ffi_closure_ASM.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .long LASFDE1-EH_frame1 ; FDE CIE offset + .g_long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .g_long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 176,1 ; uleb128 176 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align LOG2_GPR_BYTES + +LEFDE1: +.data + .align LOG2_GPR_BYTES +LDFCM0: +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi_closure_helper_DARWIN$stub: + .indirect_symbol _ffi_closure_helper_DARWIN + mflr r0 + bcl 20,31,LO$ffi_closure_helper_DARWIN + +LO$ffi_closure_helper_DARWIN: + mflr r11 + addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) + mtlr r0 + lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi_closure_helper_DARWIN$lazy_ptr: + .indirect_symbol _ffi_closure_helper_DARWIN + .g_long dyld_stub_binding_helper + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_struct_to_reg_form$stub: + .indirect_symbol _ffi64_struct_to_reg_form + mflr r0 + bcl 20,31,LO$ffi64_struct_to_reg_form + +LO$ffi64_struct_to_reg_form: + mflr r11 + addis r11,r11,ha16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form) + mtlr r0 + lgu r12,lo16(L_ffi64_struct_to_reg_form$lazy_ptr - LO$ffi64_struct_to_reg_form)(r11) + mtctr r12 + bctr + +.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 + .align LOG2_GPR_BYTES + +Lffi64_data_size$stub: + .indirect_symbol _ffi64_data_size + mflr r0 + bcl 20,31,LO$ffi64_data_size + +LO$ffi64_data_size: + mflr r11 + addis r11,r11,ha16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size) + mtlr r0 + lgu r12,lo16(L_ffi64_data_size$lazy_ptr - LO$ffi64_data_size)(r11) + mtctr r12 + bctr + +.lazy_symbol_pointer +L_ffi64_struct_to_reg_form$lazy_ptr: + .indirect_symbol _ffi64_struct_to_reg_form + .g_long dyld_stub_binding_helper + +L_ffi64_data_size$lazy_ptr: + .indirect_symbol _ffi64_data_size + .g_long dyld_stub_binding_helper + +#endif // __ppc64__ diff -r -u ./Modules/_ctypes/libffi_osx/types.c ./Modules/_ctypes/libffi_osx/types.c new file mode 100644 index 0000000..44806ae --- /dev/null +++ ./Modules/_ctypes/libffi_osx/types.c @@ -0,0 +1,115 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +/* Type definitions */ +#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) \ + ffi_type ffi_type_##n = { s, a, t, NULL } +#define FFI_AGGREGATE_TYPEDEF(n, e) \ + ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } + +FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); +FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); +FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); +FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); +FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); +FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); +FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); + +/* Size and alignment are fake here. They must not be 0. */ +FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); + +#if defined ALPHA || defined SPARC64 || defined X86_64 || \ + defined S390X || defined IA64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); +#else +FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); +#endif + +#if defined X86 || defined ARM || defined M68K || defined(X86_DARWIN) + +# ifdef X86_64 + FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +# else + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +# endif + +#elif defined(POWERPC_DARWIN) +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#elif defined SH +FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +#else +FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); +FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); +#endif + +#if defined X86 || defined X86_WIN32 || defined M68K || defined(X86_DARWIN) + +# if defined X86_WIN32 || defined X86_64 + FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +# endif + +# ifdef X86_DARWIN + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined ARM || defined SH || defined POWERPC_AIX +FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); +#elif defined POWERPC_DARWIN +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# if __GNUC__ >= 4 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined SPARC +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); + +# ifdef SPARC64 + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +# else + FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); +# endif + +#elif defined X86_64 || defined POWERPC64 +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); +#else +FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); +FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); +#endif \ No newline at end of file diff -r -u ./Modules/_ctypes/libffi_osx/x86/darwin64.S ./Modules/_ctypes/libffi_osx/x86/darwin64.S new file mode 100644 index 0000000..165d469 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -0,0 +1,417 @@ +/* ----------------------------------------------------------------------- + darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. + derived from unix64.S + + x86-64 Foreign Function Interface for Darwin. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#ifdef __x86_64__ +#define LIBFFI_ASM +#include +#include + + .file "darwin64.S" +.text + +/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, + void *raddr, void (*fnaddr)()); + + Bit o trickiness here -- ARGS+BYTES is the base of the stack frame + for this function. This has been allocated by ffi_call. We also + deallocate some of the stack that has been alloca'd. */ + + .align 3 + .globl _ffi_call_unix64 + +_ffi_call_unix64: +LUW0: + movq (%rsp), %r10 /* Load return address. */ + movq %rdi, %r12 /* Save a copy of the register area. */ + leaq (%rdi, %rsi), %rax /* Find local stack base. */ + movq %rdx, (%rax) /* Save flags. */ + movq %rcx, 8(%rax) /* Save raddr. */ + movq %rbp, 16(%rax) /* Save old frame pointer. */ + movq %r10, 24(%rax) /* Relocate return address. */ + movq %rax, %rbp /* Finalize local stack frame. */ +LUW1: + /* movq %rdi, %r10 // Save a copy of the register area. */ + movq %r12, %r10 + movq %r8, %r11 /* Save a copy of the target fn. */ + movl %r9d, %eax /* Set number of SSE registers. */ + + /* Load up all argument registers. */ + movq (%r10), %rdi + movq 8(%r10), %rsi + movq 16(%r10), %rdx + movq 24(%r10), %rcx + movq 32(%r10), %r8 + movq 40(%r10), %r9 + testl %eax, %eax + jnz Lload_sse +Lret_from_load_sse: + + /* Deallocate the reg arg area. */ + leaq 176(%r10), %rsp + + /* Call the user function. */ + call *%r11 + + /* Deallocate stack arg area; local stack frame in redzone. */ + leaq 24(%rbp), %rsp + + movq 0(%rbp), %rcx /* Reload flags. */ + movq 8(%rbp), %rdi /* Reload raddr. */ + movq 16(%rbp), %rbp /* Reload old frame pointer. */ +LUW2: + + /* The first byte of the flags contains the FFI_TYPE. */ + movzbl %cl, %r10d + leaq Lstore_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lstore_table: + .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ + .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ + .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ + .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ + .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ + .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ + .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ + .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ + .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ + .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ + .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ + .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ + .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lst_void: + ret + .align 3 +Lst_uint8: + movzbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_sint8: + movsbq %al, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint16: + movzwq %ax, %rax + movq %rax, (%rdi) + .align 3 +Lst_sint16: + movswq %ax, %rax + movq %rax, (%rdi) + ret + .align 3 +Lst_uint32: + movl %eax, %eax + movq %rax, (%rdi) + .align 3 +Lst_sint32: + cltq + movq %rax, (%rdi) + ret + .align 3 +Lst_int64: + movq %rax, (%rdi) + ret + .align 3 +Lst_float: + movss %xmm0, (%rdi) + ret + .align 3 +Lst_double: + movsd %xmm0, (%rdi) + ret +Lst_ldouble: + fstpt (%rdi) + ret + .align 3 +Lst_struct: + leaq -20(%rsp), %rsi /* Scratch area in redzone. */ + + /* We have to locate the values now, and since we don't want to + write too much data into the user's return value, we spill the + value to a 16 byte scratch area first. Bits 8, 9, and 10 + control where the values are located. Only one of the three + bits will be set; see ffi_prep_cif_machdep for the pattern. */ + movd %xmm0, %r10 + movd %xmm1, %r11 + testl $0x100, %ecx + cmovnz %rax, %rdx + cmovnz %r10, %rax + testl $0x200, %ecx + cmovnz %r10, %rdx + testl $0x400, %ecx + cmovnz %r10, %rax + cmovnz %r11, %rdx + movq %rax, (%rsi) + movq %rdx, 8(%rsi) + + /* Bits 12-31 contain the true size of the structure. Copy from + the scratch area to the true destination. */ + shrl $12, %ecx + rep movsb + ret + + /* Many times we can avoid loading any SSE registers at all. + It's not worth an indirect jump to load the exact set of + SSE registers needed; zero or all is a good compromise. */ + .align 3 +LUW3: +Lload_sse: + movdqa 48(%r10), %xmm0 + movdqa 64(%r10), %xmm1 + movdqa 80(%r10), %xmm2 + movdqa 96(%r10), %xmm3 + movdqa 112(%r10), %xmm4 + movdqa 128(%r10), %xmm5 + movdqa 144(%r10), %xmm6 + movdqa 160(%r10), %xmm7 + jmp Lret_from_load_sse + +LUW4: + .align 3 + .globl _ffi_closure_unix64 + +_ffi_closure_unix64: +LUW5: + /* The carry flag is set by the trampoline iff SSE registers + are used. Don't clobber it before the branch instruction. */ + leaq -200(%rsp), %rsp +LUW6: + movq %rdi, (%rsp) + movq %rsi, 8(%rsp) + movq %rdx, 16(%rsp) + movq %rcx, 24(%rsp) + movq %r8, 32(%rsp) + movq %r9, 40(%rsp) + jc Lsave_sse +Lret_from_save_sse: + + movq %r10, %rdi + leaq 176(%rsp), %rsi + movq %rsp, %rdx + leaq 208(%rsp), %rcx + call _ffi_closure_unix64_inner + + /* Deallocate stack frame early; return value is now in redzone. */ + addq $200, %rsp +LUW7: + + /* The first byte of the return value contains the FFI_TYPE. */ + movzbl %al, %r10d + leaq Lload_table(%rip), %r11 + movslq (%r11, %r10, 4), %r10 + addq %r11, %r10 + jmp *%r10 + +Lload_table: + .long Lld_void-Lload_table /* FFI_TYPE_VOID */ + .long Lld_int32-Lload_table /* FFI_TYPE_INT */ + .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ + .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ + .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ + .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ + .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ + .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ + .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ + .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ + .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ + .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ + .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ + .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ + .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + + .text + .align 3 +Lld_void: + ret + .align 3 +Lld_int8: + movzbl -24(%rsp), %eax + ret + .align 3 +Lld_int16: + movzwl -24(%rsp), %eax + ret + .align 3 +Lld_int32: + movl -24(%rsp), %eax + ret + .align 3 +Lld_int64: + movq -24(%rsp), %rax + ret + .align 3 +Lld_float: + movss -24(%rsp), %xmm0 + ret + .align 3 +Lld_double: + movsd -24(%rsp), %xmm0 + ret + .align 3 +Lld_ldouble: + fldt -24(%rsp) + ret + .align 3 +Lld_struct: + /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, + %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading + both rdx and xmm1 with the second word. For the remaining, + bit 8 set means xmm0 gets the second word, and bit 9 means + that rax gets the second word. */ + movq -24(%rsp), %rcx + movq -16(%rsp), %rdx + movq -16(%rsp), %xmm1 + testl $0x100, %eax + cmovnz %rdx, %rcx + movd %rcx, %xmm0 + testl $0x200, %eax + movq -24(%rsp), %rax + cmovnz %rdx, %rax + ret + + /* See the comment above Lload_sse; the same logic applies here. */ + .align 3 +LUW8: +Lsave_sse: + movdqa %xmm0, 48(%rsp) + movdqa %xmm1, 64(%rsp) + movdqa %xmm2, 80(%rsp) + movdqa %xmm3, 96(%rsp) + movdqa %xmm4, 112(%rsp) + movdqa %xmm5, 128(%rsp) + movdqa %xmm6, 144(%rsp) + movdqa %xmm7, 160(%rsp) + jmp Lret_from_save_sse + +LUW9: +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ + .long L$set$0 +LSCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "zR\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ + .byte 0x10 /* CIE RA Column */ + .byte 0x1 /* uleb128 0x1; Augmentation size */ + .byte 0x10 /* FDE Encoding (pcrel sdata4) */ + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 /* uleb128 0x7 */ + .byte 0x8 /* uleb128 0x8 */ + .byte 0x90 /* DW_CFA_offset, column 0x10 */ + .byte 0x1 + .align 3 +LECIE1: + .globl _ffi_call_unix64.eh +_ffi_call_unix64.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 /* FDE CIE offset */ + .quad LUW0-. /* FDE initial location */ + .set L$set$2,LUW4-LUW0 /* FDE address range */ + .quad L$set$2 + .byte 0x0 /* Augmentation size */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$3,LUW1-LUW0 + .long L$set$3 + + /* New stack frame based off rbp. This is a itty bit of unwind + trickery in that the CFA *has* changed. There is no easy way + to describe it correctly on entry to the function. Fortunately, + it doesn't matter too much since at all points we can correctly + unwind back to ffi_call. Note that the location to which we + moved the return address is (the new) CFA-8, so from the + perspective of the unwind info, it hasn't moved. */ + .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ + .byte 0x6 + .byte 0x20 + .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ + .byte 0x2 + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$4,LUW2-LUW1 + .long L$set$4 + .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ + .byte 0x7 + .byte 0x8 + .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$5,LUW3-LUW2 + .long L$set$5 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE1: + .globl _ffi_closure_unix64.eh +_ffi_closure_unix64.eh: +LSFDE3: + .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ + .long L$set$6 +LASFDE3: + .long LASFDE3-EH_frame1 /* FDE CIE offset */ + .quad LUW5-. /* FDE initial location */ + .set L$set$7,LUW9-LUW5 /* FDE address range */ + .quad L$set$7 + .byte 0x0 /* Augmentation size */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$8,LUW6-LUW5 + .long L$set$8 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 208,1 /* uleb128 208 */ + .byte 0xa /* DW_CFA_remember_state */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$9,LUW7-LUW6 + .long L$set$9 + .byte 0xe /* DW_CFA_def_cfa_offset */ + .byte 0x8 + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .set L$set$10,LUW8-LUW7 + .long L$set$10 + .byte 0xb /* DW_CFA_restore_state */ + + .align 3 +LEFDE3: + .subsections_via_symbols + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S new file mode 100644 index 0000000..925a841 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-darwin.S @@ -0,0 +1,422 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. + + X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +/* + * This file is based on sysv.S and then hacked up by Ronald who hasn't done + * assembly programming in 8 years. + */ + +#ifndef __x86_64__ + +#define LIBFFI_ASM +#include +#include + +#ifdef PyObjC_STRICT_DEBUGGING + /* XXX: Debugging of stack alignment, to be removed */ +#define ASSERT_STACK_ALIGNED movdqa -16(%esp), %xmm0 +#else +#define ASSERT_STACK_ALIGNED +#endif + +.text + +.globl _ffi_prep_args + + .align 4 +.globl _ffi_call_SYSV + +_ffi_call_SYSV: +LFB1: + pushl %ebp +LCFI0: + movl %esp,%ebp +LCFI1: + subl $8,%esp + /* Make room for all of the new args. */ + movl 16(%ebp),%ecx + subl %ecx,%esp + + movl %esp,%eax + + /* Place all of the ffi_prep_args in position */ + subl $8,%esp + pushl 12(%ebp) + pushl %eax + call *8(%ebp) + + /* Return stack to previous state and call the function */ + addl $16,%esp + + call *28(%ebp) + + /* Remove the space we pushed for the args */ + movl 16(%ebp),%ecx + addl %ecx,%esp + + /* Load %ecx with the return type code */ + movl 20(%ebp),%ecx + + /* If the return value pointer is NULL, assume no return value. */ + cmpl $0,24(%ebp) + jne Lretint + + /* Even if there is no space for the return value, we are + obliged to handle floating-point values. */ + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lnoretval + fstp %st(0) + + jmp Lepilogue + +Lretint: + cmpl $FFI_TYPE_INT,%ecx + jne Lretfloat + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp Lepilogue + +Lretfloat: + cmpl $FFI_TYPE_FLOAT,%ecx + jne Lretdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstps (%ecx) + jmp Lepilogue + +Lretdouble: + cmpl $FFI_TYPE_DOUBLE,%ecx + jne Lretlongdouble + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpl (%ecx) + jmp Lepilogue + +Lretlongdouble: + cmpl $FFI_TYPE_LONGDOUBLE,%ecx + jne Lretint64 + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + fstpt (%ecx) + jmp Lepilogue + +Lretint64: + cmpl $FFI_TYPE_SINT64,%ecx + jne Lretstruct1b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + movl %edx,4(%ecx) + jmp Lepilogue + +Lretstruct1b: + cmpl $FFI_TYPE_SINT8,%ecx + jne Lretstruct2b + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movb %al,0(%ecx) + jmp Lepilogue + +Lretstruct2b: + cmpl $FFI_TYPE_SINT16,%ecx + jne Lretstruct + /* Load %ecx with the pointer to storage for the return value */ + movl 24(%ebp),%ecx + movw %ax,0(%ecx) + jmp Lepilogue + +Lretstruct: + cmpl $FFI_TYPE_STRUCT,%ecx + jne Lnoretval + /* Nothing to do! */ + addl $4,%esp + popl %ebp + ret + +Lnoretval: +Lepilogue: + addl $8,%esp + movl %ebp,%esp + popl %ebp + ret +LFE1: +.ffi_call_SYSV_end: + + .align 4 +FFI_HIDDEN (ffi_closure_SYSV) +.globl _ffi_closure_SYSV + +_ffi_closure_SYSV: +LFB2: + pushl %ebp +LCFI2: + movl %esp, %ebp +LCFI3: + subl $56, %esp + leal -40(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 8(%ebp), %edx + movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + movl %ebx, 8(%esp) +LCFI7: + call L_ffi_closure_SYSV_inner$stub + movl 8(%esp), %ebx + movl -12(%ebp), %ecx + cmpl $FFI_TYPE_INT, %eax + je Lcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lcls_retllong + cmpl $FFI_TYPE_UINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_SINT8, %eax + je Lcls_retstruct1 + cmpl $FFI_TYPE_UINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_SINT16, %eax + je Lcls_retstruct2 + cmpl $FFI_TYPE_STRUCT, %eax + je Lcls_retstruct +Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret +Lcls_retint: + movl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retfloat: + flds (%ecx) + jmp Lcls_epilogue +Lcls_retdouble: + fldl (%ecx) + jmp Lcls_epilogue +Lcls_retldouble: + fldt (%ecx) + jmp Lcls_epilogue +Lcls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp Lcls_epilogue +Lcls_retstruct1: + movsbl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct2: + movswl (%ecx), %eax + jmp Lcls_epilogue +Lcls_retstruct: + lea -8(%ebp),%esp + movl %ebp, %esp + popl %ebp + ret $4 +LFE2: + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + + .align 4 +FFI_HIDDEN (ffi_closure_raw_SYSV) +.globl _ffi_closure_raw_SYSV + +_ffi_closure_raw_SYSV: +LFB3: + pushl %ebp +LCFI4: + movl %esp, %ebp +LCFI5: + pushl %esi +LCFI6: + subl $36, %esp + movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ + movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ + movl %edx, 12(%esp) /* user_data */ + leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ + movl %edx, 8(%esp) /* raw_args */ + leal -24(%ebp), %edx + movl %edx, 4(%esp) /* &res */ + movl %esi, (%esp) /* cif */ + call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ + movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ + cmpl $FFI_TYPE_INT, %eax + je Lrcls_retint + cmpl $FFI_TYPE_FLOAT, %eax + je Lrcls_retfloat + cmpl $FFI_TYPE_DOUBLE, %eax + je Lrcls_retdouble + cmpl $FFI_TYPE_LONGDOUBLE, %eax + je Lrcls_retldouble + cmpl $FFI_TYPE_SINT64, %eax + je Lrcls_retllong +Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret +Lrcls_retint: + movl -24(%ebp), %eax + jmp Lrcls_epilogue +Lrcls_retfloat: + flds -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retdouble: + fldl -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retldouble: + fldt -24(%ebp) + jmp Lrcls_epilogue +Lrcls_retllong: + movl -24(%ebp), %eax + movl -20(%ebp), %edx + jmp Lrcls_epilogue +LFE3: +#endif + +.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 +L_ffi_closure_SYSV_inner$stub: + .indirect_symbol _ffi_closure_SYSV_inner + hlt ; hlt ; hlt ; hlt ; hlt + + +.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support +EH_frame1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 +LSCIE1: + .long 0x0 + .byte 0x1 + .ascii "zR\0" + .byte 0x1 + .byte 0x7c + .byte 0x8 + .byte 0x1 + .byte 0x10 + .byte 0xc + .byte 0x5 + .byte 0x4 + .byte 0x88 + .byte 0x1 + .align 2 +LECIE1: +.globl _ffi_call_SYSV.eh +_ffi_call_SYSV.eh: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 +LASFDE1: + .long LASFDE1-EH_frame1 + .long LFB1-. + .set L$set$2,LFE1-LFB1 + .long L$set$2 + .byte 0x0 + .byte 0x4 + .set L$set$3,LCFI0-LFB1 + .long L$set$3 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$4,LCFI1-LCFI0 + .long L$set$4 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE1: +.globl _ffi_closure_SYSV.eh +_ffi_closure_SYSV.eh: +LSFDE2: + .set L$set$5,LEFDE2-LASFDE2 + .long L$set$5 +LASFDE2: + .long LASFDE2-EH_frame1 + .long LFB2-. + .set L$set$6,LFE2-LFB2 + .long L$set$6 + .byte 0x0 + .byte 0x4 + .set L$set$7,LCFI2-LFB2 + .long L$set$7 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$8,LCFI3-LCFI2 + .long L$set$8 + .byte 0xd + .byte 0x4 + .align 2 +LEFDE2: + +#if !FFI_NO_RAW_API + +.globl _ffi_closure_raw_SYSV.eh +_ffi_closure_raw_SYSV.eh: +LSFDE3: + .set L$set$10,LEFDE3-LASFDE3 + .long L$set$10 +LASFDE3: + .long LASFDE3-EH_frame1 + .long LFB3-. + .set L$set$11,LFE3-LFB3 + .long L$set$11 + .byte 0x0 + .byte 0x4 + .set L$set$12,LCFI4-LFB3 + .long L$set$12 + .byte 0xe + .byte 0x8 + .byte 0x84 + .byte 0x2 + .byte 0x4 + .set L$set$13,LCFI5-LCFI4 + .long L$set$13 + .byte 0xd + .byte 0x4 + .byte 0x4 + .set L$set$14,LCFI6-LCFI5 + .long L$set$14 + .byte 0x85 + .byte 0x3 + .align 2 +LEFDE3: + +#endif + +#endif /* ifndef __x86_64__ */ + +#endif /* defined __i386__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c new file mode 100644 index 0000000..06feaf2 --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi64.c @@ -0,0 +1,734 @@ +#ifdef __x86_64__ + +/* ----------------------------------------------------------------------- + x86-ffi64.c - Copyright (c) 2002 Bo Thorsen + + x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#define MAX_GPR_REGS 6 +#define MAX_SSE_REGS 8 + +typedef struct RegisterArgs { + /* Registers for argument passing. */ + UINT64 gpr[MAX_GPR_REGS]; + __int128_t sse[MAX_SSE_REGS]; +} RegisterArgs; + +extern void +ffi_call_unix64( + void* args, + unsigned long bytes, + unsigned flags, + void* raddr, + void (*fnaddr)(), + unsigned ssecount); + +/* All reference to register classes here is identical to the code in + gcc/config/i386/i386.c. Do *not* change one without the other. */ + +/* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +enum x86_64_reg_class +{ + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_COMPLEX_X87_CLASS, + X86_64_MEMORY_CLASS +}; + +#define MAX_CLASSES 4 +#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + +/* x86-64 register passing implementation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + +/* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ +static enum x86_64_reg_class +merge_classes( + enum x86_64_reg_class class1, + enum x86_64_reg_class class2) +{ + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, + MEMORY is used. */ + if (class1 == X86_64_X87_CLASS + || class1 == X86_64_X87UP_CLASS + || class1 == X86_64_COMPLEX_X87_CLASS + || class2 == X86_64_X87_CLASS + || class2 == X86_64_X87UP_CLASS + || class2 == X86_64_COMPLEX_X87_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; +} + +/* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + See the x86-64 PS ABI for details. */ + +static int +classify_argument( + ffi_type* type, + enum x86_64_reg_class classes[], + size_t byte_offset) +{ + switch (type->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_POINTER: +#if 0 + if (byte_offset + type->size <= 4) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + + return 1; +#else + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } +#endif + + case FFI_TYPE_FLOAT: + if (byte_offset == 0) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + + return 1; + + case FFI_TYPE_DOUBLE: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + + case FFI_TYPE_LONGDOUBLE: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + + case FFI_TYPE_STRUCT: + { + ffi_type** ptr; + int i; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + const int UNITS_PER_WORD = 8; + int words = + (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + /* If the struct is larger than 16 bytes, pass it on the stack. */ + if (type->size > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Merge the fields of structure. */ + for (ptr = type->elements; *ptr != NULL; ptr++) + { + byte_offset = ALIGN(byte_offset, (*ptr)->alignment); + + int num = classify_argument(*ptr, subclasses, byte_offset % 8); + + if (num == 0) + return 0; + + int pos = byte_offset / 8; + + for (i = 0; i < num; i++) + { + classes[i + pos] = + merge_classes(subclasses[i], classes[i + pos]); + } + + byte_offset += (*ptr)->size; + } + + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && classes[i - 1] != X86_64_X87_CLASS) + { + FFI_ASSERT(i != 0); + classes[i] = X86_64_SSE_CLASS; + } + } + + return words; + } + + default: + FFI_ASSERT(0); + } + + return 0; /* Never reached. */ +} + +/* Examine the argument and return set number of register required in each + class. Return zero if parameter should be passed in memory, otherwise + the number of registers. */ +static int +examine_argument( + ffi_type* type, + enum x86_64_reg_class classes[MAX_CLASSES], + _Bool in_return, + int* pngpr, + int* pnsse) +{ + int n = classify_argument(type, classes, 0); + int ngpr = 0; + int nsse = 0; + int i; + + if (n == 0) + return 0; + + for (i = 0; i < n; ++i) + { + switch (classes[i]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + ngpr++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + nsse++; + break; + + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + case X86_64_COMPLEX_X87_CLASS: + return in_return != 0; + + default: + abort(); + } + } + + *pngpr = ngpr; + *pnsse = nsse; + + return n; +} + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep( + ffi_cif* cif) +{ + int gprcount = 0; + int ssecount = 0; + int flags = cif->rtype->type; + int i, avn, n, ngpr, nsse; + enum x86_64_reg_class classes[MAX_CLASSES]; + size_t bytes; + + if (flags != FFI_TYPE_VOID) + { + n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value is passed in memory. A pointer to that + memory is the first argument. Allocate a register for it. */ + gprcount++; + + /* We don't have to do anything in asm for the return. */ + flags = FFI_TYPE_VOID; + } + else if (flags == FFI_TYPE_STRUCT) + { + /* Mark which registers the result appears in. */ + _Bool sse0 = SSE_CLASS_P(classes[0]); + _Bool sse1 = n == 2 && SSE_CLASS_P(classes[1]); + + if (sse0 && !sse1) + flags |= 1 << 8; + else if (!sse0 && sse1) + flags |= 1 << 9; + else if (sse0 && sse1) + flags |= 1 << 10; + + /* Mark the true size of the structure. */ + flags |= cif->rtype->size << 12; + } + } + + /* Go over all arguments and determine the way they should be passed. + If it's in a register and there is space for it, let that be so. If + not, add it's size to the stack byte count. */ + for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) + { + if (examine_argument(cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = cif->arg_types[i]->alignment; + + if (align < 8) + align = 8; + + bytes = ALIGN(bytes, align); + bytes += cif->arg_types[i]->size; + } + else + { + gprcount += ngpr; + ssecount += nsse; + } + } + + if (ssecount) + flags |= 1 << 11; + + cif->flags = flags; + cif->bytes = bytes; + cif->bytes = ALIGN(bytes,8); + + return FFI_OK; +} + +void +ffi_call( + ffi_cif* cif, + void (*fn)(), + void* rvalue, + void** avalue) +{ + enum x86_64_reg_class classes[MAX_CLASSES]; + char* stack; + char* argp; + ffi_type** arg_types; + int gprcount, ssecount, ngpr, nsse, i, avn; + _Bool ret_in_memory; + RegisterArgs* reg_args; + + /* Can't call 32-bit mode from 64-bit mode. */ + FFI_ASSERT(cif->abi == FFI_UNIX64); + + /* If the return value is a struct and we don't have a return value + address then we need to make one. Note the setting of flags to + VOID above in ffi_prep_cif_machdep. */ + ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT + && (cif->flags & 0xff) == FFI_TYPE_VOID); + + if (rvalue == NULL && ret_in_memory) + rvalue = alloca (cif->rtype->size); + + /* Allocate the space for the arguments, plus 4 words of temp space. */ + stack = alloca(sizeof(RegisterArgs) + cif->bytes + 4 * 8); + reg_args = (RegisterArgs*)stack; + argp = stack + sizeof(RegisterArgs); + + gprcount = ssecount = 0; + + /* If the return value is passed in memory, add the pointer as the + first integer argument. */ + if (ret_in_memory) + reg_args->gpr[gprcount++] = (long) rvalue; + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + size_t size = arg_types[i]->size; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + memcpy (argp, avalue[i], size); + argp += size; + } + else + { /* The argument is passed entirely in registers. */ + char *a = (char *) avalue[i]; + int j; + + for (j = 0; j < n; j++, a += 8, size -= 8) + { + switch (classes[j]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + reg_args->gpr[gprcount] = 0; + switch (arg_types[i]->type) { + case FFI_TYPE_SINT8: + { + int8_t shortval = *(int8_t*)a; + int64_t actval = (int64_t)shortval; + reg_args->gpr[gprcount] = actval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + break; + } + + case FFI_TYPE_SINT16: + { + int16_t shortval = *(int16_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_SINT32: + { + int32_t shortval = *(int32_t*)a; + int64_t actval = (int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT8: + { + u_int8_t shortval = *(u_int8_t*)a; + u_int64_t actval = (u_int64_t)shortval; + /*memcpy (®_args->gpr[gprcount], &actval, 8);*/ + reg_args->gpr[gprcount] = actval; + break; + } + + case FFI_TYPE_UINT16: + { + u_int16_t shortval = *(u_int16_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + case FFI_TYPE_UINT32: + { + u_int32_t shortval = *(u_int32_t*)a; + u_int64_t actval = (u_int64_t)shortval; + memcpy (®_args->gpr[gprcount], &actval, 8); + break; + } + + default: + //memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); + reg_args->gpr[gprcount] = *(int64_t*)a; + } + gprcount++; + break; + + case X86_64_SSE_CLASS: + case X86_64_SSEDF_CLASS: + reg_args->sse[ssecount++] = *(UINT64 *) a; + break; + + case X86_64_SSESF_CLASS: + reg_args->sse[ssecount++] = *(UINT32 *) a; + break; + + default: + abort(); + } + } + } + } + + ffi_call_unix64 (stack, cif->bytes + sizeof(RegisterArgs), + cif->flags, rvalue, fn, ssecount); +} + +extern void ffi_closure_unix64(void); + +ffi_status +ffi_prep_closure( + ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void* user_data) +{ + if (cif->abi != FFI_UNIX64) + return FFI_BAD_ABI; + + volatile unsigned short* tramp = + (volatile unsigned short*)&closure->tramp[0]; + + tramp[0] = 0xbb49; /* mov , %r11 */ + *(void* volatile*)&tramp[1] = ffi_closure_unix64; + tramp[5] = 0xba49; /* mov , %r10 */ + *(void* volatile*)&tramp[6] = closure; + + /* Set the carry bit if the function uses any sse registers. + This is clc or stc, together with the first byte of the jmp. */ + tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + tramp[11] = 0xe3ff; /* jmp *%r11 */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmissing-prototypes" +int +ffi_closure_unix64_inner( + ffi_closure* closure, + void* rvalue, + RegisterArgs* reg_args, + char* argp) +#pragma clang diagnostic pop +{ + ffi_cif* cif = closure->cif; + void** avalue = alloca(cif->nargs * sizeof(void *)); + ffi_type** arg_types; + long i, avn; + int gprcount = 0; + int ssecount = 0; + int ngpr, nsse; + int ret; + + ret = cif->rtype->type; + + if (ret != FFI_TYPE_VOID) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); + + if (n == 0) + { + /* The return value goes in memory. Arrange for the closure + return value to go directly back to the original caller. */ + rvalue = (void *) reg_args->gpr[gprcount++]; + + /* We don't have to do anything in asm for the return. */ + ret = FFI_TYPE_VOID; + } + else if (ret == FFI_TYPE_STRUCT && n == 2) + { + /* Mark which register the second word of the structure goes in. */ + _Bool sse0 = SSE_CLASS_P (classes[0]); + _Bool sse1 = SSE_CLASS_P (classes[1]); + + if (!sse0 && sse1) + ret |= 1 << 8; + else if (sse0 && !sse1) + ret |= 1 << 9; + } + } + + avn = cif->nargs; + arg_types = cif->arg_types; + + for (i = 0; i < avn; ++i) + { + enum x86_64_reg_class classes[MAX_CLASSES]; + int n; + + n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); + + if (n == 0 + || gprcount + ngpr > MAX_GPR_REGS + || ssecount + nsse > MAX_SSE_REGS) + { + long align = arg_types[i]->alignment; + + /* Stack arguments are *always* at least 8 byte aligned. */ + if (align < 8) + align = 8; + + /* Pass this argument in memory. */ + argp = (void *) ALIGN (argp, align); + avalue[i] = argp; + argp += arg_types[i]->size; + } + +#if !defined(X86_DARWIN) + /* If the argument is in a single register, or two consecutive + registers, then we can use that address directly. */ + else if (n == 1 || (n == 2 && + SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + { + // The argument is in a single register. + if (SSE_CLASS_P (classes[0])) + { + avalue[i] = ®_args->sse[ssecount]; + ssecount += n; + } + else + { + avalue[i] = ®_args->gpr[gprcount]; + gprcount += n; + } + } +#endif + + /* Otherwise, allocate space to make them consecutive. */ + else + { + char *a = alloca (16); + int j; + + avalue[i] = a; + + for (j = 0; j < n; j++, a += 8) + { + if (SSE_CLASS_P (classes[j])) + memcpy (a, ®_args->sse[ssecount++], 8); + else + memcpy (a, ®_args->gpr[gprcount++], 8); + } + } + } + + /* Invoke the closure. */ + closure->fun (cif, rvalue, avalue, closure->user_data); + + /* Tell assembly how to perform return type promotions. */ + return ret; +} + +#endif /* __x86_64__ */ diff -r -u ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c new file mode 100644 index 0000000..706ea0f --- /dev/null +++ ./Modules/_ctypes/libffi_osx/x86/x86-ffi_darwin.c @@ -0,0 +1,438 @@ +#ifdef __i386__ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2002 Bo Thorsen + Copyright (c) 2002 Roger Sayle + + x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + ``Software''), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + +#include +#include + +#include + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void ffi_prep_args(char *stack, extended_cif *ecif); + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if (ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void **) argp = ecif->rvalue; + argp += 4; + } + + p_argv = ecif->avalue; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + i != 0; + i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) + argp = (char *) ALIGN(argp, sizeof(int)); + + z = (*p_arg)->size; + if (z < sizeof(int)) + { + z = sizeof(int); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } + else + { + memcpy(argp, *p_argv, z); + } + p_argv++; + argp += z; + } + + return; +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Set the return type flag */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: +#ifdef X86 + case FFI_TYPE_STRUCT: + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: +#endif + + case FFI_TYPE_SINT64: + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_UINT64: + cif->flags = FFI_TYPE_SINT64; + break; + +#ifndef X86 + case FFI_TYPE_STRUCT: + if (cif->rtype->size == 1) + { + cif->flags = FFI_TYPE_SINT8; /* same as char size */ + } + else if (cif->rtype->size == 2) + { + cif->flags = FFI_TYPE_SINT16; /* same as short size */ + } + else if (cif->rtype->size == 4) + { + cif->flags = FFI_TYPE_INT; /* same as int type */ + } + else if (cif->rtype->size == 8) + { + cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ + } + else + { + cif->flags = FFI_TYPE_STRUCT; + } + break; +#endif + + default: + cif->flags = FFI_TYPE_INT; + break; + } + +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + + return FFI_OK; +} + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)()); + +#endif /* X86_WIN32 */ + +void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +{ + extended_cif ecif; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->flags == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, + fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + + +/** private members **/ + +static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, + void** args, ffi_cif* cif); +void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) +__attribute__ ((regparm(1))); +unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) +__attribute__ ((regparm(1))); +void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) +__attribute__ ((regparm(1))); + +/* This function is jumped to by the trampoline */ + +unsigned int FFI_HIDDEN +ffi_closure_SYSV_inner (closure, respp, args) +ffi_closure *closure; +void **respp; +void *args; +{ + // our various things... + ffi_cif *cif; + void **arg_area; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will re-set RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun) (cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +static void +ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, + ffi_cif *cif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + + argp = stack; + + if ( cif->flags == FFI_TYPE_STRUCT ) { + *rvalue = *(void **) argp; + argp += 4; + } + + p_argv = avalue; + + for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) + { + size_t z; + + /* Align if necessary */ + if ((sizeof(int) - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, sizeof(int)); + } + + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + + p_argv++; + argp += z; + } + + return; +} + +/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ + +#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ +({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +unsigned int __fun = (unsigned int)(FUN); \ +unsigned int __ctx = (unsigned int)(CTX); \ +unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \ +*(unsigned char*) &__tramp[0] = 0xb8; \ +*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ +*(unsigned char *) &__tramp[5] = 0xe9; \ +*(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ +}) + + +/* the cif must already be prep'ed */ +ffi_status +ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data) +{ + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ + &ffi_closure_SYSV, \ + (void*)closure); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +/* ------- Native raw API support -------------------------------- */ + +#if !FFI_NO_RAW_API + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + int i; + + FFI_ASSERT (cif->abi == FFI_SYSV); + + // we currently don't support certain kinds of arguments for raw + // closures. This should be implemented by a separate assembly language + // routine, since it would require argument processing, something we + // don't do now for performance. + + for (i = cif->nargs-1; i >= 0; i--) + { + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); + FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); + } + + + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, + codeloc); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + +static void +ffi_prep_args_raw(char *stack, extended_cif *ecif) +{ + memcpy (stack, ecif->avalue, ecif->cif->bytes); +} + +/* we borrow this routine from libffi (it must be changed, though, to + * actually call the function passed in the first argument. as of + * libffi-1.20, this is not the case.) + */ + +extern void +ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); + +#ifdef X86_WIN32 +extern void +ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, + unsigned, unsigned *, void (*fn)()); +#endif /* X86_WIN32 */ + +void +ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue) +{ + extended_cif ecif; + void **avalue = (void **)fake_avalue; + + ecif.cif = cif; + ecif.avalue = avalue; + + /* If the return value is a struct and we don't have a return */ + /* value address then we need to make one */ + + if ((rvalue == NULL) && + (cif->rtype->type == FFI_TYPE_STRUCT)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#ifdef X86_WIN32 + case FFI_STDCALL: + ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#endif /* X86_WIN32 */ + default: + FFI_ASSERT(0); + break; + } +} + +#endif +#endif // __i386__ diff -r -u ./setup.py ./setup.py index 46b92fe..2bf6b4b 100644 --- ./setup.py +++ ./setup.py @@ -98,8 +98,14 @@ class PyBuildExt(build_ext): self.detect_modules() # Remove modules that are present on the disabled list - self.extensions = [ext for ext in self.extensions - if ext.name not in disabled_module_list] + extensions = [ext for ext in self.extensions + if ext.name not in disabled_module_list] + # move ctypes to the end, it depends on other modules + ext_map = dict((ext.name, i) for i, ext in enumerate(extensions)) + if "_ctypes" in ext_map: + ctypes = extensions.pop(ext_map["_ctypes"]) + extensions.append(ctypes) + self.extensions = extensions # Fix up the autodetected modules, prefixing all the source files # with Modules/ and adding Python's include directory to the path. @@ -1330,9 +1336,39 @@ class PyBuildExt(build_ext): # *** Uncomment these for TOGL extension only: # -lGL -lGLU -lXext -lXmu \ + def configure_ctypes_darwin(self, ext): + # Darwin (OS X) uses preconfigured files, in + # the Modules/_ctypes/libffi_osx directory. + srcdir = sysconfig.get_config_var('srcdir') + ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', + '_ctypes', 'libffi_osx')) + sources = [os.path.join(ffi_srcdir, p) + for p in ['ffi.c', + 'x86/darwin64.S', + 'x86/x86-darwin.S', + 'x86/x86-ffi_darwin.c', + 'x86/x86-ffi64.c', + 'powerpc/ppc-darwin.S', + 'powerpc/ppc-darwin_closure.S', + 'powerpc/ppc-ffi_darwin.c', + 'powerpc/ppc64-darwin_closure.S', + ]] + + # Add .S (preprocessed assembly) to C compiler source extensions. + self.compiler.src_extensions.append('.S') + + include_dirs = [os.path.join(ffi_srcdir, 'include'), + os.path.join(ffi_srcdir, 'powerpc')] + ext.include_dirs.extend(include_dirs) + ext.sources.extend(sources) + return True + def configure_ctypes(self, ext): if not self.use_system_libffi: - (srcdir,) = sysconfig.get_config_vars('srcdir') + if sys.platform == 'darwin': + return self.configure_ctypes_darwin(ext) + + srcdir = sysconfig.get_config_var('srcdir') ffi_builddir = os.path.join(self.build_temp, 'libffi') ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules', '_ctypes', 'libffi')) @@ -1347,7 +1383,10 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = [arg for arg in sysconfig.get_config_var("CONFIG_ARGS").split() + if (('--host=' in arg) or ('--build=' in arg))] + if not self.verbose: + config_args.append("-q") # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. @@ -1367,10 +1406,12 @@ class PyBuildExt(build_ext): self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), - ffi_builddir, ffi_srcdir] + ffi_builddir, + os.path.join(ffi_srcdir, 'src')] extra_compile_args = fficonfig['ffi_cflags'].split() - ext.sources.extend(fficonfig['ffi_sources']) + ext.sources.extend(os.path.join(ffi_srcdir, f) for f in + fficonfig['ffi_sources']) ext.include_dirs.extend(include_dirs) ext.extra_compile_args.extend(extra_compile_args) return True @@ -1390,6 +1431,7 @@ class PyBuildExt(build_ext): if sys.platform == 'darwin': sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') # XXX Is this still needed? ## extra_link_args.extend(['-read_only_relocs', 'warning']) @@ -1419,7 +1461,14 @@ class PyBuildExt(build_ext): if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = find_file('ffi.h', [], inc_dirs) + if sys.platform == 'darwin': + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + if not ffi_inc or ffi_inc[0] == '': + ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: ffi_h = ffi_inc[0] + '/ffi.h' fp = open(ffi_h) 005_osx_failed_modules.patch000066400000000000000000000076331476513315000337410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.5.6/Python-2.5.6diff -r -u ./Mac/Modules/cg/_CGmodule.c ./Mac/Modules/cg/_CGmodule.c index 8115614..e36fce9 100755 --- ./Mac/Modules/cg/_CGmodule.c +++ ./Mac/Modules/cg/_CGmodule.c @@ -1025,6 +1025,7 @@ static PyObject *CGContextRefObj_CGContextSetShouldAntialias(CGContextRefObject return _res; } +#ifndef __LP64__ static PyObject *CGContextRefObj_SyncCGContextOriginWithPort(CGContextRefObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1055,6 +1056,7 @@ static PyObject *CGContextRefObj_ClipCGContextToRegion(CGContextRefObject *_self _res = Py_None; return _res; } +#endif static PyMethodDef CGContextRefObj_methods[] = { {"CGContextSaveGState", (PyCFunction)CGContextRefObj_CGContextSaveGState, 1, @@ -1173,10 +1175,12 @@ static PyMethodDef CGContextRefObj_methods[] = { PyDoc_STR("() -> None")}, {"CGContextSetShouldAntialias", (PyCFunction)CGContextRefObj_CGContextSetShouldAntialias, 1, PyDoc_STR("(int shouldAntialias) -> None")}, +#ifndef __LP64__ {"SyncCGContextOriginWithPort", (PyCFunction)CGContextRefObj_SyncCGContextOriginWithPort, 1, PyDoc_STR("(CGrafPtr port) -> None")}, {"ClipCGContextToRegion", (PyCFunction)CGContextRefObj_ClipCGContextToRegion, 1, PyDoc_STR("(Rect portRect, RgnHandle region) -> None")}, +#endif {NULL, NULL, 0} }; @@ -1254,6 +1258,7 @@ PyTypeObject CGContextRef_Type = { /* ------------------ End object type CGContextRef ------------------ */ +#ifndef __LP64__ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1271,10 +1276,13 @@ static PyObject *CG_CreateCGContextForPort(PyObject *_self, PyObject *_args) return _res; } +#endif static PyMethodDef CG_methods[] = { +#ifndef __LP64__ {"CreateCGContextForPort", (PyCFunction)CG_CreateCGContextForPort, 1, PyDoc_STR("(CGrafPtr) -> CGContextRef")}, +#endif {NULL, NULL, 0} }; diff -r -u ./Modules/_curses_panel.c ./Modules/_curses_panel.c index 0acf3fd..1728b59 100644 --- ./Modules/_curses_panel.c +++ ./Modules/_curses_panel.c @@ -56,7 +56,7 @@ typedef struct { PyTypeObject PyCursesPanel_Type; -#define PyCursesPanel_Check(v) ((v)->ob_type == &PyCursesPanel_Type) +#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type) /* Some helper functions. The problem is that there's always a window associated with a panel. To ensure that Python's GC doesn't pull @@ -178,12 +178,13 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo) po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); - return NULL; + po->wo = NULL; + Py_DECREF(po); + return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ static void PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } @@ -338,11 +341,10 @@ PyCursesPanel_GetAttr(PyCursesPanelObject *self, char *name) /* -------------------------------------------------------*/ PyTypeObject PyCursesPanel_Type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "_curses_panel.curses panel", /*tp_name*/ - sizeof(PyCursesPanelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + "_curses_panel.curses panel", /*tp_name*/ + sizeof(PyCursesPanelObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/ 0, /*tp_print*/ @@ -458,7 +460,7 @@ init_curses_panel(void) PyObject *m, *d, *v; /* Initialize object type */ - PyCursesPanel_Type.ob_type = &PyType_Type; + Py_TYPE(&PyCursesPanel_Type) = &PyType_Type; import_curses(); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.0/000077500000000000000000000000001476513315000246015ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.0/Python-2.6/000077500000000000000000000000001476513315000263655ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.0/Python-2.6/000_patch-setup.py.diff000066400000000000000000000053231476513315000324650ustar00rootroot00000000000000 # HG changeset patch # User Barry Warsaw # 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.0/Python-2.6/002_readline63.patch000066400000000000000000000033001476513315000317170ustar00rootroot00000000000000diff -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.0/Python-2.6/003_tk86.patch000066400000000000000000000013531476513315000305660ustar00rootroot00000000000000diff -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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061071476513315000336130ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.0/Python-2.6diff -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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.1/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.1/Python-2.6.1/000077500000000000000000000000001476513315000265255ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000053231476513315000325460ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.1/Python-2.6.1 # HG changeset patch # User Barry Warsaw # 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.1/Python-2.6.1/002_readline63.patch000066400000000000000000000033041476513315000320630ustar00rootroot00000000000000diff -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.1/Python-2.6.1/003_tk86.patch000066400000000000000000000013571476513315000307320ustar00rootroot00000000000000diff -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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061071476513315000337530ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.1/Python-2.6.1diff -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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.2/000077500000000000000000000000001476513315000246035ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.2/Python-2.6.2/000077500000000000000000000000001476513315000265275ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000053231476513315000325500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.2/Python-2.6.2 # HG changeset patch # User Barry Warsaw # 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.2/Python-2.6.2/002_readline63.patch000066400000000000000000000033041476513315000320650ustar00rootroot00000000000000diff -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.2/Python-2.6.2/003_tk86.patch000066400000000000000000000013571476513315000307340ustar00rootroot00000000000000diff -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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061071476513315000337550ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.2/Python-2.6.2diff -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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.3/000077500000000000000000000000001476513315000246045ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.3/Python-2.6.3/000077500000000000000000000000001476513315000265315ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000053231476513315000325520ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.3/Python-2.6.3 # HG changeset patch # User Barry Warsaw # 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.3/Python-2.6.3/002_readline63.patch000066400000000000000000000033041476513315000320670ustar00rootroot00000000000000diff -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.3/Python-2.6.3/003_tk86.patch000066400000000000000000000013571476513315000307360ustar00rootroot00000000000000diff -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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061071476513315000337570ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.3/Python-2.6.3diff -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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.4/000077500000000000000000000000001476513315000246055ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.4/Python-2.6.4/000077500000000000000000000000001476513315000265335ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000053231476513315000325540ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.4/Python-2.6.4 # HG changeset patch # User Barry Warsaw # 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.4/Python-2.6.4/002_readline63.patch000066400000000000000000000033041476513315000320710ustar00rootroot00000000000000diff -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.4/Python-2.6.4/003_tk86.patch000066400000000000000000000013571476513315000307400ustar00rootroot00000000000000diff -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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061071476513315000337610ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.4/Python-2.6.4diff -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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.5/000077500000000000000000000000001476513315000246065ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.5/Python-2.6.5/000077500000000000000000000000001476513315000265355ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000053231476513315000325560ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.5/Python-2.6.5 # HG changeset patch # User Barry Warsaw # 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.5/Python-2.6.5/002_readline63.patch000066400000000000000000000033541476513315000321000ustar00rootroot00000000000000diff -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`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.5/Python-2.6.5/003_tk86.patch000066400000000000000000000013571476513315000307420ustar00rootroot00000000000000diff -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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061061476513315000337620ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.5/Python-2.6.5diff -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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.6/000077500000000000000000000000001476513315000246075ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.6/Python-2.6.6/000077500000000000000000000000001476513315000265375ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000046221476513315000325610ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.6/Python-2.6.6 # HG changeset patch # User Barry Warsaw # 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 @@ -345,10 +345,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. @@ -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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.6/Python-2.6.6/002_readline63.patch000066400000000000000000000034721476513315000321030ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.6/Python-2.6.6/003_tk86.patch000066400000000000000000000013571476513315000307440ustar00rootroot00000000000000diff -r -u ../Python-2.6.9.orig/setup.py ./setup.py --- ../Python-2.6.9.orig/setup.py 2013-10-30 00:04:39.000000000 +0900 +++ ./setup.py 2014-04-03 22:28:49.122061684 +0900 @@ -1675,7 +1675,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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000063671476513315000337750ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.6/Python-2.6.6diff -r -u ../Python-2.6.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.6.8.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, _delegate_methods from socket import error as socket_error @@ -382,7 +388,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.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.6.8.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000 @@ -62,8 +62,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 }; @@ -300,10 +304,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 @@ -1688,10 +1696,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.7/000077500000000000000000000000001476513315000246105ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.7/Python-2.6.7/000077500000000000000000000000001476513315000265415ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000046221476513315000325630ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.7/Python-2.6.7 # HG changeset patch # User Barry Warsaw # 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 @@ -345,10 +345,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. @@ -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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.7/Python-2.6.7/002_readline63.patch000066400000000000000000000034721476513315000321050ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.7/Python-2.6.7/003_tk86.patch000066400000000000000000000013571476513315000307460ustar00rootroot00000000000000diff -r -u ../Python-2.6.9.orig/setup.py ./setup.py --- ../Python-2.6.9.orig/setup.py 2013-10-30 00:04:39.000000000 +0900 +++ ./setup.py 2014-04-03 22:28:49.122061684 +0900 @@ -1675,7 +1675,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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000063671476513315000337770ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.7/Python-2.6.7diff -r -u ../Python-2.6.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.6.8.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, _delegate_methods from socket import error as socket_error @@ -382,7 +388,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.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.6.8.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000 @@ -62,8 +62,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 }; @@ -300,10 +304,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 @@ -1688,10 +1696,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.8/000077500000000000000000000000001476513315000246115ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.8/Python-2.6.8/000077500000000000000000000000001476513315000265435ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000046221476513315000325650ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.8/Python-2.6.8 # HG changeset patch # User Barry Warsaw # 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 @@ -345,10 +345,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. @@ -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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.8/Python-2.6.8/002_readline63.patch000066400000000000000000000034721476513315000321070ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.8/Python-2.6.8/003_tk86.patch000066400000000000000000000013571476513315000307500ustar00rootroot00000000000000diff -r -u ../Python-2.6.9.orig/setup.py ./setup.py --- ../Python-2.6.9.orig/setup.py 2013-10-30 00:04:39.000000000 +0900 +++ ./setup.py 2014-04-03 22:28:49.122061684 +0900 @@ -1675,7 +1675,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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000063671476513315000340010ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.8/Python-2.6.8diff -r -u ../Python-2.6.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.6.8.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, _delegate_methods from socket import error as socket_error @@ -382,7 +388,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.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.6.8.orig/Modules/_ssl.c 2012-04-10 15:32:09.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:45:30.419597074 +0000 @@ -62,8 +62,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 }; @@ -300,10 +304,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 @@ -1688,10 +1696,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.9/000077500000000000000000000000001476513315000246125ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.9/Python-2.6.9/000077500000000000000000000000001476513315000265455ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000046221476513315000325670ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.9/Python-2.6.9 # HG changeset patch # User Barry Warsaw # 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 @@ -345,10 +345,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. @@ -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') 001_remove_systemstubs.patch000066400000000000000000000011521476513315000340500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.9/Python-2.6.9diff -ru ../Python-2.6.9/configure ./configure --- ../Python-2.6.9/configure 2013-10-29 17:04:39.000000000 +0200 +++ ./configure 2014-11-14 11:33:00.000000000 +0200 @@ -7227,7 +7227,7 @@ #ARCH_RUN_32BIT="true" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}" + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -arch_only ${MACOSX_DEFAULT_ARCH}" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.9/Python-2.6.9/002_readline63.patch000066400000000000000000000034721476513315000321110ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.9/Python-2.6.9/003_tk86.patch000066400000000000000000000013571476513315000307520ustar00rootroot00000000000000diff -r -u ../Python-2.6.9.orig/setup.py ./setup.py --- ../Python-2.6.9.orig/setup.py 2013-10-30 00:04:39.000000000 +0900 +++ ./setup.py 2014-04-03 22:28:49.122061684 +0900 @@ -1675,7 +1675,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) 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061241476513315000337720ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.6.9/Python-2.6.9diff -r -u ../Python-2.6.9.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.6.9.orig/Lib/ssl.py 2013-10-29 15:04:37.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:39:22.213215077 +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, _delegate_methods from socket import error as socket_error @@ -382,7 +388,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.9.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.6.9.orig/Modules/_ssl.c 2013-10-29 15:04:38.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:32:08.051962468 +0000 @@ -62,8 +62,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 }; @@ -300,8 +304,10 @@ 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 */ @@ -1746,10 +1752,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.0/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.0/Python-2.7/000077500000000000000000000000001476513315000263675ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.0/Python-2.7/000_patch-setup.py.diff000066400000000000000000000034151476513315000324670ustar00rootroot00000000000000 # HG changeset patch # User Barry Warsaw # 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 @@ -345,10 +345,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. pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.0/Python-2.7/002_readline63.patch000066400000000000000000000034721476513315000317330ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000066711476513315000336230ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.0/Python-2.7diff -r -u ../Python-2.7.1.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.1.orig/Lib/ssl.py 2010-09-14 14:37:18.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:14:39.089679248 +0000 @@ -62,18 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -388,7 +399,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.7.1.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.1.orig/Modules/_ssl.c 2010-10-13 22:10:31.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:18:21.612222848 +0000 @@ -62,8 +62,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 }; @@ -300,10 +304,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 @@ -1706,10 +1714,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.1/000077500000000000000000000000001476513315000246035ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.1/Python-2.7.1/000077500000000000000000000000001476513315000265275ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000034151476513315000325500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.1/Python-2.7.1 # HG changeset patch # User Barry Warsaw # 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 @@ -345,10 +345,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. pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.1/Python-2.7.1/002_readline63.patch000066400000000000000000000034721476513315000320730ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000066711476513315000337630ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.1/Python-2.7.1diff -r -u ../Python-2.7.1.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.1.orig/Lib/ssl.py 2010-09-14 14:37:18.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:14:39.089679248 +0000 @@ -62,18 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -388,7 +399,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.7.1.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.1.orig/Modules/_ssl.c 2010-10-13 22:10:31.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:18:21.612222848 +0000 @@ -62,8 +62,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 }; @@ -300,10 +304,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 @@ -1706,10 +1714,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.10/000077500000000000000000000000001476513315000246635ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.10/Python-2.7.10/000077500000000000000000000000001476513315000266675ustar00rootroot00000000000000003_system_library_path_in_sys_path.patch000066400000000000000000000011421476513315000366750ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.10/Python-2.7.10Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.10/Lib/site.py ./Lib/site.py --- ../Python-2.7.10/Lib/site.py 2014-06-30 05:05:30.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:42:33.000000000 +0200 @@ -300,7 +300,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/000077500000000000000000000000001476513315000246735ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18/000077500000000000000000000000001476513315000267075ustar00rootroot000000000000000001-Detect-arm64-in-configure.patch000066400000000000000000000017431476513315000347560ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18From 5495fb4719fa67ea3abeda0434699c8b28c77bb3 Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 16:50:14 +0900 Subject: [PATCH 1/7] Detect arm64 in configure --- configure | 3 +++ configure.ac | 3 +++ 2 files changed, 6 insertions(+) diff --git a/configure b/configure index 63d675312d..c40ec120de 100755 --- a/configure +++ b/configure @@ -8474,6 +8474,9 @@ fi ppc) MACOSX_DEFAULT_ARCH="ppc64" ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" + ;; *) as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5 ;; diff --git a/configure.ac b/configure.ac index efe6922b5d..df05bee87b 100644 --- a/configure.ac +++ b/configure.ac @@ -2066,6 +2066,9 @@ case $ac_sys_system/$ac_sys_release in ppc) MACOSX_DEFAULT_ARCH="ppc64" ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" + ;; *) AC_MSG_ERROR([Unexpected output of 'arch' on OSX]) ;; -- 2.30.1 0002-Fix-macOS-_tkinter-use-of-Tck-Tk-in-Library-Framewor.patch000066400000000000000000000240571476513315000416600ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18From f17b9e30bd295b1eec68105e3f04568477ce6286 Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 17:14:34 +0900 Subject: [PATCH 2/7] Fix macOS _tkinter use of Tck/Tk in /Library/Framework Modified and imported from https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch --- setup.py | 148 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 106 insertions(+), 42 deletions(-) diff --git a/setup.py b/setup.py index f764223d06..da1d34efaf 100644 --- a/setup.py +++ b/setup.py @@ -50,6 +50,7 @@ def add_dir_to_list(dirlist, dir): dirlist.insert(0, dir) MACOS_SDK_ROOT = None +MACOS_SDK_SPECIFIED = None def macosx_sdk_root(): """Return the directory of the current macOS SDK. @@ -61,8 +62,9 @@ def macosx_sdk_root(): (The SDK may be supplied via Xcode or via the Command Line Tools). The SDK paths used by Apple-supplied tool chains depend on the setting of various variables; see the xcrun man page for more info. + Also sets MACOS_SDK_SPECIFIED for use by macosx_sdk_specified(). """ - global MACOS_SDK_ROOT + global MACOS_SDK_ROOT, MACOS_SDK_SPECIFIED # If already called, return cached result. if MACOS_SDK_ROOT: @@ -72,8 +74,10 @@ def macosx_sdk_root(): m = re.search(r'-isysroot\s+(\S+)', cflags) if m is not None: MACOS_SDK_ROOT = m.group(1) + MACOS_SDK_SPECIFIED = MACOS_SDK_ROOT != '/' else: MACOS_SDK_ROOT = '/' + MACOS_SDK_SPECIFIED = False cc = sysconfig.get_config_var('CC') tmpfile = '/tmp/setup_sdk_root.%d' % os.getpid() try: @@ -101,6 +105,27 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def macosx_sdk_specified(): + """Returns true if an SDK was explicitly configured. + + True if an SDK was selected at configure time, either by specifying + --enable-universalsdk=(something other than no or /) or by adding a + -isysroot option to CFLAGS. In some cases, like when making + decisions about macOS Tk framework paths, we need to be able to + know whether the user explicitly asked to build with an SDK versus + the implicit use of an SDK when header files are no longer + installed on a running system by the Command Line Tools. + """ + global MACOS_SDK_SPECIFIED + + # If already called, return cached result. + if MACOS_SDK_SPECIFIED: + return MACOS_SDK_SPECIFIED + + # Find the sdk root and set MACOS_SDK_SPECIFIED + macosx_sdk_root() + return MACOS_SDK_SPECIFIED + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -1834,31 +1859,72 @@ class PyBuildExt(build_ext): return 1 def detect_tkinter_darwin(self, inc_dirs, lib_dirs): - # The _tkinter module, using frameworks. Since frameworks are quite - # different the UNIX search logic is not sharable. - from os.path import join, exists - framework_dirs = [ - '/Library/Frameworks', - '/System/Library/Frameworks/', - join(os.getenv('HOME'), '/Library/Frameworks') - ] + # Build default _tkinter on macOS using Tcl and Tk frameworks. + # + # The macOS native Tk (AKA Aqua Tk) and Tcl are most commonly + # built and installed as macOS framework bundles. However, + # for several reasons, we cannot take full advantage of the + # Apple-supplied compiler chain's -framework options here. + # Instead, we need to find and pass to the compiler the + # absolute paths of the Tcl and Tk headers files we want to use + # and the absolute path to the directory containing the Tcl + # and Tk frameworks for linking. + # + # We want to handle here two common use cases on macOS: + # 1. Build and link with system-wide third-party or user-built + # Tcl and Tk frameworks installed in /Library/Frameworks. + # 2. Build and link using a user-specified macOS SDK so that the + # built Python can be exported to other systems. In this case, + # search only the SDK's /Library/Frameworks (normally empty) + # and /System/Library/Frameworks. + # + # Any other use case should be able to be handled explicitly by + # using the options described above in detect_tkinter_explicitly(). + # In particular it would be good to handle here the case where + # you want to build and link with a framework build of Tcl and Tk + # that is not in /Library/Frameworks, say, in your private + # $HOME/Library/Frameworks directory or elsewhere. It turns + # out to be difficult to make that work automtically here + # without bringing into play more tools and magic. That case + # can be hamdled using a recipe with the right arguments + # to detect_tkinter_explicitly(). + # + # Note also that the fallback case here is to try to use the + # Apple-supplied Tcl and Tk frameworks in /System/Library but + # be forewarned that they are deprecated by Apple and typically + # out-of-date and buggy; their use should be avoided if at + # all possible by installing a newer version of Tcl and Tk in + # /Library/Frameworks before bwfore building Python without + # an explicit SDK or by configuring build arguments explicitly. - sysroot = macosx_sdk_root() + from os.path import join, exists + sysroot = macosx_sdk_root() # path to the SDK or '/' + + if macosx_sdk_specified(): + # Use case #2: an SDK other than '/' was specified. + # Only search there. + framework_dirs = [ + join(sysroot, 'Library', 'Frameworks'), + join(sysroot, 'System', 'Library', 'Frameworks'), + ] + else: + # Use case #1: no explicit SDK selected. + # Search the local system-wide /Library/Frameworks, + # not the one in the default SDK, othewise fall back to + # /System/Library/Frameworks whose header files may be in + # the default SDK or, on older systems, actually installed. + framework_dirs = [ + join('/', 'Library', 'Frameworks'), + join(sysroot, 'System', 'Library', 'Frameworks'), + ] - # Find the directory that contains the Tcl.framework and Tk.framework - # bundles. - # XXX distutils should support -F! + # Find the directory that contains the Tcl.framework and + # Tk.framework bundles. for F in framework_dirs: # both Tcl.framework and Tk.framework should be present - - for fw in 'Tcl', 'Tk': - if is_macosx_sdk_path(F): - if not exists(join(sysroot, F[1:], fw + '.framework')): - break - else: - if not exists(join(F, fw + '.framework')): - break + if not exists(join(F, fw + '.framework')): + break else: # ok, F is now directory with both frameworks. Continure # building @@ -1868,32 +1934,20 @@ class PyBuildExt(build_ext): # will now resume. return 0 - # For 8.4a2, we must add -I options that point inside the Tcl and Tk - # frameworks. In later release we should hopefully be able to pass - # the -F option to gcc, which specifies a framework lookup path. - # include_dirs = [ join(F, fw + '.framework', H) for fw in 'Tcl', 'Tk' - for H in 'Headers', 'Versions/Current/PrivateHeaders' + for H in ('Headers',) ] - # For 8.4a2, the X11 headers are not included. Rather than include a - # complicated search, this is a hard-coded path. It could bail out - # if X11 libs are not found... - include_dirs.append('/usr/X11R6/include') - frameworks = ['-framework', 'Tcl', '-framework', 'Tk'] + # Add the base framework directory as well + compile_args = ['-F', F] - # All existing framework builds of Tcl/Tk don't support 64-bit - # architectures. + # Do not build tkinter for archs that this Tk was not built with. cflags = sysconfig.get_config_vars('CFLAGS')[0] archs = re.findall('-arch\s+(\w+)', cflags) - if is_macosx_sdk_path(F): - fp = os.popen("file %s/Tk.framework/Tk | grep 'for architecture'"%(os.path.join(sysroot, F[1:]),)) - else: - fp = os.popen("file %s/Tk.framework/Tk | grep 'for architecture'"%(F,)) - + fp = os.popen("file %s/Tk.framework/Tk | grep 'for architecture'"%(F,)) detected_archs = [] for ln in fp: a = ln.split()[-1] @@ -1901,16 +1955,26 @@ class PyBuildExt(build_ext): detected_archs.append(ln.split()[-1]) fp.close() + arch_args = [] for a in detected_archs: - frameworks.append('-arch') - frameworks.append(a) + arch_args.append('-arch') + arch_args.append(a) + + compile_args += arch_args + link_args = [','.join(['-Wl', '-F', F, '-framework', 'Tcl', '-framework', 'Tk'])] + arch_args + + # The X11/xlib.h file bundled in the Tk sources can cause function + # prototype warnings from the compiler. Since we cannot easily fix + # that, suppress the warnings here instead. + if '-Wstrict-prototypes' in cflags.split(): + compile_args.append('-Wno-strict-prototypes') ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'], define_macros=[('WITH_APPINIT', 1)], include_dirs = include_dirs, libraries = [], - extra_compile_args = frameworks[2:], - extra_link_args = frameworks, + extra_compile_args = compile_args, + extra_link_args = link_args, ) self.extensions.append(ext) return 1 -- 2.30.1 0003-Support-arm64-in-Mac-Tools-pythonw.patch000066400000000000000000000015671476513315000365530ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18From d93a26fee21a5f91c51d8cb14ecaf29122f1b222 Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 17:25:00 +0900 Subject: [PATCH 3/7] Support "arm64" in Mac/Tools/pythonw Imported from: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch --- Mac/Tools/pythonw.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Mac/Tools/pythonw.c b/Mac/Tools/pythonw.c index 76734c1063..ebe5e8d975 100644 --- a/Mac/Tools/pythonw.c +++ b/Mac/Tools/pythonw.c @@ -116,10 +116,16 @@ setup_spawnattr(posix_spawnattr_t* spawnattr) #elif defined(__ppc__) cpu_types[0] = CPU_TYPE_POWERPC; + #elif defined(__i386__) cpu_types[0] = CPU_TYPE_X86; + +#elif defined(__arm64__) + cpu_types[0] = CPU_TYPE_ARM64; + #else # error "Unknown CPU" + #endif if (posix_spawnattr_setbinpref_np(spawnattr, count, -- 2.30.1 0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch000066400000000000000000000064631476513315000371770ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18From a1b08c7de72c27d80a86b92c263d1f5b351e581b Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 18:07:48 +0900 Subject: [PATCH 4/7] Use system libffi for Mac OS 10.15 and up Modified and imported from: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch --- setup.py | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/setup.py b/setup.py index da1d34efaf..c92d0552e3 100644 --- a/setup.py +++ b/setup.py @@ -126,6 +126,13 @@ def macosx_sdk_specified(): macosx_sdk_root() return MACOS_SDK_SPECIFIED +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -2180,7 +2187,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2224,15 +2235,24 @@ class PyBuildExt(build_ext): sources=['_ctypes/_ctypes_test.c']) self.extensions.extend([ext, ext_test]) - if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): - return + ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + ffi_lib = None + #inc_dirs = self.inc_dirs.copy() + inc_dirs = self.compiler.include_dirs[:] if host_platform == 'darwin': - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') + if not self.use_system_libffi: + return + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = [ffi_in_sdk] + ffi_lib = 'ffi' + sources.remove('_ctypes/malloc_closure.c') + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] if not ffi_inc or ffi_inc[0] == '': ffi_inc = find_file('ffi.h', [], inc_dirs) if ffi_inc is not None: @@ -2247,8 +2267,7 @@ class PyBuildExt(build_ext): ffi_inc = None print('Header file {} does not define LIBFFI_H or ' 'ffi_wrapper_h'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: + if ffi_lib is None and ffi_inc is not None: for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name -- 2.30.1 0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch000066400000000000000000000204051476513315000415150ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18From 4394ec26842b04335b30b9a0595fcc8591c68496 Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 18:59:44 +0900 Subject: [PATCH 5/7] ctypes: use the correct ABI for variadic functions Modified and imported from https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch --- Doc/library/ctypes.rst | 6 +++++ Lib/test/test_str.py | 2 ++ Lib/test/test_unicode.py | 3 +++ Modules/_ctypes/_ctypes.c | 31 +++++++++++++++++++++++ Modules/_ctypes/callproc.c | 51 +++++++++++++++++++++++++++++--------- Modules/_ctypes/ctypes.h | 1 + 6 files changed, 82 insertions(+), 12 deletions(-) diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 6a5299145f..ec97da607f 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1584,6 +1584,12 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. .. attribute:: errcheck diff --git a/Lib/test/test_str.py b/Lib/test/test_str.py index 73ed542a51..131f6d13e0 100644 --- a/Lib/test/test_str.py +++ b/Lib/test/test_str.py @@ -489,6 +489,8 @@ class CAPITest(unittest.TestCase): c_char_p) PyString_FromFormat = pythonapi.PyString_FromFormat + PyString_FromFormat.variadic = True + PyString_FromFormat.argtypes = (c_char_p,) PyString_FromFormat.restype = py_object # basic tests diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 92476f68a5..23e9e643e0 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -1676,6 +1676,7 @@ class CAPITest(unittest.TestCase): def test_from_format(self): test_support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) @@ -1684,6 +1685,8 @@ class CAPITest(unittest.TestCase): else: name = "PyUnicodeUCS4_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index bef251ef04..d03b98d09c 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3253,6 +3253,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob) { @@ -3299,6 +3327,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5838,6 +5868,7 @@ init_ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyInt_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyInt_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyInt_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyInt_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 066fefc0cc..39a539db47 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -88,6 +88,9 @@ #define DONT_USE_SEH #endif +#if defined(__APPLE__) && __arm64__ +#define HAVE_FFI_PREP_CIF_VAR 1 +#endif #define CTYPES_CAPSULE_ERROROBJ "_ctypes/callproc.c error object" CTYPES_CAPSULE_INSTANTIATE_DESTRUCTOR(CTYPES_CAPSULE_ERROROBJ) @@ -773,7 +776,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { #ifdef WITH_THREAD PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ @@ -801,15 +805,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1181,9 +1209,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 12b56c4342..8aec3d1ade 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -325,6 +325,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 -- 2.30.1 0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch000066400000000000000000000100641476513315000423410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18From 43819cd35cddd189cbe513032e76f1c1a6ec6d8c Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 19:14:50 +0900 Subject: [PATCH 6/7] ctypes: probe libffi for ffi_closure_alloc and ffi_prep_cif_var Modified and imported from https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch --- Modules/_ctypes/callproc.c | 4 ---- setup.py | 34 +++++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 39a539db47..5273e8d246 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -88,10 +88,6 @@ #define DONT_USE_SEH #endif -#if defined(__APPLE__) && __arm64__ -#define HAVE_FFI_PREP_CIF_VAR 1 -#endif - #define CTYPES_CAPSULE_ERROROBJ "_ctypes/callproc.c error object" CTYPES_CAPSULE_INSTANTIATE_DESTRUCTOR(CTYPES_CAPSULE_ERROROBJ) diff --git a/setup.py b/setup.py index c92d0552e3..beaf60f3e5 100644 --- a/setup.py +++ b/setup.py @@ -141,6 +141,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -2235,7 +2242,7 @@ class PyBuildExt(build_ext): sources=['_ctypes/_ctypes_test.c']) self.extensions.extend([ext, ext_test]) - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") ffi_lib = None #inc_dirs = self.inc_dirs.copy() @@ -2245,18 +2252,19 @@ class PyBuildExt(build_ext): return ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") if os.path.exists(ffi_in_sdk): - ffi_inc = [ffi_in_sdk] + ffi_inc = ffi_in_sdk ffi_lib = 'ffi' - sources.remove('_ctypes/malloc_closure.c') else: # OS X 10.5 comes with libffi.dylib; the include files are # in /usr/include/ffi inc_dirs.append('/usr/include/ffi') - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' with open(ffi_h) as f: for line in f: line = line.strip() @@ -2267,14 +2275,22 @@ class PyBuildExt(build_ext): ffi_inc = None print('Header file {} does not define LIBFFI_H or ' 'ffi_wrapper_h'.format(ffi_h)) - if ffi_lib is None and ffi_inc is not None: + if ffi_lib is None and ffi_inc: for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 0007-Remove-QuickTime-from-link-args.patch000066400000000000000000000027251476513315000362170ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.18/Python-2.7.18From 41ee254166bb690feb665991fc2442e335631314 Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 19:20:30 +0900 Subject: [PATCH 7/7] Remove QuickTime from link args --- Mac/Modules/qt/setup.py | 2 +- setup.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Mac/Modules/qt/setup.py b/Mac/Modules/qt/setup.py index 8442011ab9..4b5bc2bc20 100644 --- a/Mac/Modules/qt/setup.py +++ b/Mac/Modules/qt/setup.py @@ -6,7 +6,7 @@ from distutils.core import Extension, setup setup(name="QuickTime", version="0.2", ext_modules=[ Extension('QuickTime._Qt', ['_Qtmodule.c'], - extra_link_args=['-framework', 'Carbon', '-framework', 'QuickTime']) + extra_link_args=['-framework', 'Carbon']) ], py_modules=['QuickTime.Qt', 'QuickTime.QuickTime'], package_dir={'QuickTime':'../../../Lib/plat-mac/Carbon'} diff --git a/setup.py b/setup.py index beaf60f3e5..ff2298af91 100644 --- a/setup.py +++ b/setup.py @@ -1819,8 +1819,7 @@ class PyBuildExt(build_ext): exts.append( Extension('_Qt', ['qt/_Qtmodule.c'], extra_compile_args=carbon_extra_compile_args, - extra_link_args=['-framework', 'QuickTime', - '-framework', 'Carbon']) ) + extra_link_args=['-framework', 'Carbon']) ) self.extensions.extend(exts) -- 2.30.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.2/000077500000000000000000000000001476513315000246045ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.2/Python-2.7.2/000077500000000000000000000000001476513315000265315ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.2/Python-2.7.2/002_readline63.patch000066400000000000000000000034721476513315000320750ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = 003_system_library_path_in_sys_path.patch000066400000000000000000000012701476513315000365410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.2/Python-2.7.2Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.2/Lib/site.py ./Lib/site.py --- ../Python-2.7.2/Lib/site.py 2014-12-12 10:59:47.000000000 +0200 +++ ./Lib/site.py 2014-12-12 11:24:28.000000000 +0200 @@ -312,7 +312,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework and "/%s.framework/"%(framework,) in prefix: + if False and framework and "/%s.framework/"%(framework,) in prefix: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.2/Python-2.7.2/010_ssl_no_ssl3.patch000066400000000000000000000065531476513315000324040ustar00rootroot00000000000000diff -r -u ../Python-2.7.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.2.orig/Lib/ssl.py 2011-06-11 15:46:25.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 13:55:37.444270735 +0000 @@ -62,29 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" + +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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -416,7 +416,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.7.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.2.orig/Modules/_ssl.c 2011-06-11 15:46:27.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 13:49:22.254728756 +0000 @@ -65,7 +65,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -302,8 +304,10 @@ 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 */ @@ -1716,8 +1720,10 @@ 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", Only in ./Modules: _ssl.c.orig pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.3/000077500000000000000000000000001476513315000246055ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.3/Python-2.7.3/000077500000000000000000000000001476513315000265335ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.3/Python-2.7.3/002_readline63.patch000066400000000000000000000034721476513315000320770ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = 003_system_library_path_in_sys_path.patch000066400000000000000000000011401476513315000365370ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.3/Python-2.7.3Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.3/Lib/site.py ./Lib/site.py --- ../Python-2.7.3/Lib/site.py 2012-04-10 02:07:31.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:35:33.000000000 +0200 @@ -312,7 +312,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.3/Python-2.7.3/010_ssl_no_ssl3.patch000066400000000000000000000065631476513315000324070ustar00rootroot00000000000000diff -r -u ../Python-2.7.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.8.orig/Lib/ssl.py 2014-06-30 02:05:31.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:04:15.266072550 +0000 @@ -62,30 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -436,7 +435,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.7.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.8.orig/Modules/_ssl.c 2014-06-30 02:05:42.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:02:42.618029896 +0000 @@ -67,7 +67,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1808,8 +1812,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.4/000077500000000000000000000000001476513315000246065ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.4/Python-2.7.4/000077500000000000000000000000001476513315000265355ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.4/Python-2.7.4/002_readline63.patch000066400000000000000000000034721476513315000321010ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = 003_system_library_path_in_sys_path.patch000066400000000000000000000011401476513315000365410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.4/Python-2.7.4Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.3/Lib/site.py ./Lib/site.py --- ../Python-2.7.3/Lib/site.py 2012-04-10 02:07:31.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:35:33.000000000 +0200 @@ -312,7 +312,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.4/Python-2.7.4/010_ssl_no_ssl3.patch000066400000000000000000000065631476513315000324110ustar00rootroot00000000000000diff -r -u ../Python-2.7.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.8.orig/Lib/ssl.py 2014-06-30 02:05:31.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:04:15.266072550 +0000 @@ -62,30 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -436,7 +435,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.7.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.8.orig/Modules/_ssl.c 2014-06-30 02:05:42.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:02:42.618029896 +0000 @@ -67,7 +67,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1808,8 +1812,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.5/000077500000000000000000000000001476513315000246075ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.5/Python-2.7.5/000077500000000000000000000000001476513315000265375ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.5/Python-2.7.5/002_readline63.patch000066400000000000000000000034721476513315000321030ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = 003_system_library_path_in_sys_path.patch000066400000000000000000000011401476513315000365430ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.5/Python-2.7.5Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.5/Lib/site.py ./Lib/site.py --- ../Python-2.7.5/Lib/site.py 2013-05-12 06:32:44.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:29:29.000000000 +0200 @@ -300,7 +300,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.5/Python-2.7.5/010_ssl_no_ssl3.patch000066400000000000000000000065631476513315000324130ustar00rootroot00000000000000diff -r -u ../Python-2.7.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.8.orig/Lib/ssl.py 2014-06-30 02:05:31.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:04:15.266072550 +0000 @@ -62,30 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -436,7 +435,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.7.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.8.orig/Modules/_ssl.c 2014-06-30 02:05:42.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:02:42.618029896 +0000 @@ -67,7 +67,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1808,8 +1812,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.6/000077500000000000000000000000001476513315000246105ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.6/Python-2.7.6/000077500000000000000000000000001476513315000265415ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.6/Python-2.7.6/002_readline63.patch000066400000000000000000000034721476513315000321050ustar00rootroot00000000000000diff -r -u ../Python-2.7.6.orig/Modules/readline.c ./Modules/readline.c --- ../Python-2.7.6.orig/Modules/readline.c 2013-11-10 16:36:41.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:17:48.643305752 +0900 @@ -206,8 +206,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; @@ -750,14 +749,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); } @@ -852,7 +859,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'; @@ -911,12 +918,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 */ completer_word_break_characters = rl_completer_word_break_characters = 003_system_library_path_in_sys_path.patch000066400000000000000000000011401476513315000365450ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.6/Python-2.7.6Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.5/Lib/site.py ./Lib/site.py --- ../Python-2.7.5/Lib/site.py 2013-05-12 06:32:44.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:29:29.000000000 +0200 @@ -300,7 +300,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.6/Python-2.7.6/010_ssl_no_ssl3.patch000066400000000000000000000065631476513315000324150ustar00rootroot00000000000000diff -r -u ../Python-2.7.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.8.orig/Lib/ssl.py 2014-06-30 02:05:31.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:04:15.266072550 +0000 @@ -62,30 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -436,7 +435,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.7.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.8.orig/Modules/_ssl.c 2014-06-30 02:05:42.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:02:42.618029896 +0000 @@ -67,7 +67,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1808,8 +1812,10 @@ 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", 012_fix_bundle_loader_for_new_osx.patch000066400000000000000000000043271476513315000361500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.6/Python-2.7.6diff -ur ../Python-2.7.6/configure ./configure --- ../Python-2.7.6/configure 2014-06-19 14:35:59.000000000 -0400 +++ ./configure 2018-04-24 12:44:24.143179222 -0400 @@ -6045,8 +6045,14 @@ # Calculate the right deployment target for this build. # - cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` - if test ${cur_target} '>' 10.2; then + cur_target_major=`sw_vers -productVersion | \ + sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'` + cur_target_minor=`sw_vers -productVersion | \ + sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'` + cur_target="${cur_target_major}.${cur_target_minor}" + if test ${cur_target_major} -eq 10 && \ + test ${cur_target_minor} -ge 3 + then cur_target=10.3 if test ${enable_universalsdk}; then if test "${UNIVERSAL_ARCHS}" = "all"; then @@ -8230,15 +8236,14 @@ # Use -undefined dynamic_lookup whenever possible (10.3 and later). # This allows an extension to be used in any Python - if test ${MACOSX_DEPLOYMENT_TARGET} '>' 10.2 + dep_target_major=`echo ${MACOSX_DEPLOYMENT_TARGET} | \ + sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'` + dep_target_minor=`echo ${MACOSX_DEPLOYMENT_TARGET} | \ + sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'` + if test ${dep_target_major} -eq 10 && \ + test ${dep_target_minor} -le 2 then - if test "${enable_universalsdk}"; then - LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}" - fi - LDSHARED='$(CC) -bundle -undefined dynamic_lookup' - LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup' - BLDSHARED="$LDSHARED" - else + # building for OS X 10.0 through 10.2 LDSHARED='$(CC) -bundle' LDCXXSHARED='$(CXX) -bundle' if test "$enable_framework" ; then @@ -8252,6 +8257,14 @@ LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' LDCXXSHARED="$LDCXXSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' fi + else + # building for OS X 10.3 and later + if test "${enable_universalsdk}"; then + LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}" + fi + LDSHARED='$(CC) -bundle -undefined dynamic_lookup' + LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup' + BLDSHARED="$LDSHARED" fi ;; Linux*|GNU*|QNX*) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.7/000077500000000000000000000000001476513315000246115ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.7/Python-2.7.7/000077500000000000000000000000001476513315000265435ustar00rootroot00000000000000003_system_library_path_in_sys_path.patch000066400000000000000000000011401476513315000365470ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.7/Python-2.7.7Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.5/Lib/site.py ./Lib/site.py --- ../Python-2.7.5/Lib/site.py 2013-05-12 06:32:44.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:29:29.000000000 +0200 @@ -300,7 +300,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.7/Python-2.7.7/010_ssl_no_ssl3.patch000066400000000000000000000065631476513315000324170ustar00rootroot00000000000000diff -r -u ../Python-2.7.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.8.orig/Lib/ssl.py 2014-06-30 02:05:31.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:04:15.266072550 +0000 @@ -62,30 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -436,7 +435,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.7.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.8.orig/Modules/_ssl.c 2014-06-30 02:05:42.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:02:42.618029896 +0000 @@ -67,7 +67,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1808,8 +1812,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.8/000077500000000000000000000000001476513315000246125ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.8/Python-2.7.8/000077500000000000000000000000001476513315000265455ustar00rootroot00000000000000003_system_library_path_in_sys_path.patch000066400000000000000000000011401476513315000365510ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.8/Python-2.7.8Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.8/Lib/site.py ./Lib/site.py --- ../Python-2.7.8/Lib/site.py 2014-06-30 05:05:30.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:42:33.000000000 +0200 @@ -300,7 +300,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.8/Python-2.7.8/010_ssl_no_ssl3.patch000066400000000000000000000065631476513315000324210ustar00rootroot00000000000000diff -r -u ../Python-2.7.8.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.8.orig/Lib/ssl.py 2014-06-30 02:05:31.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:04:15.266072550 +0000 @@ -62,30 +62,29 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 - _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 + 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 = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import socket, _fileobject, _delegate_methods, error as socket_error from socket import getnameinfo as _getnameinfo @@ -436,7 +435,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.7.8.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-2.7.8.orig/Modules/_ssl.c 2014-06-30 02:05:42.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 14:02:42.618029896 +0000 @@ -67,7 +67,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1808,8 +1812,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.9/000077500000000000000000000000001476513315000246135ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.9/Python-2.7.9/000077500000000000000000000000001476513315000265475ustar00rootroot00000000000000003_system_library_path_in_sys_path.patch000066400000000000000000000011401476513315000365530ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.9/Python-2.7.9Only in .: 003_system_library_path_in_sys_path.patch diff -ur ../Python-2.7.9/Lib/site.py ./Lib/site.py --- ../Python-2.7.9/Lib/site.py 2014-06-30 05:05:30.000000000 +0300 +++ ./Lib/site.py 2014-12-12 11:42:33.000000000 +0200 @@ -300,7 +300,7 @@ # locations. from sysconfig import get_config_var framework = get_config_var("PYTHONFRAMEWORK") - if framework: + if False and framework: sitepackages.append( os.path.join("/Library", framework, sys.version[:3], "site-packages")) pyenv-2.5.4/plugins/python-build/share/python-build/patches/2.7.9/Python-2.7.9/010_ssl_no_ssl3.patch000066400000000000000000000011611476513315000324100ustar00rootroot00000000000000diff -r -u ../Python-2.7.9.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-2.7.9.orig/Lib/ssl.py 2014-12-10 15:59:40.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 14:09:51.218138658 +0000 @@ -106,7 +106,12 @@ from _ssl import (VERIFY_DEFAULT, VERIFY_CRL_CHECK_LEAF, VERIFY_CRL_CHECK_CHAIN, VERIFY_X509_STRICT) from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj -from _ssl import RAND_status, RAND_egd, RAND_add +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): pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.0.1/000077500000000000000000000000001476513315000245755ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.0.1/Python-3.0.1/000077500000000000000000000000001476513315000265135ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000035001476513315000325270ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.0.1/Python-3.0.1--- setup.py.orig 2011-07-07 19:41:48.610196111 +0900 +++ setup.py 2011-07-07 19:46:44.986310031 +0900 @@ -14,6 +14,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 @@ 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. 001_patch-svnversion.patch000066400000000000000000000023661476513315000333550ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.0.1/Python-3.0.1--- configure.in +++ configure.in @@ -767,7 +767,7 @@ then SVNVERSION="svnversion \$(srcdir)" else - SVNVERSION="echo exported" + SVNVERSION="echo Unversioned directory" fi case $MACHDEP in --- Makefile.pre.in +++ Makefile.pre.in @@ -501,7 +501,7 @@ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ --- Modules/getbuildinfo.c +++ Modules/getbuildinfo.c @@ -48,5 +48,5 @@ static const char svnversion[] = SVNVERSION; if (svnversion[0] != '$') return svnversion; /* it was interpolated, or passed on command line */ - return "exported"; + return "Unversioned directory"; } --- Python/sysmodule.c +++ Python/sysmodule.c @@ -1161,7 +1161,7 @@ svnversion = _Py_svnversion(); - if (strcmp(svnversion, "exported") != 0) + if (strcmp(svnversion, "Unversioned directory") != 0 && strcmp(svnversion, "exported") != 0) svn_revision = svnversion; else if (istag) { len = strlen(_patchlevel_revision); 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061721476513315000337430ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.0.1/Python-3.0.1diff -r -u ../Python-3.1.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.1.2.orig/Lib/ssl.py 2010-01-18 09:16:17.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:36:08.545346519 +0000 @@ -60,20 +60,23 @@ 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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -415,7 +418,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.1.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.1.2.orig/Modules/_ssl.c 2010-03-02 22:49:30.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:35:02.675100987 +0000 @@ -62,8 +62,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, }; @@ -299,10 +303,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 @@ -1698,10 +1706,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.0/000077500000000000000000000000001476513315000245755ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.0/Python-3.1/000077500000000000000000000000001476513315000263555ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.0/Python-3.1/000_patch-setup.py.diff000066400000000000000000000044351476513315000324600ustar00rootroot00000000000000diff -r -u ../Python-3.1/setup.py ./setup.py --- ../Python-3.1/setup.py 2009-05-24 02:13:14.000000000 +0900 +++ ./setup.py 2015-08-15 13:29:18.300777605 +0900 @@ -14,6 +14,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 = [] @@ -293,10 +294,33 @@ 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. @@ -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') 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061721476513315000336050ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.0/Python-3.1diff -r -u ../Python-3.1.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.1.2.orig/Lib/ssl.py 2010-01-18 09:16:17.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:36:08.545346519 +0000 @@ -60,20 +60,23 @@ 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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -415,7 +418,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.1.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.1.2.orig/Modules/_ssl.c 2010-03-02 22:49:30.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:35:02.675100987 +0000 @@ -62,8 +62,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, }; @@ -299,10 +303,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 @@ -1698,10 +1706,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.1/000077500000000000000000000000001476513315000245765ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.1/Python-3.1.1/000077500000000000000000000000001476513315000265155ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000044351476513315000325410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.1/Python-3.1.1diff -r -u ../Python-3.1/setup.py ./setup.py --- ../Python-3.1/setup.py 2009-05-24 02:13:14.000000000 +0900 +++ ./setup.py 2015-08-15 13:29:18.300777605 +0900 @@ -14,6 +14,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 = [] @@ -293,10 +294,33 @@ 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. @@ -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') 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061721476513315000337450ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.1/Python-3.1.1diff -r -u ../Python-3.1.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.1.2.orig/Lib/ssl.py 2010-01-18 09:16:17.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:36:08.545346519 +0000 @@ -60,20 +60,23 @@ 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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -415,7 +418,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.1.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.1.2.orig/Modules/_ssl.c 2010-03-02 22:49:30.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:35:02.675100987 +0000 @@ -62,8 +62,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, }; @@ -299,10 +303,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 @@ -1698,10 +1706,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.2/000077500000000000000000000000001476513315000245775ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.2/Python-3.1.2/000077500000000000000000000000001476513315000265175ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000044351476513315000325430ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.2/Python-3.1.2diff -r -u ../Python-3.1/setup.py ./setup.py --- ../Python-3.1/setup.py 2009-05-24 02:13:14.000000000 +0900 +++ ./setup.py 2015-08-15 13:29:18.300777605 +0900 @@ -14,6 +14,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 = [] @@ -293,10 +294,33 @@ 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. @@ -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') 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000061721476513315000337470ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.2/Python-3.1.2diff -r -u ../Python-3.1.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.1.2.orig/Lib/ssl.py 2010-01-18 09:16:17.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:36:08.545346519 +0000 @@ -60,20 +60,23 @@ 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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -415,7 +418,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.1.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.1.2.orig/Modules/_ssl.c 2010-03-02 22:49:30.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:35:02.675100987 +0000 @@ -62,8 +62,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, }; @@ -299,10 +303,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 @@ -1698,10 +1706,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.3/000077500000000000000000000000001476513315000246005ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.3/Python-3.1.3/000077500000000000000000000000001476513315000265215ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000042611476513315000325420ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.3/Python-3.1.3 # HG changeset patch # User Barry Warsaw # 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 @@ -345,10 +345,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. @@ -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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.3/Python-3.1.3/002_readline63.patch000066400000000000000000000037751476513315000320730ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000064361476513315000337540ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.3/Python-3.1.3diff -r -u ../Python-3.1.3.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.1.3.orig/Lib/ssl.py 2010-09-14 14:47:08.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:32:44.351880682 +0000 @@ -60,20 +60,23 @@ 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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -408,7 +411,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.1.3.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.1.3.orig/Modules/_ssl.c 2010-10-13 22:20:48.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:31:44.644359788 +0000 @@ -63,8 +63,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 }; @@ -304,10 +308,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 @@ -1785,10 +1793,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.4/000077500000000000000000000000001476513315000246015ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.4/Python-3.1.4/000077500000000000000000000000001476513315000265235ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000010141476513315000325350ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.4/Python-3.1.4--- 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.4/Python-3.1.4/002_readline63.patch000066400000000000000000000037751476513315000320750ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.4/Python-3.1.4/010_ssl_no_ssl3.patch000066400000000000000000000063651476513315000323770ustar00rootroot00000000000000diff -r -u ../Python-3.1.5.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.1.5.orig/Lib/ssl.py 2012-04-09 23:25:35.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:28:44.015492213 +0000 @@ -60,30 +60,28 @@ from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -418,7 +416,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.1.5.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.1.5.orig/Modules/_ssl.c 2012-04-09 23:25:36.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:27:06.620775506 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1796,8 +1800,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.5/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.5/Python-3.1.5/000077500000000000000000000000001476513315000265255ustar00rootroot00000000000000000_patch-setup.py.diff000066400000000000000000000010141476513315000325370ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.5/Python-3.1.5--- 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') pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.5/Python-3.1.5/002_readline63.patch000066400000000000000000000037751476513315000320770ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.1.5/Python-3.1.5/010_ssl_no_ssl3.patch000066400000000000000000000063651476513315000324010ustar00rootroot00000000000000diff -r -u ../Python-3.1.5.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.1.5.orig/Lib/ssl.py 2012-04-09 23:25:35.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:28:44.015492213 +0000 @@ -60,30 +60,28 @@ from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -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 PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -418,7 +416,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.1.5.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.1.5.orig/Modules/_ssl.c 2012-04-09 23:25:36.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:27:06.620775506 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -306,8 +308,10 @@ 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 */ @@ -1796,8 +1800,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.10.0/000077500000000000000000000000001476513315000246555ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.10.0/Python-3.10.0/000077500000000000000000000000001476513315000266535ustar00rootroot000000000000000001-bpo-45350-Rerun-autoreconf-with-the-pkg-config-macro.patch000066400000000000000000000436261476513315000415500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.10.0/Python-3.10.0From f146ca36f81075f222aa3a1595042597d96dfad3 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Salgado Date: Mon, 4 Oct 2021 00:39:54 +0100 Subject: [PATCH] bpo-45350: Rerun autoreconf with the pkg-config macros (GH-28707) diff --git a/aclocal.m4 b/aclocal.m4 index 987bfdf215..2f1bd37528 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -275,3 +275,347 @@ AC_DEFUN([AX_CHECK_OPENSSL], [ AC_SUBST([OPENSSL_LDFLAGS]) ]) +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 11 (pkg-config-0.29.1) + +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.1]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG + +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR + +dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], +dnl [DESCRIPTION], [DEFAULT]) +dnl ------------------------------------------ +dnl +dnl Prepare a "--with-" configure option using the lowercase +dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and +dnl PKG_CHECK_MODULES in a single macro. +AC_DEFUN([PKG_WITH_MODULES], +[ +m4_pushdef([with_arg], m4_tolower([$1])) + +m4_pushdef([description], + [m4_default([$5], [build with ]with_arg[ support])]) + +m4_pushdef([def_arg], [m4_default([$6], [auto])]) +m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) +m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) + +m4_case(def_arg, + [yes],[m4_pushdef([with_without], [--without-]with_arg)], + [m4_pushdef([with_without],[--with-]with_arg)]) + +AC_ARG_WITH(with_arg, + AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, + [AS_TR_SH([with_]with_arg)=def_arg]) + +AS_CASE([$AS_TR_SH([with_]with_arg)], + [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], + [auto],[PKG_CHECK_MODULES([$1],[$2], + [m4_n([def_action_if_found]) $3], + [m4_n([def_action_if_not_found]) $4])]) + +m4_popdef([with_arg]) +m4_popdef([description]) +m4_popdef([def_arg]) + +])dnl PKG_WITH_MODULES + +dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [DESCRIPTION], [DEFAULT]) +dnl ----------------------------------------------- +dnl +dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES +dnl check._[VARIABLE-PREFIX] is exported as make variable. +AC_DEFUN([PKG_HAVE_WITH_MODULES], +[ +PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) + +AM_CONDITIONAL([HAVE_][$1], + [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) +])dnl PKG_HAVE_WITH_MODULES + +dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [DESCRIPTION], [DEFAULT]) +dnl ------------------------------------------------------ +dnl +dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after +dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make +dnl and preprocessor variable. +AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], +[ +PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) + +AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], + [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) +])dnl PKG_HAVE_DEFINE_WITH_MODULES + diff --git a/configure b/configure index 753f956469..02d882ed39 100755 --- a/configure +++ b/configure @@ -630,7 +630,6 @@ OPENSSL_RPATH OPENSSL_LDFLAGS OPENSSL_LIBS OPENSSL_INCLUDES -PKG_CONFIG ENSUREPIP SRCDIRS THREADHEADERS @@ -662,6 +661,9 @@ DTRACE TCLTK_LIBS TCLTK_INCLUDES LIBFFI_INCLUDEDIR +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG TZPATH SHLIBS CFLAGSFORSHARED @@ -873,7 +875,10 @@ LDFLAGS LIBS CPPFLAGS CPP -PROFILE_TASK' +PROFILE_TASK +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR' # Initialize some variables set by options. @@ -1637,6 +1642,11 @@ Some influential environment variables: CPP C preprocessor PROFILE_TASK Python args for PGO generation task + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -10542,7 +10552,126 @@ $as_echo "no" >&6; } fi -PKG_PROG_PKG_CONFIG + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi # Check for use of the system expat library { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-expat" >&5 -- 2.29.2.windows.2 0002-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054361476513315000417230ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.10.0/Python-3.10.0From c8ee4dc57dd995e96ef9af0a04957b61ae1a7ac9 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index cc37185068..f238470c17 100755 --- a/configure +++ b/configure @@ -5226,9 +5226,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 3e6c07c279..dd68777b6a 100644 --- a/configure.ac +++ b/configure.ac @@ -717,9 +717,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.29.2.windows.2 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.11.0/000077500000000000000000000000001476513315000246565ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.11.0/openssl-1.1.1q/000077500000000000000000000000001476513315000271565ustar00rootroot00000000000000openssl_1.1.1q_fix_c_include.patch000066400000000000000000000004101476513315000353500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.11.0/openssl-1.1.1qdiff --git a/test/v3ext.c b/test/v3ext.c index 7a240cd706..6cec6f1a9b 100644 --- a/test/v3ext.c +++ b/test/v3ext.c @@ -15,6 +15,7 @@ #include #include "internal/nelem.h" +#include #include "testutil.h" static const char *infile; pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.0/000077500000000000000000000000001476513315000245765ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.0/Python-3.2/000077500000000000000000000000001476513315000263575ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.0/Python-3.2/000_patch-setup.py.diff000066400000000000000000000031601476513315000324540ustar00rootroot00000000000000--- setup.py.orig 2011-07-07 20:26:15.000000000 +0900 +++ setup.py 2011-07-07 20:29:28.735543350 +0900 @@ -370,12 +370,35 @@ 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, but the local build # directories (i.e. '.' and 'Include') must be first. See issue # 10520. 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. pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.0/Python-3.2/002_readline63.patch000066400000000000000000000037751476513315000317310ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = 010_ssl_no_ssl2_no_ssl3.patch000066400000000000000000000066011476513315000336040ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.0/Python-3.2diff -r -u ../Python-3.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.orig/Lib/ssl.py 2010-10-22 18:19:07.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:12:00.759323661 +0000 @@ -62,23 +62,26 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import (PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + from socket import getnameinfo as _getnameinfo from socket import error as socket_error from socket import socket, AF_INET, SOCK_STREAM @@ -518,7 +521,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.orig/Modules/_ssl.c 2011-01-29 11:31:20.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:10:38.285929662 +0000 @@ -63,8 +63,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 }; @@ -1448,10 +1452,14 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif +#ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); +#endif else if (proto_version == PY_SSL_VERSION_SSL23) ctx = SSL_CTX_new(SSLv23_method()); else @@ -2110,10 +2118,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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.1/000077500000000000000000000000001476513315000245775ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.1/Python-3.2.1/000077500000000000000000000000001476513315000265175ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.1/Python-3.2.1/002_readline63.patch000066400000000000000000000037751476513315000320710ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.1/Python-3.2.1/010_ssl_no_ssl3.patch000066400000000000000000000065671476513315000323770ustar00rootroot00000000000000diff -r -u ../Python-3.2.1.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.1.orig/Lib/ssl.py 2011-07-09 06:58:49.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:06:01.609146268 +0000 @@ -62,32 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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 HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +from _ssl import RAND_status, RAND_add try: - from _ssl import PROTOCOL_SSLv2 + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + +from _ssl import HAS_SNI + +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + +try: + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -545,7 +543,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.1.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.1.orig/Modules/_ssl.c 2011-07-09 06:58:54.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 07:04:34.878266042 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1450,8 +1452,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2118,8 +2122,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.2/000077500000000000000000000000001476513315000246005ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.2/Python-3.2.2/000077500000000000000000000000001476513315000265215ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.2/Python-3.2.2/002_readline63.patch000066400000000000000000000037751476513315000320730ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.2/Python-3.2.2/010_ssl_no_ssl3.patch000066400000000000000000000066411476513315000323720ustar00rootroot00000000000000diff -r -u ../Python-3.2.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.2.orig/Lib/ssl.py 2011-09-03 16:16:42.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:01:09.947260656 +0000 @@ -62,34 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: - from _ssl import PROTOCOL_SSLv2 -except ImportError: - pass -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -547,7 +543,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.2.orig/Modules/_ssl.c 2011-09-03 16:16:46.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:59:12.632993190 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1450,8 +1452,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2136,8 +2140,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.3/000077500000000000000000000000001476513315000246015ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.3/Python-3.2.3/000077500000000000000000000000001476513315000265235ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.3/Python-3.2.3/002_readline63.patch000066400000000000000000000037751476513315000320750ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.3/Python-3.2.3/010_ssl_no_ssl3.patch000066400000000000000000000065651476513315000324010ustar00rootroot00000000000000diff -r -u ../Python-3.2.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.6.orig/Lib/ssl.py 2014-10-12 06:52:02.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:40:11.895384463 +0000 @@ -62,35 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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, - ) +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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -557,7 +552,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.6.orig/Modules/_ssl.c 2014-10-12 06:52:03.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:37:10.124337227 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1512,8 +1514,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2199,8 +2203,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.4/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.4/Python-3.2.4/000077500000000000000000000000001476513315000265255ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.4/Python-3.2.4/002_readline63.patch000066400000000000000000000037751476513315000320770ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.4/Python-3.2.4/010_ssl_no_ssl3.patch000066400000000000000000000065651476513315000324030ustar00rootroot00000000000000diff -r -u ../Python-3.2.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.6.orig/Lib/ssl.py 2014-10-12 06:52:02.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:40:11.895384463 +0000 @@ -62,35 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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, - ) +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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -557,7 +552,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.6.orig/Modules/_ssl.c 2014-10-12 06:52:03.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:37:10.124337227 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1512,8 +1514,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2199,8 +2203,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.5/000077500000000000000000000000001476513315000246035ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.5/Python-3.2.5/000077500000000000000000000000001476513315000265275ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.5/Python-3.2.5/002_readline63.patch000066400000000000000000000037751476513315000321010ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.5/Python-3.2.5/010_ssl_no_ssl3.patch000066400000000000000000000065651476513315000324050ustar00rootroot00000000000000diff -r -u ../Python-3.2.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.6.orig/Lib/ssl.py 2014-10-12 06:52:02.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:40:11.895384463 +0000 @@ -62,35 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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, - ) +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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -557,7 +552,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.6.orig/Modules/_ssl.c 2014-10-12 06:52:03.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:37:10.124337227 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1512,8 +1514,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2199,8 +2203,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.6/000077500000000000000000000000001476513315000246045ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.6/Python-3.2.6/000077500000000000000000000000001476513315000265315ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.6/Python-3.2.6/002_readline63.patch000066400000000000000000000037751476513315000321030ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.2.6/Python-3.2.6/010_ssl_no_ssl3.patch000066400000000000000000000065651476513315000324070ustar00rootroot00000000000000diff -r -u ../Python-3.2.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.6.orig/Lib/ssl.py 2014-10-12 06:52:02.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:40:11.895384463 +0000 @@ -62,35 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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, - ) +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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -557,7 +552,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.6.orig/Modules/_ssl.c 2014-10-12 06:52:03.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:37:10.124337227 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1512,8 +1514,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2199,8 +2203,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.0/000077500000000000000000000000001476513315000245775ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.0/Python-3.3.0/000077500000000000000000000000001476513315000265175ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.0/Python-3.3.0/002_readline63.patch000066400000000000000000000037751476513315000320710ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.0/Python-3.3.0/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000323770ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.1/000077500000000000000000000000001476513315000246005ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.1/Python-3.3.1/000077500000000000000000000000001476513315000265215ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.1/Python-3.3.1/002_readline63.patch000066400000000000000000000037751476513315000320730ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.1/Python-3.3.1/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000324010ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.2/000077500000000000000000000000001476513315000246015ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.2/Python-3.3.2/000077500000000000000000000000001476513315000265235ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.2/Python-3.3.2/002_readline63.patch000066400000000000000000000037751476513315000320750ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.2/Python-3.3.2/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000324030ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.3/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.3/Python-3.3.3/000077500000000000000000000000001476513315000265255ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.3/Python-3.3.3/002_readline63.patch000066400000000000000000000037751476513315000320770ustar00rootroot00000000000000diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.3/Python-3.3.3/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000324050ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.4/000077500000000000000000000000001476513315000246035ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.4/Python-3.3.4/000077500000000000000000000000001476513315000265275ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.4/Python-3.3.4/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000324070ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.5/000077500000000000000000000000001476513315000246045ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.5/Python-3.3.5/000077500000000000000000000000001476513315000265315ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.5/Python-3.3.5/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000324110ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.6/000077500000000000000000000000001476513315000246055ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.6/Python-3.3.6/000077500000000000000000000000001476513315000265335ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.6/Python-3.3.6/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000324130ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.7/000077500000000000000000000000001476513315000246065ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.7/Python-3.3.7/000077500000000000000000000000001476513315000265355ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.3.7/Python-3.3.7/010_ssl_no_ssl3.patch000066400000000000000000000066571476513315000324150ustar00rootroot00000000000000diff -r -u ../Python-3.3.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.3.6.orig/Lib/ssl.py 2014-10-12 07:03:53.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:43:59.175134734 +0000 @@ -66,47 +66,32 @@ SSLSyscallError, SSLEOFError, ) from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import ( - OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_TLSv1, - OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE - ) -try: - from _ssl import OP_NO_COMPRESSION -except ImportError: - pass +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes try: - from _ssl import OP_SINGLE_ECDH_USE + from _ssl import RAND_egd except ImportError: + # LibreSSL does not provide RAND_egd pass -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes -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, - ) + +def _import_symbols(prefix): + for n in dir(_ssl): + if n.startswith(prefix): + globals()[n] = getattr(_ssl, n) + +_import_symbols('OP_') +_import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23, - PROTOCOL_TLSv1) + from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} + try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -664,7 +649,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.3.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.3.6.orig/Modules/_ssl.c 2014-10-12 07:03:53.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:42:45.773667904 +0000 @@ -1746,8 +1746,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2842,8 +2844,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.0/000077500000000000000000000000001476513315000246005ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.0/Python-3.4.0/000077500000000000000000000000001476513315000265215ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.0/Python-3.4.0/010_ssl_no_ssl3.patch000066400000000000000000000053371476513315000323730ustar00rootroot00000000000000diff -r -u ../Python-3.4.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.4.2.orig/Lib/ssl.py 2014-10-08 08:18:12.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 13:34:24.530051626 +0000 @@ -106,7 +106,12 @@ from _ssl import (VERIFY_DEFAULT, VERIFY_CRL_CHECK_LEAF, VERIFY_CRL_CHECK_CHAIN, VERIFY_X509_STRICT) from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes +try: + from _ssl import RAND_egd +except ImportError: + # LibreSSL does not provide RAND_egd + pass def _import_symbols(prefix): for n in dir(_ssl): @@ -116,18 +121,14 @@ _import_symbols('OP_') _import_symbols('ALERT_DESCRIPTION_') _import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 @@ -922,7 +923,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.4.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.4.2.orig/Modules/_ssl.c 2014-10-08 08:18:15.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 13:32:44.967611074 +0000 @@ -2016,8 +2016,10 @@ else if (proto_version == PY_SSL_VERSION_TLS1_2) ctx = SSL_CTX_new(TLSv1_2_method()); #endif +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -4071,8 +4073,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.1/000077500000000000000000000000001476513315000246015ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.1/Python-3.4.1/000077500000000000000000000000001476513315000265235ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.1/Python-3.4.1/010_ssl_no_ssl3.patch000066400000000000000000000053371476513315000323750ustar00rootroot00000000000000diff -r -u ../Python-3.4.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.4.2.orig/Lib/ssl.py 2014-10-08 08:18:12.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 13:34:24.530051626 +0000 @@ -106,7 +106,12 @@ from _ssl import (VERIFY_DEFAULT, VERIFY_CRL_CHECK_LEAF, VERIFY_CRL_CHECK_CHAIN, VERIFY_X509_STRICT) from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes +try: + from _ssl import RAND_egd +except ImportError: + # LibreSSL does not provide RAND_egd + pass def _import_symbols(prefix): for n in dir(_ssl): @@ -116,18 +121,14 @@ _import_symbols('OP_') _import_symbols('ALERT_DESCRIPTION_') _import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 @@ -922,7 +923,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.4.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.4.2.orig/Modules/_ssl.c 2014-10-08 08:18:15.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 13:32:44.967611074 +0000 @@ -2016,8 +2016,10 @@ else if (proto_version == PY_SSL_VERSION_TLS1_2) ctx = SSL_CTX_new(TLSv1_2_method()); #endif +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -4071,8 +4073,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.2/000077500000000000000000000000001476513315000246025ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.2/Python-3.4.2/000077500000000000000000000000001476513315000265255ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.4.2/Python-3.4.2/010_ssl_no_ssl3.patch000066400000000000000000000053371476513315000323770ustar00rootroot00000000000000diff -r -u ../Python-3.4.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.4.2.orig/Lib/ssl.py 2014-10-08 08:18:12.000000000 +0000 +++ ./Lib/ssl.py 2015-12-18 13:34:24.530051626 +0000 @@ -106,7 +106,12 @@ from _ssl import (VERIFY_DEFAULT, VERIFY_CRL_CHECK_LEAF, VERIFY_CRL_CHECK_CHAIN, VERIFY_X509_STRICT) from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj -from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes +from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes +try: + from _ssl import RAND_egd +except ImportError: + # LibreSSL does not provide RAND_egd + pass def _import_symbols(prefix): for n in dir(_ssl): @@ -116,18 +121,14 @@ _import_symbols('OP_') _import_symbols('ALERT_DESCRIPTION_') _import_symbols('SSL_ERROR_') +_import_symbols('PROTOCOL_') from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 @@ -922,7 +923,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.4.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.4.2.orig/Modules/_ssl.c 2014-10-08 08:18:15.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-18 13:32:44.967611074 +0000 @@ -2016,8 +2016,10 @@ else if (proto_version == PY_SSL_VERSION_TLS1_2) ctx = SSL_CTX_new(TLSv1_2_method()); #endif +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -4071,8 +4073,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/000077500000000000000000000000001476513315000246625ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10/000077500000000000000000000000001476513315000266655ustar00rootroot000000000000000001-bpo-27987-pymalloc-align-by-16bytes-on-64bit-platfor.patch000066400000000000000000000032331476513315000413020ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 112cceb514e79b4c9805f9e5ea037a205be428da Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 14 May 2019 18:51:15 +0900 Subject: [PATCH 1/2] bpo-27987: pymalloc: align by 16bytes on 64bit platform (GH-12850) --- .../2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst | 3 +++ Objects/obmalloc.c | 6 ++++++ 2 files changed, 9 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst b/Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst new file mode 100644 index 0000000000..b0f32a5c6c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst @@ -0,0 +1,3 @@ +pymalloc returns memory blocks aligned by 16 bytes, instead of 8 bytes, on +64-bit platforms to conform x86-64 ABI. Recent compilers assume this alignment +more often. Patch by Inada Naoki. diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index 9dd8421a33..da9029c4a6 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -540,8 +540,14 @@ static int running_on_valgrind = -1; * * You shouldn't change this unless you know what you are doing. */ + +#if SIZEOF_VOID_P > 4 +#define ALIGNMENT 16 /* must be 2^N */ +#define ALIGNMENT_SHIFT 4 +#else #define ALIGNMENT 8 /* must be 2^N */ #define ALIGNMENT_SHIFT 3 +#endif /* Return the number of bytes in size class I, as a uint. */ #define INDEX2SIZE(I) (((uint)(I) + 1) << ALIGNMENT_SHIFT) -- 2.38.4 0002-bpo-27987-align-PyGC_Head-to-alignof-long-double-GH-.patch000066400000000000000000000031661476513315000411160ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 618ef35426ecc57da1bee50f8dc5896f5fb178a9 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Sat, 25 May 2019 21:13:33 +0900 Subject: [PATCH 2/2] bpo-27987: align PyGC_Head to alignof(long double) (GH-13335) --- Include/objimpl.h | 6 +++++- .../2019-05-15-18-28-43.bpo-27987.FaxuLy.rst | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst diff --git a/Include/objimpl.h b/Include/objimpl.h index 65b6d91c36..eaf57975c8 100644 --- a/Include/objimpl.h +++ b/Include/objimpl.h @@ -250,7 +250,11 @@ typedef union _gc_head { union _gc_head *gc_prev; Py_ssize_t gc_refs; } gc; - double dummy; /* force worst-case alignment */ + long double dummy; /* force worst-case alignment */ + // malloc returns memory block aligned for any built-in types and + // long double is the largest standard C type. + // On amd64 linux, long double requires 16 byte alignment. + // See bpo-27987 for more discussion. } PyGC_Head; extern PyGC_Head *_PyGC_generation0; diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst b/Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst new file mode 100644 index 0000000000..97ca37b262 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst @@ -0,0 +1,2 @@ +``PyGC_Head`` structure is aligned to ``long double``. This is needed to +GC-ed objects are aligned properly. Patch by Inada Naoki. -- 2.38.4 0003-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000061011476513315000417240ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 655f26bb742d6bd32c388e9fea14b64eb25fd4de Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 15 Mar 2022 03:18:39 -0400 Subject: [PATCH] bpo-45405: Prevent internal configure error when running configure with recent versions of clang. (GH-28845) (GH-31890) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. The Apple Clang included with Xcode 13.3 now supports --print-multiarch causing configure to fail without this change. Co-authored-by: Ned Deily (cherry picked from commit 9c4766772cda67648184f8ddba546a5fc0167f91) Co-authored-by: David Bohman (cherry picked from commit 720bb456dc711b0776bae837d1f9a0b10c28ddf2) --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..13c93d1b8a --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of clang. Patch by David Bohman. diff --git a/configure b/configure index fb0a499145..67e6e69b5f 100755 --- a/configure +++ b/configure @@ -5203,9 +5203,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index d86dad9a7c..468ad6070f 100644 --- a/configure.ac +++ b/configure.ac @@ -747,9 +747,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.32.0 (Apple Git-132) 0004-Detect-arm64-in-configure.patch000066400000000000000000000017611476513315000347370ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 002501946bad91a308f37a09204393c172f03c3e Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 16:50:14 +0900 Subject: [PATCH 2/6] Detect arm64 in configure --- configure | 3 +++ configure.ac | 3 +++ 2 files changed, 6 insertions(+) diff --git a/configure b/configure index e39c16eee2..8dc1fc7595 100755 --- a/configure +++ b/configure @@ -9230,6 +9230,9 @@ fi ppc) MACOSX_DEFAULT_ARCH="ppc64" ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" + ;; *) as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5 ;; diff --git a/configure.ac b/configure.ac index cf280506bd..34846a7df3 100644 --- a/configure.ac +++ b/configure.ac @@ -2435,6 +2435,9 @@ case $ac_sys_system/$ac_sys_release in ppc) MACOSX_DEFAULT_ARCH="ppc64" ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" + ;; *) AC_MSG_ERROR([Unexpected output of 'arch' on OSX]) ;; -- 2.30.1 (Apple Git-130) 0005-BPO-41100-Support-macOS-11-when-building-GH-21113.patch000066400000000000000000000036521476513315000376660ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 8ea6353f60625c96ce96588c70ff24a77f8c71f9 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Thu, 25 Jun 2020 16:55:48 +0200 Subject: [PATCH] BPO-41100: Support macOS 11 when building (GH-21113) --- Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst | 1 + configure | 2 +- configure.ac | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst diff --git a/Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst b/Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst new file mode 100644 index 0000000000..ded66b567a --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst @@ -0,0 +1 @@ +Support macOS 11 when building. diff --git a/configure b/configure index c51f396824..5024860ca4 100755 --- a/configure +++ b/configure @@ -3375,7 +3375,7 @@ $as_echo "#define _BSD_SOURCE 1" >>confdefs.h # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; - Darwin/1[0-9].*) + Darwin/[12][0-9].*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined diff --git a/configure.ac b/configure.ac index 70deefb6b9..5a3e340aa3 100644 --- a/configure.ac +++ b/configure.ac @@ -495,7 +495,7 @@ case $ac_sys_system/$ac_sys_release in # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; - Darwin/1@<:@0-9@:>@.*) + Darwin/@<:@[12]@:>@@<:@0-9@:>@.*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined -- 2.30.1 (Apple Git-130) 0006-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000027101476513315000374540ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 604d95e235d86465b8c17f02095edcaf18464d4c Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index 108b76efa8..35ce429f60 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.30.1 (Apple Git-130) 0007-Port-ctypes-and-system-libffi-patch-for-arm64-macOS-.patch000066400000000000000000000117661476513315000416570ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 409b4ecef88643996ce00482b650c0246a977a4b Mon Sep 17 00:00:00 2001 From: Chaim Halbert Date: Sun, 26 Feb 2023 06:21:54 -0700 Subject: [PATCH] Port ctypes and system libffi patch for arm64/macOS 10.15+ to Python 3.5.10 This backports the following ctypes and libffi pyenv patch for Python 3.6.15 to Python 3.5.10: * `0004-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch` This patch enables use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enables calling variadic functions on arm64. --- setup.py | 65 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/setup.py b/setup.py index 2944c9dd6f..ab8065866f 100644 --- a/setup.py +++ b/setup.py @@ -73,6 +73,13 @@ def macosx_sdk_root(): sysroot = m.group(1) return sysroot +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -81,6 +88,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1939,7 +1953,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -1986,19 +2004,29 @@ class PyBuildExt(build_ext): libraries=math_libs) self.extensions.extend([ext, ext_test]) - if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): - return + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None if host_platform == 'darwin': - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + if not self.use_system_libffi: + return + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + elif '--without-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): + return + + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' with open(ffi_h) as f: for line in f: line = line.strip() @@ -2009,15 +2037,22 @@ class PyBuildExt(build_ext): ffi_inc = None print('Header file {} does not define LIBFFI_H or ' 'ffi_wrapper_h'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: + if ffi_lib is None and ffi_inc is not None: for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.39.2 0008-bpo-36231-Support-building-on-macOS-without-usr-incl.patch000066400000000000000000000066641476513315000415760ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 2ad0bb719f5ce416d3bfa366814ebcf3b654f081 Mon Sep 17 00:00:00 2001 From: Ivan Pozdeev Date: Sat, 10 Jun 2023 20:17:25 +0300 Subject: [PATCH] bpo-36231: Support building on macOS without /usr/include (GH-13773) (GH-14208) --- .../2019-06-03-05-49-49.bpo-36231.RfmW_p.rst | 3 ++ setup.py | 53 ++++++++++++++++--- 2 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst diff --git a/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst b/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst new file mode 100644 index 0000000000..c82e54c12c --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst @@ -0,0 +1,3 @@ +Support building Python on macOS without /usr/include installed. As of macOS +10.14, system header files are only available within an SDK provided by +either the Command Line Tools or the Xcode app. diff --git a/setup.py b/setup.py index ab8065866f..28dc801845 100644 --- a/setup.py +++ b/setup.py @@ -60,18 +60,57 @@ def add_dir_to_list(dirlist, dir): return dirlist.insert(0, dir) +MACOS_SDK_ROOT = None + def macosx_sdk_root(): + """Return the directory of the current macOS SDK. + + If no SDK was explicitly configured, call the compiler to find which + include files paths are being searched by default. Use '/' if the + compiler is searching /usr/include (meaning system header files are + installed) or use the root of an SDK if that is being searched. + (The SDK may be supplied via Xcode or via the Command Line Tools). + The SDK paths used by Apple-supplied tool chains depend on the + setting of various variables; see the xcrun man page for more info. """ - Return the directory of the current OSX SDK, - or '/' if no SDK was specified. - """ + global MACOS_SDK_ROOT + + # If already called, return cached result. + if MACOS_SDK_ROOT: + return MACOS_SDK_ROOT + cflags = sysconfig.get_config_var('CFLAGS') m = re.search(r'-isysroot\s+(\S+)', cflags) - if m is None: - sysroot = '/' + if m is not None: + MACOS_SDK_ROOT = m.group(1) else: - sysroot = m.group(1) - return sysroot + MACOS_SDK_ROOT = '/' + cc = sysconfig.get_config_var('CC') + tmpfile = '/tmp/setup_sdk_root.%d' % os.getpid() + try: + os.unlink(tmpfile) + except: + pass + ret = os.system('%s -E -v - %s 1>/dev/null' % (cc, tmpfile)) + in_incdirs = False + try: + if ret >> 8 == 0: + with open(tmpfile) as fp: + for line in fp.readlines(): + if line.startswith("#include <...>"): + in_incdirs = True + elif line.startswith("End of search list"): + in_incdirs = False + elif in_incdirs: + line = line.strip() + if line == '/usr/include': + MACOS_SDK_ROOT = '/' + elif line.endswith(".sdk/usr/include"): + MACOS_SDK_ROOT = line[:-12] + finally: + os.unlink(tmpfile) + + return MACOS_SDK_ROOT def is_macosx_at_least(vers): if host_platform == 'darwin': -- 2.36.1.windows.1 0009-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000015241476513315000414270ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.10/Python-3.5.10From 3cc28dc409d0db3752278379e7a8d4c23e0f2e29 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 28dc801845..dd50485213 100644 --- a/setup.py +++ b/setup.py @@ -129,7 +129,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.36.1.windows.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.2/000077500000000000000000000000001476513315000246035ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.2/Python-3.5.2/000077500000000000000000000000001476513315000265275ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.5.2/Python-3.5.2/venv.patch000066400000000000000000000016751476513315000305370ustar00rootroot00000000000000 # HG changeset patch # User Brett Cannon # Date 1467312199 25200 # Node ID 8d7bde14d7a48f747b1ea2f77385352c507da6b9 # Parent f2d1dba10a0e9db6c77889ff8ca18718ce1e76c6# Parent 4fc0154ec84a65feb580e62729ac1d26ddfcbfa1 Merge from 3.5 for issue #26664 diff --git a/Lib/venv/scripts/posix/activate.fish b/Lib/venv/scripts/posix/activate.fish --- a/Lib/venv/scripts/posix/activate.fish +++ b/Lib/venv/scripts/posix/activate.fish @@ -55,8 +55,8 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" # with the original prompt function renamed, we can override with our own. function fish_prompt # Prompt override? - if test -n "$__VENV_PROMPT__" - printf "%s%s%s" "$__VENV_PROMPT__" (set_color normal) (_old_fish_prompt) + if test -n "__VENV_PROMPT__" + printf "%s%s%s" "__VENV_PROMPT__" (set_color normal) (_old_fish_prompt) return end # ...Otherwise, prepend env pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/000077500000000000000000000000001476513315000246705ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15/000077500000000000000000000000001476513315000267015ustar00rootroot000000000000000001-Detect-arm64-in-configure.patch000066400000000000000000000017611476513315000347500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From 002501946bad91a308f37a09204393c172f03c3e Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 16:50:14 +0900 Subject: [PATCH 2/6] Detect arm64 in configure --- configure | 3 +++ configure.ac | 3 +++ 2 files changed, 6 insertions(+) diff --git a/configure b/configure index e39c16eee2..8dc1fc7595 100755 --- a/configure +++ b/configure @@ -9230,6 +9230,9 @@ fi ppc) MACOSX_DEFAULT_ARCH="ppc64" ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" + ;; *) as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5 ;; diff --git a/configure.ac b/configure.ac index cf280506bd..34846a7df3 100644 --- a/configure.ac +++ b/configure.ac @@ -2435,6 +2435,9 @@ case $ac_sys_system/$ac_sys_release in ppc) MACOSX_DEFAULT_ARCH="ppc64" ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" + ;; *) AC_MSG_ERROR([Unexpected output of 'arch' on OSX]) ;; -- 2.30.1 (Apple Git-130) 0002-bpo-36231-Support-building-on-macOS-without-usr-incl.patch000066400000000000000000000066261476513315000416020ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From c7302116573d853d3181133477d9d0e4d4d3abfd Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 18 Jun 2019 16:28:13 -0400 Subject: [PATCH] bpo-36231: Support building on macOS without /usr/include (GH-13773) (GH-14208) --- .../2019-06-03-05-49-49.bpo-36231.RfmW_p.rst | 3 ++ setup.py | 53 ++++++++++++++++--- 2 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst diff --git a/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst b/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst new file mode 100644 index 0000000000..c82e54c12c --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst @@ -0,0 +1,3 @@ +Support building Python on macOS without /usr/include installed. As of macOS +10.14, system header files are only available within an SDK provided by +either the Command Line Tools or the Xcode app. diff --git a/setup.py b/setup.py index bcc4bfa89d..5e0cd02430 100644 --- a/setup.py +++ b/setup.py @@ -90,18 +90,57 @@ def sysroot_paths(make_vars, subdirs): break return dirs +MACOS_SDK_ROOT = None + def macosx_sdk_root(): + """Return the directory of the current macOS SDK. + + If no SDK was explicitly configured, call the compiler to find which + include files paths are being searched by default. Use '/' if the + compiler is searching /usr/include (meaning system header files are + installed) or use the root of an SDK if that is being searched. + (The SDK may be supplied via Xcode or via the Command Line Tools). + The SDK paths used by Apple-supplied tool chains depend on the + setting of various variables; see the xcrun man page for more info. """ - Return the directory of the current OSX SDK, - or '/' if no SDK was specified. - """ + global MACOS_SDK_ROOT + + # If already called, return cached result. + if MACOS_SDK_ROOT: + return MACOS_SDK_ROOT + cflags = sysconfig.get_config_var('CFLAGS') m = re.search(r'-isysroot\s+(\S+)', cflags) - if m is None: - sysroot = '/' + if m is not None: + MACOS_SDK_ROOT = m.group(1) else: - sysroot = m.group(1) - return sysroot + MACOS_SDK_ROOT = '/' + cc = sysconfig.get_config_var('CC') + tmpfile = '/tmp/setup_sdk_root.%d' % os.getpid() + try: + os.unlink(tmpfile) + except: + pass + ret = os.system('%s -E -v - %s 1>/dev/null' % (cc, tmpfile)) + in_incdirs = False + try: + if ret >> 8 == 0: + with open(tmpfile) as fp: + for line in fp.readlines(): + if line.startswith("#include <...>"): + in_incdirs = True + elif line.startswith("End of search list"): + in_incdirs = False + elif in_incdirs: + line = line.strip() + if line == '/usr/include': + MACOS_SDK_ROOT = '/' + elif line.endswith(".sdk/usr/include"): + MACOS_SDK_ROOT = line[:-12] + finally: + os.unlink(tmpfile) + + return MACOS_SDK_ROOT def is_macosx_sdk_path(path): """ -- 2.30.1 (Apple Git-130) 0003-Fix-macOS-_tkinter-use-of-Tck-Tk-in-Library-Framewor.patch000066400000000000000000000243731476513315000416540ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From 942db3e6b96225ef8330f5329c702d62483c6ef8 Mon Sep 17 00:00:00 2001 From: Takumi Sueda Date: Sat, 11 Sep 2021 17:14:34 +0900 Subject: [PATCH 3/6] Fix macOS _tkinter use of Tck/Tk in /Library/Framework Modified and imported from https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch --- setup.py | 147 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 107 insertions(+), 40 deletions(-) diff --git a/setup.py b/setup.py index e2c1898253..8e03c77997 100644 --- a/setup.py +++ b/setup.py @@ -91,6 +91,7 @@ def sysroot_paths(make_vars, subdirs): return dirs MACOS_SDK_ROOT = None +MACOS_SDK_SPECIFIED = None def macosx_sdk_root(): """Return the directory of the current macOS SDK. @@ -102,8 +103,9 @@ def macosx_sdk_root(): (The SDK may be supplied via Xcode or via the Command Line Tools). The SDK paths used by Apple-supplied tool chains depend on the setting of various variables; see the xcrun man page for more info. + Also sets MACOS_SDK_SPECIFIED for use by macosx_sdk_specified(). """ - global MACOS_SDK_ROOT + global MACOS_SDK_ROOT, MACOS_SDK_SPECIFIED # If already called, return cached result. if MACOS_SDK_ROOT: @@ -113,8 +115,10 @@ def macosx_sdk_root(): m = re.search(r'-isysroot\s+(\S+)', cflags) if m is not None: MACOS_SDK_ROOT = m.group(1) + MACOS_SDK_SPECIFIED = MACOS_SDK_ROOT != '/' else: MACOS_SDK_ROOT = '/' + MACOS_SDK_SPECIFIED = False cc = sysconfig.get_config_var('CC') tmpfile = '/tmp/setup_sdk_root.%d' % os.getpid() try: @@ -142,6 +146,27 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def macosx_sdk_specified(): + """Returns true if an SDK was explicitly configured. + + True if an SDK was selected at configure time, either by specifying + --enable-universalsdk=(something other than no or /) or by adding a + -isysroot option to CFLAGS. In some cases, like when making + decisions about macOS Tk framework paths, we need to be able to + know whether the user explicitly asked to build with an SDK versus + the implicit use of an SDK when header files are no longer + installed on a running system by the Command Line Tools. + """ + global MACOS_SDK_SPECIFIED + + # If already called, return cached result. + if MACOS_SDK_SPECIFIED: + return MACOS_SDK_SPECIFIED + + # Find the sdk root and set MACOS_SDK_SPECIFIED + macosx_sdk_root() + return MACOS_SDK_SPECIFIED + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -1758,31 +1783,72 @@ class PyBuildExt(build_ext): return 1 def detect_tkinter_darwin(self, inc_dirs, lib_dirs): - # The _tkinter module, using frameworks. Since frameworks are quite - # different the UNIX search logic is not sharable. - from os.path import join, exists - framework_dirs = [ - '/Library/Frameworks', - '/System/Library/Frameworks/', - join(os.getenv('HOME'), '/Library/Frameworks') - ] + # Build default _tkinter on macOS using Tcl and Tk frameworks. + # + # The macOS native Tk (AKA Aqua Tk) and Tcl are most commonly + # built and installed as macOS framework bundles. However, + # for several reasons, we cannot take full advantage of the + # Apple-supplied compiler chain's -framework options here. + # Instead, we need to find and pass to the compiler the + # absolute paths of the Tcl and Tk headers files we want to use + # and the absolute path to the directory containing the Tcl + # and Tk frameworks for linking. + # + # We want to handle here two common use cases on macOS: + # 1. Build and link with system-wide third-party or user-built + # Tcl and Tk frameworks installed in /Library/Frameworks. + # 2. Build and link using a user-specified macOS SDK so that the + # built Python can be exported to other systems. In this case, + # search only the SDK's /Library/Frameworks (normally empty) + # and /System/Library/Frameworks. + # + # Any other use case should be able to be handled explicitly by + # using the options described above in detect_tkinter_explicitly(). + # In particular it would be good to handle here the case where + # you want to build and link with a framework build of Tcl and Tk + # that is not in /Library/Frameworks, say, in your private + # $HOME/Library/Frameworks directory or elsewhere. It turns + # out to be difficult to make that work automtically here + # without bringing into play more tools and magic. That case + # can be hamdled using a recipe with the right arguments + # to detect_tkinter_explicitly(). + # + # Note also that the fallback case here is to try to use the + # Apple-supplied Tcl and Tk frameworks in /System/Library but + # be forewarned that they are deprecated by Apple and typically + # out-of-date and buggy; their use should be avoided if at + # all possible by installing a newer version of Tcl and Tk in + # /Library/Frameworks before bwfore building Python without + # an explicit SDK or by configuring build arguments explicitly. - sysroot = macosx_sdk_root() + from os.path import join, exists + sysroot = macosx_sdk_root() # path to the SDK or '/' + + if macosx_sdk_specified(): + # Use case #2: an SDK other than '/' was specified. + # Only search there. + framework_dirs = [ + join(sysroot, 'Library', 'Frameworks'), + join(sysroot, 'System', 'Library', 'Frameworks'), + ] + else: + # Use case #1: no explicit SDK selected. + # Search the local system-wide /Library/Frameworks, + # not the one in the default SDK, othewise fall back to + # /System/Library/Frameworks whose header files may be in + # the default SDK or, on older systems, actually installed. + framework_dirs = [ + join('/', 'Library', 'Frameworks'), + join(sysroot, 'System', 'Library', 'Frameworks'), + ] - # Find the directory that contains the Tcl.framework and Tk.framework - # bundles. - # XXX distutils should support -F! + # Find the directory that contains the Tcl.framework and + # Tk.framework bundles. for F in framework_dirs: # both Tcl.framework and Tk.framework should be present - - for fw in 'Tcl', 'Tk': - if is_macosx_sdk_path(F): - if not exists(join(sysroot, F[1:], fw + '.framework')): - break - else: - if not exists(join(F, fw + '.framework')): - break + if not exists(join(F, fw + '.framework')): + break else: # ok, F is now directory with both frameworks. Continure # building @@ -1792,24 +1858,16 @@ class PyBuildExt(build_ext): # will now resume. return 0 - # For 8.4a2, we must add -I options that point inside the Tcl and Tk - # frameworks. In later release we should hopefully be able to pass - # the -F option to gcc, which specifies a framework lookup path. - # include_dirs = [ join(F, fw + '.framework', H) for fw in ('Tcl', 'Tk') - for H in ('Headers', 'Versions/Current/PrivateHeaders') + for H in ('Headers',) ] - # For 8.4a2, the X11 headers are not included. Rather than include a - # complicated search, this is a hard-coded path. It could bail out - # if X11 libs are not found... - include_dirs.append('/usr/X11R6/include') - frameworks = ['-framework', 'Tcl', '-framework', 'Tk'] + # Add the base framework directory as well + compile_args = ['-F', F] - # All existing framework builds of Tcl/Tk don't support 64-bit - # architectures. + # Do not build tkinter for archs that this Tk was not built with. cflags = sysconfig.get_config_vars('CFLAGS')[0] archs = re.findall(r'-arch\s+(\w+)', cflags) @@ -1819,10 +1877,7 @@ class PyBuildExt(build_ext): # Note: cannot use os.popen or subprocess here, that # requires extensions that are not available here. - if is_macosx_sdk_path(F): - os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(os.path.join(sysroot, F[1:]), tmpfile)) - else: - os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(F, tmpfile)) + os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(F, tmpfile)) with open(tmpfile) as fp: detected_archs = [] @@ -1832,16 +1887,26 @@ class PyBuildExt(build_ext): detected_archs.append(ln.split()[-1]) os.unlink(tmpfile) + arch_args = [] for a in detected_archs: - frameworks.append('-arch') - frameworks.append(a) + arch_args.append('-arch') + arch_args.append(a) + + compile_args += arch_args + link_args = [','.join(['-Wl', '-F', F, '-framework', 'Tcl', '-framework', 'Tk'])] + arch_args + + # The X11/xlib.h file bundled in the Tk sources can cause function + # prototype warnings from the compiler. Since we cannot easily fix + # that, suppress the warnings here instead. + if '-Wstrict-prototypes' in cflags.split(): + compile_args.append('-Wno-strict-prototypes') ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'], define_macros=[('WITH_APPINIT', 1)], include_dirs = include_dirs, libraries = [], - extra_compile_args = frameworks[2:], - extra_link_args = frameworks, + extra_compile_args = compile_args, + extra_link_args = link_args, ) self.extensions.append(ext) return 1 -- 2.30.1 (Apple Git-130) 0004-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch000066400000000000000000000302641476513315000420120ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From: Christian Hammond Date: Wed, 15 Dec 2021 23:12:36 -0800 Subject: Port ctypes and system libffi patches for arm64/macOS 10.15+ to Python 3.6.15 This ports the following ctypes and libffi pyenv patches for Python 2.7.18 to Python 3.6.15: * `0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch` * `0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch` * `0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch` These patches enable use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enable calling variadic functions on arm64. They've been combined from patches port from Homebrew to pyenv by Takumi Sueda, updated to work on the Python 3.6.15 codebase. The Homebrew patches are themselves backports of changes in Python 3.9 and 3.10. That patch can be found at: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index a7cc0c84df..f25f3c78d9 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1551,6 +1551,13 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. + .. attribute:: errcheck Assign a Python function or another callable to this attribute. The diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 56ab0ad732..013b1e9ce7 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2443,11 +2443,14 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 24d64858ed..351f274ad3 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3120,6 +3120,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self, void *Py_UNUSED(ignored)) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob, void *Py_UNUSED(ignored)) { @@ -3166,6 +3194,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5576,6 +5606,7 @@ PyInit__ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyLong_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyLong_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyLong_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyLong_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 2bb289bce0..12951eadbf 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -752,7 +754,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { #ifdef WITH_THREAD PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ @@ -780,15 +783,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1181,9 +1208,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 5d3b966338..1299ec25aa 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -285,6 +285,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 diff --git a/setup.py b/setup.py index 8e03c77997..3b124c4b7b 100644 --- a/setup.py +++ b/setup.py @@ -167,6 +167,13 @@ def macosx_sdk_specified(): macosx_sdk_root() return MACOS_SDK_SPECIFIED +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -175,6 +182,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -2115,7 +2129,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2162,20 +2180,29 @@ class PyBuildExt(build_ext): libraries=math_libs) self.extensions.extend([ext, ext_test]) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + if host_platform == 'darwin': - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): - return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') + if not self.use_system_libffi: + return + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') elif '--without-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"): return - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' with open(ffi_h) as f: for line in f: line = line.strip() @@ -2186,15 +2213,22 @@ class PyBuildExt(build_ext): ffi_inc = None print('Header file {} does not define LIBFFI_H or ' 'ffi_wrapper_h'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: + if ffi_lib is None and ffi_inc is not None: for lib_name in ('ffi', 'ffi_pic'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 (Apple Git-130) 0005-BPO-41100-Support-macOS-11-when-building-GH-21113.patch000066400000000000000000000036521476513315000377020ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From 8ea6353f60625c96ce96588c70ff24a77f8c71f9 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Thu, 25 Jun 2020 16:55:48 +0200 Subject: [PATCH] BPO-41100: Support macOS 11 when building (GH-21113) --- Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst | 1 + configure | 2 +- configure.ac | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst diff --git a/Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst b/Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst new file mode 100644 index 0000000000..ded66b567a --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst @@ -0,0 +1 @@ +Support macOS 11 when building. diff --git a/configure b/configure index c51f396824..5024860ca4 100755 --- a/configure +++ b/configure @@ -3375,7 +3375,7 @@ $as_echo "#define _BSD_SOURCE 1" >>confdefs.h # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; - Darwin/1[0-9].*) + Darwin/[12][0-9].*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined diff --git a/configure.ac b/configure.ac index 70deefb6b9..5a3e340aa3 100644 --- a/configure.ac +++ b/configure.ac @@ -495,7 +495,7 @@ case $ac_sys_system/$ac_sys_release in # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; - Darwin/1@<:@0-9@:>@.*) + Darwin/@<:@[12]@:>@@<:@0-9@:>@.*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined -- 2.30.1 (Apple Git-130) 0006-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000027101476513315000374700ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From 604d95e235d86465b8c17f02095edcaf18464d4c Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index 108b76efa8..35ce429f60 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.30.1 (Apple Git-130) 0007-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000016101476513315000414350ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From d9782f66445c9fa5d835ad29c23b22be85cde354 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. cherry-picked from 7a27c7ed4b by Pedro Fonini --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4aaa51e0d4..3556bbe041 100644 --- a/setup.py +++ b/setup.py @@ -184,7 +184,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.34.1 0008-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000061011476513315000417450ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From 655f26bb742d6bd32c388e9fea14b64eb25fd4de Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 15 Mar 2022 03:18:39 -0400 Subject: [PATCH] bpo-45405: Prevent internal configure error when running configure with recent versions of clang. (GH-28845) (GH-31890) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. The Apple Clang included with Xcode 13.3 now supports --print-multiarch causing configure to fail without this change. Co-authored-by: Ned Deily (cherry picked from commit 9c4766772cda67648184f8ddba546a5fc0167f91) Co-authored-by: David Bohman (cherry picked from commit 720bb456dc711b0776bae837d1f9a0b10c28ddf2) --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..13c93d1b8a --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of clang. Patch by David Bohman. diff --git a/configure b/configure index fb0a499145..67e6e69b5f 100755 --- a/configure +++ b/configure @@ -5203,9 +5203,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index d86dad9a7c..468ad6070f 100644 --- a/configure.ac +++ b/configure.ac @@ -747,9 +747,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.32.0 (Apple Git-132) 0009-bpo-27987-pymalloc-align-by-16bytes-on-64bit-platfor.patch000066400000000000000000000032351476513315000413300ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From 54dc627769bf112b0181972a52c4b45e4a02da57 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 14 May 2019 18:51:15 +0900 Subject: [PATCH 09/10] bpo-27987: pymalloc: align by 16bytes on 64bit platform (GH-12850) --- .../2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst | 3 +++ Objects/obmalloc.c | 6 ++++++ 2 files changed, 9 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst b/Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst new file mode 100644 index 0000000000..b0f32a5c6c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-04-16-11-52-21.bpo-27987.n2_DcQ.rst @@ -0,0 +1,3 @@ +pymalloc returns memory blocks aligned by 16 bytes, instead of 8 bytes, on +64-bit platforms to conform x86-64 ABI. Recent compilers assume this alignment +more often. Patch by Inada Naoki. diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index d46d149311..47283354f4 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -650,8 +650,14 @@ static int running_on_valgrind = -1; * * You shouldn't change this unless you know what you are doing. */ + +#if SIZEOF_VOID_P > 4 +#define ALIGNMENT 16 /* must be 2^N */ +#define ALIGNMENT_SHIFT 4 +#else #define ALIGNMENT 8 /* must be 2^N */ #define ALIGNMENT_SHIFT 3 +#endif /* Return the number of bytes in size class I, as a uint. */ #define INDEX2SIZE(I) (((uint)(I) + 1) << ALIGNMENT_SHIFT) -- 2.38.4 0010-bpo-27987-align-PyGC_Head-to-alignof-long-double-GH-.patch000066400000000000000000000031701476513315000411240ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.6.15/Python-3.6.15From e68ff170dc6764b22886e703f583fb53e90367ef Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Sat, 25 May 2019 21:13:33 +0900 Subject: [PATCH 10/10] bpo-27987: align PyGC_Head to alignof(long double) (GH-13335) --- Include/objimpl.h | 6 +++++- .../2019-05-15-18-28-43.bpo-27987.FaxuLy.rst | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst diff --git a/Include/objimpl.h b/Include/objimpl.h index e7a3696d7a..90d71b87ea 100644 --- a/Include/objimpl.h +++ b/Include/objimpl.h @@ -255,7 +255,11 @@ typedef union _gc_head { union _gc_head *gc_prev; Py_ssize_t gc_refs; } gc; - double dummy; /* force worst-case alignment */ + long double dummy; /* force worst-case alignment */ + // malloc returns memory block aligned for any built-in types and + // long double is the largest standard C type. + // On amd64 linux, long double requires 16 byte alignment. + // See bpo-27987 for more discussion. } PyGC_Head; extern PyGC_Head *_PyGC_generation0; diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst b/Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst new file mode 100644 index 0000000000..97ca37b262 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-05-15-18-28-43.bpo-27987.FaxuLy.rst @@ -0,0 +1,2 @@ +``PyGC_Head`` structure is aligned to ``long double``. This is needed to +GC-ed objects are aligned properly. Patch by Inada Naoki. -- 2.38.4 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.10/000077500000000000000000000000001476513315000246645ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.10/Python-3.7.10/000077500000000000000000000000001476513315000266715ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054361476513315000417400ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.10/Python-3.7.10From 35ddc7ad61b20a18496ba9410aa31b405e23fe78 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 829dd69bb8..455481bc50 100755 --- a/configure +++ b/configure @@ -5183,9 +5183,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index f1cc8e9bcb..1afcba3307 100644 --- a/configure.ac +++ b/configure.ac @@ -724,9 +724,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.29.2.windows.2 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.11/000077500000000000000000000000001476513315000246655ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.11/Python-3.7.11/000077500000000000000000000000001476513315000266735ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054361476513315000417420ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.11/Python-3.7.11From 0c2fd7c1de5121ea636134f131cf7ebada023acf Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 829dd69bb8..455481bc50 100755 --- a/configure +++ b/configure @@ -5183,9 +5183,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index f1cc8e9bcb..1afcba3307 100644 --- a/configure.ac +++ b/configure.ac @@ -724,9 +724,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.29.2.windows.2 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.12/000077500000000000000000000000001476513315000246665ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.12/Python-3.7.12/000077500000000000000000000000001476513315000266755ustar00rootroot000000000000000001-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch000066400000000000000000000276401476513315000420070ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.12/Python-3.7.12From: Christian Hammond Date: Wed, 15 Dec 2021 23:12:36 -0800 Subject: Port ctypes and system libffi patches for arm64/macOS 10.15+ to Python 3.7.12 This ports the following ctypes and libffi pyenv patches for Python 2.7.18 to Python 3.7.12: * `0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch` * `0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch` * `0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch` These patches enable use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enable calling variadic functions on arm64. They've been combined from patches port from Homebrew to pyenv by Takumi Sueda, updated to work on the Python 3.7.12 codebase. The Homebrew patches are themselves backports of changes in Python 3.9 and 3.10. That patch can be found at: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 715d595b24..7743144978 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1551,6 +1551,13 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. + .. attribute:: errcheck Assign a Python function or another callable to this attribute. The diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 4ebd82d3e0..7b73c190b6 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2458,11 +2458,14 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index dd0c61fd8a..79137e1dc7 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3174,6 +3174,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self, void *Py_UNUSED(ignored)) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob, void *Py_UNUSED(ignored)) { @@ -3219,6 +3247,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5632,6 +5662,7 @@ PyInit__ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyLong_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyLong_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyLong_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyLong_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 9cbf9801ad..e7fe11176b 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -754,7 +756,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ PyObject *error_object = NULL; @@ -780,15 +783,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1187,9 +1214,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e58f85233c..e45975f6ad 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -285,6 +285,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 diff --git a/setup.py b/setup.py index bf90600eaa..48ff120e9a 100644 --- a/setup.py +++ b/setup.py @@ -142,6 +142,13 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -150,6 +157,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1972,7 +1986,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2018,30 +2036,47 @@ class PyBuildExt(build_ext): libraries=['m']) self.extensions.extend([ext, ext_test]) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + if host_platform == 'darwin': - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): + if not self.use_system_libffi: return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' if not os.path.exists(ffi_h): ffi_inc = None print('Header file {} does not exist'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: - for lib_name in ('ffi', 'ffi_pic'): + + if ffi_lib is None and ffi_inc: + for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 (Apple Git-130) 0002-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000027071476513315000374660ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.12/Python-3.7.12From 604d95e235d86465b8c17f02095edcaf18464d4c Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index 108b76efa8..35ce429f60 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.30.1 (Apple Git-130) 0003-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000016101476513315000414250ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.12/Python-3.7.12From 245427d207ee88a4ba26a66c3de350bcbcc036f2 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. cherry-picked from 7a27c7ed4b by Pedro Fonini --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f211989aac..467362813d 100644 --- a/setup.py +++ b/setup.py @@ -159,7 +159,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.34.1 0004-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000026651476513315000417500ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.12/Python-3.7.12From 720bb456dc711b0776bae837d1f9a0b10c28ddf2 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 15 Mar 2022 03:18:39 -0400 Subject: [PATCH] bpo-45405: Prevent internal configure error when running configure with recent versions of clang. (GH-28845) (GH-31890) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. The Apple Clang included with Xcode 13.3 now supports --print-multiarch causing configure to fail without this change. --- configure | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git configure configure index 829dd69bb8..455481bc50 100755 --- a/configure +++ b/configure @@ -5183,9 +5183,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 -- 2.35.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.13/000077500000000000000000000000001476513315000246675ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.13/Python-3.7.13/000077500000000000000000000000001476513315000266775ustar00rootroot000000000000000001-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch000066400000000000000000000276401476513315000420110ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.13/Python-3.7.13From: Christian Hammond Date: Wed, 15 Dec 2021 23:12:36 -0800 Subject: Port ctypes and system libffi patches for arm64/macOS 10.15+ to Python 3.7.12 This ports the following ctypes and libffi pyenv patches for Python 2.7.18 to Python 3.7.12: * `0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch` * `0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch` * `0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch` These patches enable use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enable calling variadic functions on arm64. They've been combined from patches port from Homebrew to pyenv by Takumi Sueda, updated to work on the Python 3.7.12 codebase. The Homebrew patches are themselves backports of changes in Python 3.9 and 3.10. That patch can be found at: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 715d595b24..7743144978 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1551,6 +1551,13 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. + .. attribute:: errcheck Assign a Python function or another callable to this attribute. The diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 4ebd82d3e0..7b73c190b6 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2458,11 +2458,14 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index dd0c61fd8a..79137e1dc7 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3174,6 +3174,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self, void *Py_UNUSED(ignored)) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob, void *Py_UNUSED(ignored)) { @@ -3219,6 +3247,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5632,6 +5662,7 @@ PyInit__ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyLong_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyLong_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyLong_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyLong_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 9cbf9801ad..e7fe11176b 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -754,7 +756,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ PyObject *error_object = NULL; @@ -780,15 +783,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1187,9 +1214,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e58f85233c..e45975f6ad 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -285,6 +285,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 diff --git a/setup.py b/setup.py index bf90600eaa..48ff120e9a 100644 --- a/setup.py +++ b/setup.py @@ -142,6 +142,13 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -150,6 +157,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1972,7 +1986,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2018,30 +2036,47 @@ class PyBuildExt(build_ext): libraries=['m']) self.extensions.extend([ext, ext_test]) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + if host_platform == 'darwin': - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): + if not self.use_system_libffi: return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' if not os.path.exists(ffi_h): ffi_inc = None print('Header file {} does not exist'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: - for lib_name in ('ffi', 'ffi_pic'): + + if ffi_lib is None and ffi_inc: + for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 (Apple Git-130) 0002-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000027071476513315000374700ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.13/Python-3.7.13From 604d95e235d86465b8c17f02095edcaf18464d4c Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index 108b76efa8..35ce429f60 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.30.1 (Apple Git-130) 0003-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000016101476513315000414270ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.13/Python-3.7.13From 245427d207ee88a4ba26a66c3de350bcbcc036f2 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. cherry-picked from 7a27c7ed4b by Pedro Fonini --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f211989aac..467362813d 100644 --- a/setup.py +++ b/setup.py @@ -159,7 +159,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.34.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.14/000077500000000000000000000000001476513315000246705ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.14/Python-3.7.14/000077500000000000000000000000001476513315000267015ustar00rootroot000000000000000001-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch000066400000000000000000000276401476513315000420130ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.14/Python-3.7.14From: Christian Hammond Date: Wed, 15 Dec 2021 23:12:36 -0800 Subject: Port ctypes and system libffi patches for arm64/macOS 10.15+ to Python 3.7.12 This ports the following ctypes and libffi pyenv patches for Python 2.7.18 to Python 3.7.12: * `0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch` * `0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch` * `0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch` These patches enable use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enable calling variadic functions on arm64. They've been combined from patches port from Homebrew to pyenv by Takumi Sueda, updated to work on the Python 3.7.12 codebase. The Homebrew patches are themselves backports of changes in Python 3.9 and 3.10. That patch can be found at: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 715d595b24..7743144978 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1551,6 +1551,13 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. + .. attribute:: errcheck Assign a Python function or another callable to this attribute. The diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 4ebd82d3e0..7b73c190b6 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2458,11 +2458,14 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index dd0c61fd8a..79137e1dc7 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3174,6 +3174,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self, void *Py_UNUSED(ignored)) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob, void *Py_UNUSED(ignored)) { @@ -3219,6 +3247,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5632,6 +5662,7 @@ PyInit__ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyLong_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyLong_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyLong_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyLong_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 9cbf9801ad..e7fe11176b 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -754,7 +756,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ PyObject *error_object = NULL; @@ -780,15 +783,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1187,9 +1214,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e58f85233c..e45975f6ad 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -285,6 +285,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 diff --git a/setup.py b/setup.py index bf90600eaa..48ff120e9a 100644 --- a/setup.py +++ b/setup.py @@ -142,6 +142,13 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -150,6 +157,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1972,7 +1986,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2018,30 +2036,47 @@ class PyBuildExt(build_ext): libraries=['m']) self.extensions.extend([ext, ext_test]) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + if host_platform == 'darwin': - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): + if not self.use_system_libffi: return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' if not os.path.exists(ffi_h): ffi_inc = None print('Header file {} does not exist'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: - for lib_name in ('ffi', 'ffi_pic'): + + if ffi_lib is None and ffi_inc: + for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 (Apple Git-130) 0002-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000026701476513315000374710ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.14/Python-3.7.14From f2595c038ed7bfd182d9d05d83786106ebd02ca0 Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index a67dd9bc12..3e9c8185c3 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.37.3 0003-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000016101476513315000414310ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.14/Python-3.7.14From 245427d207ee88a4ba26a66c3de350bcbcc036f2 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. cherry-picked from 7a27c7ed4b by Pedro Fonini --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f211989aac..467362813d 100644 --- a/setup.py +++ b/setup.py @@ -159,7 +159,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.34.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.15/000077500000000000000000000000001476513315000246715ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.15/Python-3.7.15/000077500000000000000000000000001476513315000267035ustar00rootroot000000000000000001-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch000066400000000000000000000276401476513315000420150ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.15/Python-3.7.15From: Christian Hammond Date: Wed, 15 Dec 2021 23:12:36 -0800 Subject: Port ctypes and system libffi patches for arm64/macOS 10.15+ to Python 3.7.12 This ports the following ctypes and libffi pyenv patches for Python 2.7.18 to Python 3.7.12: * `0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch` * `0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch` * `0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch` These patches enable use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enable calling variadic functions on arm64. They've been combined from patches port from Homebrew to pyenv by Takumi Sueda, updated to work on the Python 3.7.12 codebase. The Homebrew patches are themselves backports of changes in Python 3.9 and 3.10. That patch can be found at: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 715d595b24..7743144978 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1551,6 +1551,13 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. + .. attribute:: errcheck Assign a Python function or another callable to this attribute. The diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 4ebd82d3e0..7b73c190b6 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2458,11 +2458,14 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index dd0c61fd8a..79137e1dc7 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3174,6 +3174,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self, void *Py_UNUSED(ignored)) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob, void *Py_UNUSED(ignored)) { @@ -3219,6 +3247,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5632,6 +5662,7 @@ PyInit__ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyLong_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyLong_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyLong_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyLong_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 9cbf9801ad..e7fe11176b 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -754,7 +756,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ PyObject *error_object = NULL; @@ -780,15 +783,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1187,9 +1214,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e58f85233c..e45975f6ad 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -285,6 +285,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 diff --git a/setup.py b/setup.py index bf90600eaa..48ff120e9a 100644 --- a/setup.py +++ b/setup.py @@ -142,6 +142,13 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -150,6 +157,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1972,7 +1986,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2018,30 +2036,47 @@ class PyBuildExt(build_ext): libraries=['m']) self.extensions.extend([ext, ext_test]) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + if host_platform == 'darwin': - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): + if not self.use_system_libffi: return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' if not os.path.exists(ffi_h): ffi_inc = None print('Header file {} does not exist'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: - for lib_name in ('ffi', 'ffi_pic'): + + if ffi_lib is None and ffi_inc: + for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 (Apple Git-130) 0002-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000026701476513315000374730ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.15/Python-3.7.15From f2595c038ed7bfd182d9d05d83786106ebd02ca0 Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index a67dd9bc12..3e9c8185c3 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.37.3 0003-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000016101476513315000414330ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.15/Python-3.7.15From 245427d207ee88a4ba26a66c3de350bcbcc036f2 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. cherry-picked from 7a27c7ed4b by Pedro Fonini --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f211989aac..467362813d 100644 --- a/setup.py +++ b/setup.py @@ -159,7 +159,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.34.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.15/openssl-1.1.1q/000077500000000000000000000000001476513315000271715ustar00rootroot00000000000000openssl_1.1.1q_fix_c_include.patch000066400000000000000000000004101476513315000353630ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.15/openssl-1.1.1qdiff --git a/test/v3ext.c b/test/v3ext.c index 7a240cd706..6cec6f1a9b 100644 --- a/test/v3ext.c +++ b/test/v3ext.c @@ -15,6 +15,7 @@ #include #include "internal/nelem.h" +#include #include "testutil.h" static const char *infile; pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.16/000077500000000000000000000000001476513315000246725ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.16/Python-3.7.16/000077500000000000000000000000001476513315000267055ustar00rootroot000000000000000001-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch000066400000000000000000000276401476513315000420170ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.16/Python-3.7.16From: Christian Hammond Date: Wed, 15 Dec 2021 23:12:36 -0800 Subject: Port ctypes and system libffi patches for arm64/macOS 10.15+ to Python 3.7.12 This ports the following ctypes and libffi pyenv patches for Python 2.7.18 to Python 3.7.12: * `0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch` * `0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch` * `0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch` These patches enable use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enable calling variadic functions on arm64. They've been combined from patches port from Homebrew to pyenv by Takumi Sueda, updated to work on the Python 3.7.12 codebase. The Homebrew patches are themselves backports of changes in Python 3.9 and 3.10. That patch can be found at: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 715d595b24..7743144978 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1551,6 +1551,13 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. + .. attribute:: errcheck Assign a Python function or another callable to this attribute. The diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 4ebd82d3e0..7b73c190b6 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2458,11 +2458,14 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index dd0c61fd8a..79137e1dc7 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3174,6 +3174,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self, void *Py_UNUSED(ignored)) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob, void *Py_UNUSED(ignored)) { @@ -3219,6 +3247,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5632,6 +5662,7 @@ PyInit__ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyLong_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyLong_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyLong_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyLong_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 9cbf9801ad..e7fe11176b 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -754,7 +756,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ PyObject *error_object = NULL; @@ -780,15 +783,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1187,9 +1214,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e58f85233c..e45975f6ad 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -285,6 +285,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 diff --git a/setup.py b/setup.py index bf90600eaa..48ff120e9a 100644 --- a/setup.py +++ b/setup.py @@ -142,6 +142,13 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -150,6 +157,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1972,7 +1986,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2018,30 +2036,47 @@ class PyBuildExt(build_ext): libraries=['m']) self.extensions.extend([ext, ext_test]) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + if host_platform == 'darwin': - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): + if not self.use_system_libffi: return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' if not os.path.exists(ffi_h): ffi_inc = None print('Header file {} does not exist'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: - for lib_name in ('ffi', 'ffi_pic'): + + if ffi_lib is None and ffi_inc: + for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 (Apple Git-130) 0002-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000026701476513315000374750ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.16/Python-3.7.16From f2595c038ed7bfd182d9d05d83786106ebd02ca0 Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index a67dd9bc12..3e9c8185c3 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.37.3 0003-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000016101476513315000414350ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.16/Python-3.7.16From 245427d207ee88a4ba26a66c3de350bcbcc036f2 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. cherry-picked from 7a27c7ed4b by Pedro Fonini --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f211989aac..467362813d 100644 --- a/setup.py +++ b/setup.py @@ -159,7 +159,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.34.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.16/openssl-1.1.1q/000077500000000000000000000000001476513315000271725ustar00rootroot00000000000000openssl_1.1.1q_fix_c_include.patch000066400000000000000000000004101476513315000353640ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.16/openssl-1.1.1qdiff --git a/test/v3ext.c b/test/v3ext.c index 7a240cd706..6cec6f1a9b 100644 --- a/test/v3ext.c +++ b/test/v3ext.c @@ -15,6 +15,7 @@ #include #include "internal/nelem.h" +#include #include "testutil.h" static const char *infile; pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.17/000077500000000000000000000000001476513315000246735ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.17/Python-3.7.17/000077500000000000000000000000001476513315000267075ustar00rootroot000000000000000001-Port-ctypes-and-system-libffi-patches-for-arm64-macO.patch000066400000000000000000000276401476513315000420210ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.17/Python-3.7.17From: Christian Hammond Date: Wed, 15 Dec 2021 23:12:36 -0800 Subject: Port ctypes and system libffi patches for arm64/macOS 10.15+ to Python 3.7.12 This ports the following ctypes and libffi pyenv patches for Python 2.7.18 to Python 3.7.12: * `0004-Use-system-libffi-for-Mac-OS-10.15-and-up.patch` * `0005-ctypes-use-the-correct-ABI-for-variadic-functions.patch` * `0006-ctypes-probe-libffi-for-ffi_closure_alloc-and-ffi_pr.patch` These patches enable use of system libffi (fixing a broken `ctypes` module on arm64 targets) and enable calling variadic functions on arm64. They've been combined from patches port from Homebrew to pyenv by Takumi Sueda, updated to work on the Python 3.7.12 codebase. The Homebrew patches are themselves backports of changes in Python 3.9 and 3.10. That patch can be found at: https://github.com/Homebrew/formula-patches/blob/master/python/3.8.7.patch diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 715d595b24..7743144978 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1551,6 +1551,13 @@ They are instances of a private class: value usable as argument (integer, string, ctypes instance). This allows defining adapters that can adapt custom objects as function parameters. + .. attribute:: variadic + + Assign a boolean to specify that the function takes a variable number of + arguments. This does not matter on most platforms, but for Apple arm64 + platforms variadic functions have a different calling convention than + normal functions. + .. attribute:: errcheck Assign a Python function or another callable to this attribute. The diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 4ebd82d3e0..7b73c190b6 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2458,11 +2458,14 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) + _PyUnicode_FromFormat.variadic = True _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index dd0c61fd8a..79137e1dc7 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3174,6 +3174,34 @@ PyCFuncPtr_get_restype(PyCFuncPtrObject *self, void *Py_UNUSED(ignored)) } } +static int +PyCFuncPtr_set_variadic(PyCFuncPtrObject *self, PyObject *ob) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); + int r = PyObject_IsTrue(ob); + if (r == 1) { + dict->flags |= FUNCFLAG_VARIADIC; + return 0; + } else if (r == 0) { + dict->flags &= ~FUNCFLAG_VARIADIC; + return 0; + } else { + return -1; + } +} + +static PyObject * +PyCFuncPtr_get_variadic(PyCFuncPtrObject *self) +{ + StgDictObject *dict = PyObject_stgdict((PyObject *)self); + assert(dict); /* Cannot be NULL for PyCFuncPtrObject instances */ + if (dict->flags & FUNCFLAG_VARIADIC) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + static int PyCFuncPtr_set_argtypes(PyCFuncPtrObject *self, PyObject *ob, void *Py_UNUSED(ignored)) { @@ -3219,6 +3247,8 @@ static PyGetSetDef PyCFuncPtr_getsets[] = { { "argtypes", (getter)PyCFuncPtr_get_argtypes, (setter)PyCFuncPtr_set_argtypes, "specify the argument types", NULL }, + { "variadic", (getter)PyCFuncPtr_get_variadic, (setter)PyCFuncPtr_set_variadic, + "specify if function takes variable number of arguments", NULL }, { NULL, NULL } }; @@ -5632,6 +5662,7 @@ PyInit__ctypes(void) PyModule_AddObject(m, "FUNCFLAG_USE_ERRNO", PyLong_FromLong(FUNCFLAG_USE_ERRNO)); PyModule_AddObject(m, "FUNCFLAG_USE_LASTERROR", PyLong_FromLong(FUNCFLAG_USE_LASTERROR)); PyModule_AddObject(m, "FUNCFLAG_PYTHONAPI", PyLong_FromLong(FUNCFLAG_PYTHONAPI)); + PyModule_AddObject(m, "FUNCFLAG_VARIADIC", PyLong_FromLong(FUNCFLAG_VARIADIC)); PyModule_AddStringConstant(m, "__version__", "1.1.0"); PyModule_AddObject(m, "_memmove_addr", PyLong_FromVoidPtr(memmove)); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 9cbf9801ad..e7fe11176b 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -754,7 +756,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ PyObject *error_object = NULL; @@ -780,15 +783,39 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +#if HAVE_FFI_PREP_CIF_VAR + /* Everyone SHOULD set f.variadic=True on variadic function pointers, but + * lots of existing code will not. If there's at least one arg and more + * args are passed than are defined in the prototype, then it must be a + * variadic function. */ + if ((flags & FUNCFLAG_VARIADIC) || + (argtypecount != 0 && argcount > argtypecount)) + { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { +#endif + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } +#if HAVE_FFI_PREP_CIF_VAR } +#endif if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { error_object = _ctypes_get_errobj(&space); @@ -1187,9 +1214,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e58f85233c..e45975f6ad 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -285,6 +285,7 @@ PyObject *_ctypes_callproc(PPROC pProc, #define FUNCFLAG_PYTHONAPI 0x4 #define FUNCFLAG_USE_ERRNO 0x8 #define FUNCFLAG_USE_LASTERROR 0x10 +#define FUNCFLAG_VARIADIC 0x20 #define TYPEFLAG_ISPOINTER 0x100 #define TYPEFLAG_HASPOINTER 0x200 diff --git a/setup.py b/setup.py index bf90600eaa..48ff120e9a 100644 --- a/setup.py +++ b/setup.py @@ -142,6 +142,13 @@ def macosx_sdk_root(): return MACOS_SDK_ROOT +def is_macosx_at_least(vers): + if host_platform == 'darwin': + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target: + return tuple(map(int, str(dep_target).split('.'))) >= vers + return False + def is_macosx_sdk_path(path): """ Returns True if 'path' can be located in an OSX SDK @@ -150,6 +157,13 @@ def is_macosx_sdk_path(path): or path.startswith('/System/') or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1972,7 +1986,11 @@ class PyBuildExt(build_ext): return True def detect_ctypes(self, inc_dirs, lib_dirs): - self.use_system_libffi = False + if not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and is_macosx_at_least((10,15)): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2018,30 +2036,47 @@ class PyBuildExt(build_ext): libraries=['m']) self.extensions.extend([ext, ext_test]) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + if host_platform == 'darwin': - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): + if not self.use_system_libffi: return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + if os.path.exists(ffi_in_sdk): + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + + if not ffi_inc: + found = find_file('ffi.h', [], inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' if not os.path.exists(ffi_h): ffi_inc = None print('Header file {} does not exist'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: - for lib_name in ('ffi', 'ffi_pic'): + + if ffi_lib is None and ffi_inc: + for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_closure_alloc', ffi_headers): + try: + sources.remove('_ctypes/malloc_closure.c') + except ValueError: + pass + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True -- 2.30.1 (Apple Git-130) 0002-bpo-41100-fix-_decimal-for-arm64-Mac-OS-GH-21228.patch000066400000000000000000000026701476513315000374770ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.17/Python-3.7.17From f2595c038ed7bfd182d9d05d83786106ebd02ca0 Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna <64555057+lawrence-danna-apple@users.noreply.github.com> Date: Tue, 30 Jun 2020 02:15:46 -0700 Subject: [PATCH] bpo-41100: fix _decimal for arm64 Mac OS (GH-21228) Patch by Lawrence Danna. --- .../Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst | 1 + Modules/_decimal/libmpdec/mpdecimal.h | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst new file mode 100644 index 0000000000..d6176d69f0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst @@ -0,0 +1 @@ +add arm64 to the allowable Mac OS arches in mpdecimal.h \ No newline at end of file diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index a67dd9bc12..3e9c8185c3 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif -- 2.37.3 0003-bpo-42351-Avoid-error-when-opening-header-with-non-U.patch000066400000000000000000000016101476513315000414370ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.17/Python-3.7.17From 245427d207ee88a4ba26a66c3de350bcbcc036f2 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 14 Nov 2020 16:07:47 +0100 Subject: [PATCH] bpo-42351: Avoid error when opening header with non-UTF8 encoding (GH-23279) grep_headers_for() would error out when a header contained text that cannot be interpreted as UTF-8. cherry-picked from 7a27c7ed4b by Pedro Fonini --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f211989aac..467362813d 100644 --- a/setup.py +++ b/setup.py @@ -159,7 +159,7 @@ def is_macosx_sdk_path(path): def grep_headers_for(function, headers): for header in headers: - with open(header, 'r') as f: + with open(header, 'r', errors='surrogateescape') as f: if function in f.read(): return True return False -- 2.34.1 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.8/000077500000000000000000000000001476513315000246135ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.8/Python-3.7.8/000077500000000000000000000000001476513315000265475ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054361476513315000416160ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.8/Python-3.7.8From 5b79a7da20953f107657dea5192ed77cc8554ff0 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index c807c98e56..51a7d60f54 100755 --- a/configure +++ b/configure @@ -5183,9 +5183,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 805c0bba08..ede2197cb3 100644 --- a/configure.ac +++ b/configure.ac @@ -724,9 +724,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.29.2.windows.2 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.9/000077500000000000000000000000001476513315000246145ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.9/Python-3.7.9/000077500000000000000000000000001476513315000265515ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054361476513315000416200ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.7.9/Python-3.7.9From 1d6f94126d0af2370ba0e4c7d8befc1c7ecf35d8 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 829dd69bb8..455481bc50 100755 --- a/configure +++ b/configure @@ -5183,9 +5183,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index f1cc8e9bcb..1afcba3307 100644 --- a/configure.ac +++ b/configure.ac @@ -724,9 +724,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.29.2.windows.2 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.10/000077500000000000000000000000001476513315000246655ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.10/Python-3.8.10/000077500000000000000000000000001476513315000266735ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000417370ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.10/Python-3.8.10From 8ced1a904558ff9499673083cf13abf03a76b7d0 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 936f3d4596..c091865aff 100755 --- a/configure +++ b/configure @@ -5160,9 +5160,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index e02cc2c656..de83332dd3 100644 --- a/configure.ac +++ b/configure.ac @@ -719,9 +719,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.11/000077500000000000000000000000001476513315000246665ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.11/Python-3.8.11/000077500000000000000000000000001476513315000266755ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000417410ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.11/Python-3.8.11From 7f35b41fa1e13fb9915fd476eaec2b15e2082c4f Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 936f3d4596..c091865aff 100755 --- a/configure +++ b/configure @@ -5160,9 +5160,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index e02cc2c656..de83332dd3 100644 --- a/configure.ac +++ b/configure.ac @@ -719,9 +719,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.12/000077500000000000000000000000001476513315000246675ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.12/Python-3.8.12/000077500000000000000000000000001476513315000266775ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000417430ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.12/Python-3.8.12From c4379ecd43dab0d2c836787d82bce4f20eed892b Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 936f3d4596..c091865aff 100755 --- a/configure +++ b/configure @@ -5160,9 +5160,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index e02cc2c656..de83332dd3 100644 --- a/configure.ac +++ b/configure.ac @@ -719,9 +719,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.15/000077500000000000000000000000001476513315000246725ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.15/openssl-1.1.1q/000077500000000000000000000000001476513315000271725ustar00rootroot00000000000000openssl_1.1.1q_fix_c_include.patch000066400000000000000000000004101476513315000353640ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.15/openssl-1.1.1qdiff --git a/test/v3ext.c b/test/v3ext.c index 7a240cd706..6cec6f1a9b 100644 --- a/test/v3ext.c +++ b/test/v3ext.c @@ -15,6 +15,7 @@ #include #include "internal/nelem.h" +#include #include "testutil.h" static const char *infile; pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.16/000077500000000000000000000000001476513315000246735ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.16/openssl-1.1.1q/000077500000000000000000000000001476513315000271735ustar00rootroot00000000000000openssl_1.1.1q_fix_c_include.patch000066400000000000000000000004101476513315000353650ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.16/openssl-1.1.1qdiff --git a/test/v3ext.c b/test/v3ext.c index 7a240cd706..6cec6f1a9b 100644 --- a/test/v3ext.c +++ b/test/v3ext.c @@ -15,6 +15,7 @@ #include #include "internal/nelem.h" +#include #include "testutil.h" static const char *infile; pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.4/000077500000000000000000000000001476513315000246105ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.4/Python-3.8.4/000077500000000000000000000000001476513315000265415ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416050ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.4/Python-3.8.4From 3af555f75a53a82fa074572b24cb6516d3db0645 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 96dcd0dcd5..1fb735bf8b 100755 --- a/configure +++ b/configure @@ -5167,9 +5167,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 18a044629a..6d841d928d 100644 --- a/configure.ac +++ b/configure.ac @@ -706,9 +706,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.5/000077500000000000000000000000001476513315000246115ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.5/Python-3.8.5/000077500000000000000000000000001476513315000265435ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416070ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.5/Python-3.8.5From 988821dfd8b087368dfee462d73f518ca4cfbfe0 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 96dcd0dcd5..1fb735bf8b 100755 --- a/configure +++ b/configure @@ -5167,9 +5167,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 18a044629a..6d841d928d 100644 --- a/configure.ac +++ b/configure.ac @@ -706,9 +706,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.6/000077500000000000000000000000001476513315000246125ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.6/Python-3.8.6/000077500000000000000000000000001476513315000265455ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416110ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.6/Python-3.8.6From 7ec2de6bb20a934424df28c6566e6fc3a5eab6d4 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 96dcd0dcd5..1fb735bf8b 100755 --- a/configure +++ b/configure @@ -5167,9 +5167,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 18a044629a..6d841d928d 100644 --- a/configure.ac +++ b/configure.ac @@ -706,9 +706,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.7/000077500000000000000000000000001476513315000246135ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.7/Python-3.8.7/000077500000000000000000000000001476513315000265475ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416130ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.7/Python-3.8.7From 97f07c98cac3d095c5c3f5816e4c7b3fe7b9c251 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index c164d68c4e..dcc0795296 100755 --- a/configure +++ b/configure @@ -5167,9 +5167,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index fc082a3cd2..5c9bee2850 100644 --- a/configure.ac +++ b/configure.ac @@ -706,9 +706,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.8/000077500000000000000000000000001476513315000246145ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.8/Python-3.8.8/000077500000000000000000000000001476513315000265515ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416150ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.8/Python-3.8.8From cb51d8b90c5668e77b9ed8ded562eeaabf518f5c Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index c164d68c4e..dcc0795296 100755 --- a/configure +++ b/configure @@ -5167,9 +5167,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index fc082a3cd2..5c9bee2850 100644 --- a/configure.ac +++ b/configure.ac @@ -706,9 +706,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.9/000077500000000000000000000000001476513315000246155ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.9/Python-3.8.9/000077500000000000000000000000001476513315000265535ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416170ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.8.9/Python-3.8.9From 9d066808637164f1386ece0d3b26b8e4262c4dfd Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index c737256c15..97a371c6da 100755 --- a/configure +++ b/configure @@ -5155,9 +5155,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 040ddfc791..0969bb5b0c 100644 --- a/configure.ac +++ b/configure.ac @@ -713,9 +713,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.0/000077500000000000000000000000001476513315000246055ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.0/Python-3.9.0/000077500000000000000000000000001476513315000265335ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000415770ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.0/Python-3.9.0From b8f6adaf38973076542c54e5d9a4fd7c6665c8f2 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 9e6fd46583..80c3a6589a 100755 --- a/configure +++ b/configure @@ -5193,9 +5193,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index d60f05251a..110318545d 100644 --- a/configure.ac +++ b/configure.ac @@ -718,9 +718,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.1/000077500000000000000000000000001476513315000246065ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.1/Python-3.9.1/000077500000000000000000000000001476513315000265355ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416010ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.1/Python-3.9.1From 8ada29fb655f9803bab4777308c77db8c1f74735 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 2d379feb4b..e36d8d523d 100755 --- a/configure +++ b/configure @@ -5193,9 +5193,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index c968d149c2..a16e475bc2 100644 --- a/configure.ac +++ b/configure.ac @@ -718,9 +718,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.15/000077500000000000000000000000001476513315000246735ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.15/openssl-1.1.1q/000077500000000000000000000000001476513315000271735ustar00rootroot00000000000000openssl_1.1.1q_fix_c_include.patch000066400000000000000000000004101476513315000353650ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.15/openssl-1.1.1qdiff --git a/test/v3ext.c b/test/v3ext.c index 7a240cd706..6cec6f1a9b 100644 --- a/test/v3ext.c +++ b/test/v3ext.c @@ -15,6 +15,7 @@ #include #include "internal/nelem.h" +#include #include "testutil.h" static const char *infile; pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.16/000077500000000000000000000000001476513315000246745ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.16/openssl-1.1.1q/000077500000000000000000000000001476513315000271745ustar00rootroot00000000000000openssl_1.1.1q_fix_c_include.patch000066400000000000000000000004101476513315000353660ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.16/openssl-1.1.1qdiff --git a/test/v3ext.c b/test/v3ext.c index 7a240cd706..6cec6f1a9b 100644 --- a/test/v3ext.c +++ b/test/v3ext.c @@ -15,6 +15,7 @@ #include #include "internal/nelem.h" +#include #include "testutil.h" static const char *infile; pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.2/000077500000000000000000000000001476513315000246075ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.2/Python-3.9.2/000077500000000000000000000000001476513315000265375ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416030ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.2/Python-3.9.2From 9e317124ae4d1f133c18485e83b952360741519d Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 1252335472..0da9fa285e 100755 --- a/configure +++ b/configure @@ -5193,9 +5193,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 972287a9c4..76252ad36c 100644 --- a/configure.ac +++ b/configure.ac @@ -718,9 +718,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.4/000077500000000000000000000000001476513315000246115ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.4/Python-3.9.4/000077500000000000000000000000001476513315000265435ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416070ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.4/Python-3.9.4From d93aaf050384705ac744a4e6cbbab1408e770c0a Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index c7a7291fea..708c9215e4 100755 --- a/configure +++ b/configure @@ -5193,9 +5193,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 45e0af4493..559a40eda9 100644 --- a/configure.ac +++ b/configure.ac @@ -725,9 +725,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.5/000077500000000000000000000000001476513315000246125ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.5/Python-3.9.5/000077500000000000000000000000001476513315000265455ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416110ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.5/Python-3.9.5From 16a65fb399eb8d1a5cfecd597e579a4402b2e4c8 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index 8dcdbf1989..ac03aff210 100755 --- a/configure +++ b/configure @@ -5196,9 +5196,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index b1e4c6ce19..94102dd324 100644 --- a/configure.ac +++ b/configure.ac @@ -727,9 +727,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.6/000077500000000000000000000000001476513315000246135ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.6/Python-3.9.6/000077500000000000000000000000001476513315000265475ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416130ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.6/Python-3.9.6From 9b7f2f9ce024d2cceb90f9a9d939b37090c525e2 Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index ffa61c1dc5..18597d4de8 100755 --- a/configure +++ b/configure @@ -5196,9 +5196,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 8fe5fa5742..577ce9040f 100644 --- a/configure.ac +++ b/configure.ac @@ -727,9 +727,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.7/000077500000000000000000000000001476513315000246145ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.7/Python-3.9.7/000077500000000000000000000000001476513315000265515ustar00rootroot000000000000000001-bpo-45405-Prevent-internal-configure-error-when-runn.patch000066400000000000000000000054241476513315000416150ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/3.9.7/Python-3.9.7From 785de1ab8b4ab8b89d0e62ffd7521b5b2636923a Mon Sep 17 00:00:00 2001 From: David Bohman Date: Tue, 12 Oct 2021 17:10:26 -0700 Subject: [PATCH] bpo-45405: Prevent ``internal configure error`` when running ``configure`` with recent versions of non-Apple clang. (#28845) Change the configure logic to function properly on macOS when the compiler outputs a platform triplet for option --print-multiarch. Co-authored-by: Ned Deily --- .../next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst | 2 ++ configure | 8 +++++--- configure.ac | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst diff --git a/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst new file mode 100644 index 0000000000..a2dc5bcc32 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst @@ -0,0 +1,2 @@ +Prevent ``internal configure error`` when running ``configure`` +with recent versions of non-Apple clang. Patch by David Bohman. diff --git a/configure b/configure index ffa61c1dc5..18597d4de8 100755 --- a/configure +++ b/configure @@ -5196,9 +5196,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } cat >> conftest.c <&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 diff --git a/configure.ac b/configure.ac index 8fe5fa5742..577ce9040f 100644 --- a/configure.ac +++ b/configure.ac @@ -727,9 +727,6 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) - AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c </dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report]) -- 2.36.0 pyenv-2.5.4/plugins/python-build/share/python-build/patches/cinder-3.10-dev/000077500000000000000000000000001476513315000265355ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/cinder-3.10-dev/Cinder-3.10-dev/000077500000000000000000000000001476513315000310745ustar00rootroot00000000000000001-disable-werror.patch000066400000000000000000000021011476513315000352470ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/cinder-3.10-dev/Cinder-3.10-devdiff --git a/configure b/configure index 5c74f00a..8bb51f40 100755 --- a/configure +++ b/configure @@ -7057,8 +7057,8 @@ $as_echo "$ac_cv_extra_warnings" >&6; } if test $ac_cv_extra_warnings = yes then - CFLAGS_NODIST="$CFLAGS_NODIST -Wextra -Werror" - CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Werror -Wno-implicit-fallthrough" + CFLAGS_NODIST="$CFLAGS_NODIST -Wextra" + CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Wno-implicit-fallthrough" fi # Python doesn't violate C99 aliasing rules, but older versions of diff --git a/configure.ac b/configure.ac index c06b992d..6dee6632 100644 --- a/configure.ac +++ b/configure.ac @@ -1622,8 +1622,8 @@ yes) if test $ac_cv_extra_warnings = yes then - CFLAGS_NODIST="$CFLAGS_NODIST -Wextra -Werror" - CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Werror -Wno-implicit-fallthrough" + CFLAGS_NODIST="$CFLAGS_NODIST -Wextra" + CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Wno-implicit-fallthrough" fi # Python doesn't violate C99 aliasing rules, but older versions of pyenv-2.5.4/plugins/python-build/share/python-build/patches/cinder-3.8-dev/000077500000000000000000000000001476513315000264645ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/cinder-3.8-dev/Cinder-3.8-dev/000077500000000000000000000000001476513315000307525ustar00rootroot00000000000000001-disable-werror.patch000066400000000000000000000021011476513315000351250ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/cinder-3.8-dev/Cinder-3.8-devdiff --git a/configure b/configure index 0df332f7..df8143cf 100755 --- a/configure +++ b/configure @@ -6952,8 +6952,8 @@ $as_echo "$ac_cv_extra_warnings" >&6; } if test $ac_cv_extra_warnings = yes then - CFLAGS_NODIST="$CFLAGS_NODIST -Wextra -Werror" - CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Werror -Wno-implicit-fallthrough" + CFLAGS_NODIST="$CFLAGS_NODIST -Wextra" + CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Wno-implicit-fallthrough" fi # Python doesn't violate C99 aliasing rules, but older versions of diff --git a/configure.ac b/configure.ac index f6718e36..0a651e7d 100644 --- a/configure.ac +++ b/configure.ac @@ -1579,8 +1579,8 @@ yes) if test $ac_cv_extra_warnings = yes then - CFLAGS_NODIST="$CFLAGS_NODIST -Wextra -Werror" - CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Werror -Wno-implicit-fallthrough" + CFLAGS_NODIST="$CFLAGS_NODIST -Wextra" + CXXFLAGS_NODIST="$CXXFLAGS_NODIST -Wextra -Wno-implicit-fallthrough" fi # Python doesn't violate C99 aliasing rules, but older versions of pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.2/000077500000000000000000000000001476513315000265725ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.2/stackless-322-export/000077500000000000000000000000001476513315000324115ustar00rootroot00000000000000002_readline63.patch000066400000000000000000000037751476513315000357040ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.2/stackless-322-exportdiff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = 010_ssl_no_ssl3.patch000066400000000000000000000066411476513315000362030ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.2/stackless-322-exportdiff -r -u ../Python-3.2.2.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.2.orig/Lib/ssl.py 2011-09-03 16:16:42.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 07:01:09.947260656 +0000 @@ -62,34 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: - from _ssl import PROTOCOL_SSLv2 -except ImportError: - pass -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" + _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 +except NameError: + _SSLv2_IF_EXISTS = None from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -547,7 +543,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.2.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.2.orig/Modules/_ssl.c 2011-09-03 16:16:46.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:59:12.632993190 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1450,8 +1452,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2136,8 +2140,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.5/000077500000000000000000000000001476513315000265755ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.5/stackless-325-export/000077500000000000000000000000001476513315000324175ustar00rootroot00000000000000002_readline63.patch000066400000000000000000000037751476513315000357120ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.5/stackless-325-exportdiff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c --- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 +++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 @@ -231,8 +231,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; @@ -774,14 +773,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); } @@ -819,7 +826,7 @@ (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { goto error; } - Py_XDECREF(r); r=NULL; + Py_CLEAR(r); if (0) { error: @@ -877,7 +884,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'; @@ -936,12 +943,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 */ completer_word_break_characters = rl_completer_word_break_characters = 010_ssl_no_ssl3.patch000066400000000000000000000065651476513315000362160ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/share/python-build/patches/stackless-3.2.5/stackless-325-exportdiff -r -u ../Python-3.2.6.orig/Lib/ssl.py ./Lib/ssl.py --- ../Python-3.2.6.orig/Lib/ssl.py 2014-10-12 06:52:02.000000000 +0000 +++ ./Lib/ssl.py 2015-12-20 06:40:11.895384463 +0000 @@ -62,35 +62,30 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import _SSLContext, SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED -from _ssl import OP_ALL, OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_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, - ) +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('SSL_ERROR_') +_import_symbols('PROTOCOL_') + from _ssl import HAS_SNI -from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 from _ssl import _OPENSSL_API_VERSION -_PROTOCOL_NAMES = { - PROTOCOL_TLSv1: "TLSv1", - PROTOCOL_SSLv23: "SSLv23", - PROTOCOL_SSLv3: "SSLv3", -} +_PROTOCOL_NAMES = {value: name for name, value in globals().items() if name.startswith('PROTOCOL_')} try: - from _ssl import PROTOCOL_SSLv2 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 -except ImportError: +except NameError: _SSLv2_IF_EXISTS = None -else: - _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" from socket import getnameinfo as _getnameinfo from socket import error as socket_error @@ -557,7 +552,7 @@ d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] return base64.decodebytes(d.encode('ASCII', 'strict')) -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. If 'ca_certs' is specified, validate the server cert against it. diff -r -u ../Python-3.2.6.orig/Modules/_ssl.c ./Modules/_ssl.c --- ../Python-3.2.6.orig/Modules/_ssl.c 2014-10-12 06:52:03.000000000 +0000 +++ ./Modules/_ssl.c 2015-12-20 06:37:10.124337227 +0000 @@ -66,7 +66,9 @@ #ifndef OPENSSL_NO_SSL2 PY_SSL_VERSION_SSL2, #endif +#ifndef OPENSSL_NO_SSL3 PY_SSL_VERSION_SSL3=1, +#endif PY_SSL_VERSION_SSL23, PY_SSL_VERSION_TLS1 }; @@ -1512,8 +1514,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) ctx = SSL_CTX_new(TLSv1_method()); +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) ctx = SSL_CTX_new(SSLv3_method()); +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) ctx = SSL_CTX_new(SSLv2_method()); @@ -2199,8 +2203,10 @@ 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", pyenv-2.5.4/plugins/python-build/share/python-build/pypy-1.5-src000066400000000000000000000005641476513315000245260ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-1.5-src" "https://foss.heptapod.net/pypy/pypy/-/archive/release-1.5/pypy-release-1.5.tar.gz" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-1.6000066400000000000000000000020341476513315000237340ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy-1.6" "https://downloads.python.org/pypy/pypy-1.6-linux.tar.bz2#1266c8b5918d84432b8649535fb5c84f6b977331c242bf45c5944033562ce0b2" "pypy" verify_py27 ensurepip ;; "linux64" ) install_package "pypy-1.6" "https://downloads.python.org/pypy/pypy-1.6-linux64.tar.bz2#95b229c496339a51c4c1e9749bf8dbd11e4f698521803c089b52577be2cdbab8" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-1.6" "https://downloads.python.org/pypy/pypy-1.6-osx64.tar.bz2#147a0e34b3d3a568d5c5926252a2c27e137677b3121cd8daab1d746df2d91e38" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-1.6" "https://downloads.python.org/pypy/pypy-1.6-win32-c.zip#75bf79f08e2d65fce51b14fb8fe0309f136ffc368f977017dc3029baf8426e53" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-1.7000066400000000000000000000021161476513315000237360ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy-1.7" "https://downloads.python.org/pypy/pypy-1.7-linux.tar.bz2#d8f6af52dd5c32ca65de8b1507ef49490188ec131d53a68db6f81201943b4227" "pypy" verify_py27 ensurepip ;; "linux64" ) install_package "pypy-1.7" "https://downloads.python.org/pypy/pypy-1.7-linux64.tar.bz2#cd7ff7a4beaaa78c3b9dbcd567fb0b2d672258051f837e727d4fd636788552ca" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-1.7" "https://downloads.python.org/pypy/pypy-1.7-osx64.tar.bz2#9ad01f6e194b1a3d5f2fa82cd6760b4f9e8a791d5ca28cc156c5f03fe43a08ac" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-1.7" "https://downloads.python.org/pypy/pypy-1.7-win32.zip#1d70faaed00f2f69c634dfbb61b54901df64f093d07d976e035578f812ed31ea" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-1.7-dev' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-1.8000066400000000000000000000021161476513315000237370ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy-1.8" "https://downloads.python.org/pypy/pypy-1.8-linux.tar.bz2#9c293d8540780260718f8fd8dc433c97b614a31b115ccfe2d68df720ad7e55b1" "pypy" verify_py27 ensurepip ;; "linux64" ) install_package "pypy-1.8" "https://downloads.python.org/pypy/pypy-1.8-linux64.tar.bz2#1045606cceb993844a016b76c55aa43a9924bcf526f91a0572fc97cee69b61dc" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-1.8" "https://downloads.python.org/pypy/pypy-1.8-osx64.tar.bz2#b823b6b919082cfb67861b8253313b877618672377164086c0364fa8eaa88b8a" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-1.8" "https://downloads.python.org/pypy/pypy-1.8-win32.zip#a844f54551805d300beffd10b18684e0c08fa080c1b6f7be52bb7fbdfdf38292" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-1.8-dev' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-1.9000066400000000000000000000021161476513315000237400ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy-1.9" "https://downloads.python.org/pypy/pypy-1.9-linux.tar.bz2#1e3f9c3d06f8bbfa0dcb1301b40c298096249a7d7c2b4594b3fb1c3e7b9888f2" "pypy" verify_py27 ensurepip ;; "linux64" ) install_package "pypy-1.9" "https://downloads.python.org/pypy/pypy-1.9-linux64.tar.bz2#4298252515e78c96f4ecd9f25be957411c060ece02d9213eef8d781cf528d18f" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-1.9" "https://downloads.python.org/pypy/pypy-1.9-osx64.tar.bz2#4858f200e32c1070c77c1234ea0e9473eeda98bcd3832c4231f3e46e4e3b74b1" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-1.9" "https://downloads.python.org/pypy/pypy-1.9-win32.zip#54fafe8c69df390d2a460bab022145aaacd2c62c4a569873b22fdc7475f31581" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-1.9-dev' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.0000066400000000000000000000032561476513315000237360ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) require_distro "Ubuntu 10.04" || true install_package "pypy-2.0" "https://downloads.python.org/pypy/pypy-2.0-linux.tar.bz2#275dbbee67eac527a1177403a0386b17d008740f83030544800d87994edd46b9" "pypy" verify_py27 ensurepip ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.0-alpha-arm" "https://downloads.python.org/pypy/pypy-2.0-alpha-arm-armel.tar.bz2#2f8f252d43a15661602a98f93d3292e333423459c5facb43eb2de1bda8eb8495" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.0-alpha-arm" "https://downloads.python.org/pypy/pypy-2.0-alpha-arm-armhf.tar.bz2#00e678e5a226be0692ee18438ace1c91d346256cfab8f32e34a24584d018ca34" "pypy" verify_py27 ensurepip ;; "linux64" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.0" "https://downloads.python.org/pypy/pypy-2.0-linux64.tar.bz2#14c716d53a507eece89606d547456b886dbdfc0ba6e3fb29062fafe86d1b6038" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-2.0" "https://downloads.python.org/pypy/pypy-2.0-osx64.tar.bz2#6d190f32c9dce9d36d4a2bb91faed581a50fb7fa6249eee201dbf5dbc3e3c7d7" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.0" "https://downloads.python.org/pypy/pypy-2.0-win32.zip#2f1d5a0d2cb2fa61902eba5479b100d6d26aab211149b06d5acf64089dd20fe1" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.0-src000066400000000000000000000006321476513315000245160ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.0-src" "https://downloads.python.org/pypy/pypy-2.0-src.tar.bz2#d92dfd418beac915d3efc28f8a2090f3c13a89ec653419deff3d7112c5c111f3" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.0.1000066400000000000000000000022601476513315000240670ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) require_distro "Ubuntu 10.04" || true install_package "pypy-2.0.1" "https://downloads.python.org/pypy/pypy-2.0.1-linux.tar.bz2#548686c5b95b424c79586d9a303ed41fca8eba52bd35c1527f39f5cd8fa35ea9" "pypy" verify_py27 ensurepip ;; "linux64" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.0.1" "https://downloads.python.org/pypy/pypy-2.0.1-linux64.tar.bz2#0eb57e28f2bd5f2a4ad396df322de5adf711eb7d9a2bfeb8be2d9eb9e125c5cc" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-2.0.1" "https://downloads.python.org/pypy/pypy-2.0.1-osx64.tar.bz2#337f2fda672827f2d706fd98e3344a83a8b80675e21b83dd6933da38d110c857" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.0.1" "https://downloads.python.org/pypy/pypy-2.0.1-win32.zip#78fff168c10176a3a7f6a5b97d2048ed87f3cd9a6284b5afa86115baa19af946" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.0.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.0.1-src000066400000000000000000000006361476513315000246610ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.0.1-src" "https://downloads.python.org/pypy/pypy-2.0.1-src.tar.bz2#d1327bc325545939236ac609ec509548a545f97b1c933dedbe42f2482a130aa0" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.0.2000066400000000000000000000022601476513315000240700ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) require_distro "Ubuntu 10.04" || true install_package "pypy-2.0.2" "https://downloads.python.org/pypy/pypy-2.0.2-linux.tar.bz2#3b43c1ac147f6bb11981dd7f8c5458b95d6bdcf1adceb8043c32ca5e8fcab4da" "pypy" verify_py27 ensurepip ;; "linux64" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.0.2" "https://downloads.python.org/pypy/pypy-2.0.2-linux64.tar.bz2#3f9bc07959a2d6058a0c1b84da837e2ec457642fe03ac46123d145c419a7b5cd" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-2.0.2" "https://downloads.python.org/pypy/pypy-2.0.2-osx64.tar.bz2#34f5a7bf22a8bca3b9d79ae3186016c34638669ab19b4af6e38412181c757761" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.0.2" "https://downloads.python.org/pypy/pypy-2.0.2-win32.zip#f3cfa54740076c59e6ef02e1411f62551230df5cd20a247e81b6e589478afe66" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.0.2-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.0.2-src000066400000000000000000000006361476513315000246620ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.0.2-src" "https://downloads.python.org/pypy/pypy-2.0.2-src.tar.bz2#1991c90d6b98e2408b3790d4b57b71ec1c69346328b8321505ce8f6ab4544c3c" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.1000066400000000000000000000036661476513315000237440ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) require_distro "Ubuntu 10.04" || true install_package "pypy-2.1" "https://downloads.python.org/pypy/pypy-2.1-linux.tar.bz2#9c0a38a40d3b4e642a159e51abef2827b33e3f7a254365daa24eae85d840eaf5" "pypy" verify_py27 ensurepip ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.1" "https://downloads.python.org/pypy/pypy-2.1-linux-armel.tar.bz2#15af2d7485c9e4363805ad5b63bf8a67cd9516e7e34c4abb822229a2a41aee1d" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.1" "https://downloads.python.org/pypy/pypy-2.1-linux-armhf-raspbian.tar.bz2#b11c27447051af00928fcc3d1f20f1441c285045a3acb8cfba8721c63ee90df3" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.1" "https://downloads.python.org/pypy/pypy-2.1-linux-armhf-raring.tar.bz2#fbab31154848f309ef72b6e845e289285907eda950f6b632963217c463b5d4de" "pypy" verify_py27 ensurepip fi ;; "linux64" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.1" "https://downloads.python.org/pypy/pypy-2.1-linux64.tar.bz2#80f90bb473635a0249049e87c5cc7cf738e13537c1f1e2857b6345848a3e6d20" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-2.1" "https://downloads.python.org/pypy/pypy-2.1-osx64.tar.bz2#d0d788c6d54bb866ace67a1740133cb5bc62357b5ca4783244097f1f648876f0" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.1" "https://downloads.python.org/pypy/pypy-2.1-win32.zip#c425a35a6c4938e314ad48014816e05c8e5246d770abe135e11a1f9821eecf53" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.1-src000066400000000000000000000006321476513315000245170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.1-src" "https://downloads.python.org/pypy/pypy-2.1-src.tar.bz2#31b3066c9739b117d6bb1bdc485a919dc3b67370ec00437de1b74069943f7f17" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.2000066400000000000000000000040041476513315000237300ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) require_distro "Ubuntu 10.04" || true install_package "pypy-2.2-linux" "https://downloads.python.org/pypy/pypy-2.2-linux.tar.bz2#2bdab70106f6b6d0dd97e42535ce73711c987887fb81fb821801f6fdcd92cdc4" "pypy" verify_py27 ensurepip ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.2-linux-armel" "https://downloads.python.org/pypy/pypy-2.2-linux-armel.tar.bz2#98bfc524f9cf4fd96225f9fc9b0a3a379b8a1a06231b058c51bb875b363f4d75" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.2-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.2-linux-armhf-raspbian.tar.bz2#4856151d9a6dda82edd9d74f872e97243df3676fc25bbf661f976982194caa47" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.2-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.2-linux-armhf-raring.tar.bz2#d64eeeac0a73bd073d8f875210b0e85ed8f0d9655d3f3cc8abb68093a1eb7366" "pypy" verify_py27 ensurepip fi ;; "linux64" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.2-linux64" "https://downloads.python.org/pypy/pypy-2.2-linux64.tar.bz2#1583af0122c6ccb0cb95f8c3732925551ce3ca6d5ea0657e21523f8bf97837a3" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-2.2-osx64" "https://downloads.python.org/pypy/pypy-2.2-osx64.tar.bz2#8aa943de7ec38f13fa836b6964dbf58b45142e4fe7b3fdd5fffe37fdcf974e01" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.2-win32" "https://downloads.python.org/pypy/pypy-2.2-win32.zip#c7a6682cde9034835b337be95415aee21cb4de85049d65a4674efe15d214dfb9" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.2-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.2-src000066400000000000000000000006321476513315000245200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.2-src" "https://downloads.python.org/pypy/pypy-2.2-src.tar.bz2#50fffcb86039e019530a63d656580bc53c173e5f19768bddd8699cd08448e04e" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.2.1000066400000000000000000000040421476513315000240710ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) require_distro "Ubuntu 10.04" || true install_package "pypy-2.2.1-linux" "https://downloads.python.org/pypy/pypy-2.2.1-linux.tar.bz2#4d13483a0e13fc617a7b3d36918ed0e63cf07a7d2827c0a08132b80bc401a55a" "pypy" verify_py27 ensurepip ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.2.1-linux-armel" "https://downloads.python.org/pypy/pypy-2.2.1-linux-armel.tar.bz2#f0a15c7f4d66f152c58d73475314b906dcd3052fc422a8bb8cf88ae1ca0a8b19" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.2.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.2.1-linux-armhf-raspbian.tar.bz2#31d921a8139ec6accf9749df2baff4aed844f6f46eeb37184119ff9c7d6fca55" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.2.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.2.1-linux-armhf-raring.tar.bz2#6f5fe3285a32d1ea8fe148265467f870c6863ae00bc2e279b31b94d2d7f80102" "pypy" verify_py27 ensurepip fi ;; "linux64" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.2.1-linux64" "https://downloads.python.org/pypy/pypy-2.2.1-linux64.tar.bz2#022d611ac62a276890d3e262f4f7cc839fcf9f5e1416df01dcd83ba335eacb16" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-2.2.1-osx64" "https://downloads.python.org/pypy/pypy-2.2.1-osx64.tar.bz2#93e215dcffc9073acf41c63518f47fb59de60386aca4416cfe32190c7a096f29" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.2.1-win32" "https://downloads.python.org/pypy/pypy-2.2.1-win32.zip#d36f4f1b4f146b3a0a623abef9b5a837c08f66e67c90023c724dfdcd8e0133bb" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.2.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.2.1-src000066400000000000000000000006361476513315000246630ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.2.1-src" "https://downloads.python.org/pypy/pypy-2.2.1-src.tar.bz2#252045187e443656a2beb412dadac9296e8fe8db0f75a66ed5265db58c35035f" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.3000066400000000000000000000040041476513315000237310ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) require_distro "Ubuntu 10.04" || true install_package "pypy-2.3-linux" "https://downloads.python.org/pypy/pypy-2.3-linux.tar.bz2#9071072d42344fb37cc588429864b00fff447bd5d33d51008641fe6822823f1b" "pypy" verify_py27 ensurepip ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.3-linux-armel" "https://downloads.python.org/pypy/pypy-2.3-linux-armel.tar.bz2#18394acc9ce356d109cbd92224a9d724a7eb53a0505ce0ec5de36ee20b288a07" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.3-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.3-linux-armhf-raspbian.tar.bz2#92584cfccde188b6a3a850ecf226daa9924788a1da8574c57c10a7551fb127d4" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.3-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.3-linux-armhf-raring.tar.bz2#c8c4a4da406db8ea6dfec074951e1ac150619b0709317ceaafb6bdd837acf96e" "pypy" verify_py27 ensurepip fi ;; "linux64" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.3-linux64" "https://downloads.python.org/pypy/pypy-2.3-linux64.tar.bz2#777dbdd9c67ad1b8906288b01ae76bc9f7b80c95e967836f9a700a1679b80008" "pypy" verify_py27 ensurepip ;; "osx64" ) install_package "pypy-2.3-osx64" "https://downloads.python.org/pypy/pypy-2.3-osx64.tar.bz2#df7ca23ba6c8a63149d910b482be04f069b26dd1f7d0ca15e6342cac94e759d7" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.3-win32" "https://downloads.python.org/pypy/pypy-2.3-win32.zip#72f46afe69281147ad9abc88a7b39d1840e112e626a8be251a5f9f7308c559c7" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.3-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.3-src000066400000000000000000000006441476513315000245240ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-pypy-394146e9bb67" "https://downloads.python.org/pypy/pypy-2.3-src.tar.bz2#be2c271e7f9d7c0059a551ba1501713c00336e551e7f13107f0f34c721d95b0c" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.3.1000066400000000000000000000052621476513315000240770ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-2.3.1-linux" "https://downloads.python.org/pypy/pypy-2.3.1-linux.tar.bz2#3eed698e8533cca7cbd2c2c87fce39dc14baa7dec03f4b082d870131d2a470e4" "pypy" verify_py27 ensurepip else install_package "pypy-2.3.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.3.1-linux_i686-portable.tar.bz2#d8784020f6b8a5812fd8b3f5e1df8afb176fd56c2a929d4408d28d4a925525fa" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.3.1-linux-armel" "https://downloads.python.org/pypy/pypy-2.3.1-linux-armel.tar.bz2#4d71679597b4e971d7e566d9696851dd2ec1a90a04696184d2d0f6b5446d9706" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.3.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.3.1-linux-armhf-raspbian.tar.bz2#74ac62f8cf6dfa0b2f04debd8bbedaed21a12a1a4d4da22856410d06dc0c971c" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.3.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.3.1-linux-armhf-raring.tar.bz2#f65ad31c364e8122f55d77388026cf4750c6a8774af361b79dc9942612c3a8c1" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" 1>/dev/null 2>&1; then install_package "pypy-2.3.1-linux64" "https://downloads.python.org/pypy/pypy-2.3.1-linux64.tar.bz2#dab7940496d96f1f255a8ef402fa96b94444775e373484e057d2fcabc3928b42" "pypy" verify_py27 ensurepip else install_package "pypy-2.3.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.3.1-linux_x86_64-portable.tar.bz2#453bd1291f0372e25ceab6b37b7a8d1756bebd3e708fcce1379ef931ccf9f75a" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-2.3.1-osx64" "https://downloads.python.org/pypy/pypy-2.3.1-osx64.tar.bz2#12e363bf5ea3a508600e043b68c47d4148359ca3d999ee207665bb139f8fbf37" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.3.1-win32" "https://downloads.python.org/pypy/pypy-2.3.1-win32.zip#c8db46d0e5199420dae583f6d2901eb4d4023ced75f035a6e26c232f229f8e0a" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.3.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.3.1-src000066400000000000000000000006461476513315000246650ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-pypy-32f35069a16d" "https://downloads.python.org/pypy/pypy-2.3.1-src.tar.bz2#6b10efab2be5502b475a25181870616e9ff83296b225aa2c7a7ec617c0ff78ef" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.4.0000066400000000000000000000052521476513315000240760ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-2.4.0-linux" "https://downloads.python.org/pypy/pypy-2.4.0-linux.tar.bz2#a24adb366f87ac0eba829d7188a156a7d897e71893689fab06502c3f4152ac0e" "pypy" verify_py27 ensurepip else install_package "pypy-2.4-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.4-linux_i686-portable.tar.bz2#2a330bbeae038c143366982f2104bf4096752f1ec7520fc5608f0527c124b0c2" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.4.0-linux-armel" "https://downloads.python.org/pypy/pypy-2.4.0-linux-armel.tar.bz2#8362d634bf86fbfb3b99b578b13c0a9fd673b2b7580d6d65b4a181934c659ccd" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.4.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.4.0-linux-armhf-raspbian.tar.bz2#5e0ba69b28ffbd5b61b0b6be2a130ab0c80e7d2da289d9530b0b6eac4302d5fa" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.4.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.4.0-linux-armhf-raring.tar.bz2#ddbdd6207c41cf82d8c96d52a2a204a2cdada9301cb577f9b323f22394bb1f0a" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" 1>/dev/null 2>&1; then install_package "pypy-2.4.0-linux64" "https://downloads.python.org/pypy/pypy-2.4.0-linux64.tar.bz2#27cdc0d6e8bce2637678f6d076fc780877dffe1bf9aec9e253f95219af9ed099" "pypy" verify_py27 ensurepip else install_package "pypy-2.4-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.4-linux_x86_64-portable.tar.bz2#b6ed31aff0ebcc9b40554576b1ce789fe4e8c93f7a34cd3983515e1a9a8a45b6" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-2.4.0-osx64" "https://downloads.python.org/pypy/pypy-2.4.0-osx64.tar.bz2#3eb8afdfa42bc9b08b4d3058e21d4ce978a52722fdcfdc67d6c3ee5013a51aaa" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.4.0-win32" "https://downloads.python.org/pypy/pypy-2.4.0-win32.zip#297fa3820a3aa8da291f52b6e2398b23232192b69773638e3d06999d92a2b0aa" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.4.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.4.0-src000066400000000000000000000006461476513315000246650ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-pypy-c6ad44ecf5d8" "https://downloads.python.org/pypy/pypy-2.4.0-src.tar.bz2#38810007aee4885ca0703b566db6594dd7649adaaa287df7a1012f10e067740f" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.5.0000066400000000000000000000053461476513315000241030ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-2.5.0-linux" "https://downloads.python.org/pypy/pypy-2.5.0-linux.tar.bz2#3dfd56a986d25929b4ed9f40a5484f72f1d513cd816cf8aaa683106c3391247c" "pypy" verify_py27 ensurepip else install_package "pypy-2.5-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.5-linux_i686-portable.tar.bz2#6cbe3e1a48900f22c8e4412f82906fba92dd4a165bac5fe6866a2a26383fe3b8" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.5.0-linux-armel" "https://downloads.python.org/pypy/pypy-2.5.0-linux-armel.tar.bz2#277fa6c61d63af96893dafd19e1ffea7b988397c6a0fd66cd99dc0db1029be56" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.5.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.5.0-linux-armhf-raspbian.tar.bz2#6c975e39f0e7d57176b49a987a08862a3cbd9aeb52f47eb4ab148ea334e747fd" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.5.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.5.0-linux-armhf-raring.tar.bz2#1866bf2b8a8144c68d64f2ba982c6c545849913167b4602b762716332ec1fa0b" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-2.5.0-linux64" "https://downloads.python.org/pypy/pypy-2.5.0-linux64.tar.bz2#7764fb6b662407f8709eaa334c542aac9cb6bfe3291ac198dad0980ca129f3c2" "pypy" verify_py27 ensurepip else install_package "pypy-2.5-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.5-linux_x86_64-portable.tar.bz2#26c5a0964b32b09be0282766c27937c843a12b6820ff2d440c6d47a6092837e0" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-2.5.0-osx64" "https://downloads.python.org/pypy/pypy-2.5.0-osx64.tar.bz2#30b392b969b54cde281b07f5c10865a7f2e11a229c46b8af384ca1d3fe8d4e6e" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.5.0-win32" "https://downloads.python.org/pypy/pypy-2.5.0-win32.zip#692391434cf14016d74c6b8bda8f93135ef026f48c8327f3195bfa24d314317d" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.5.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.5.0-src000066400000000000000000000006461476513315000246660ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-pypy-10f1b29a2bd2" "https://downloads.python.org/pypy/pypy-2.5.0-src.tar.bz2#8ff1e131d8fefd79032dd81bcf3fde927e152d3acde5105356f6ffc1aad33f81" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.5.1000066400000000000000000000053561476513315000241050ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-2.5.1-linux" "https://downloads.python.org/pypy/pypy-2.5.1-linux.tar.bz2#c0035a2650cafcb384050a8c476ddc41c9fd40b0c3677fab68026f57c715907a" "pypy" verify_py27 ensurepip else install_package "pypy-2.5.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.5.1-linux_i686-portable.tar.bz2#ed532ddde3332d10faa59af49854cacbca458c597889352e619a87ab22363063" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.5.1-linux-armel" "https://downloads.python.org/pypy/pypy-2.5.1-linux-armel.tar.bz2#91d68551b6e738c1e47aaed869a6df8208abb8c60194a1647c6aa13c7363a61d" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.5.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.5.1-linux-armhf-raspbian.tar.bz2#2b730f86b56fcc72f5bfcfe6a38b5a6fe27654f73b2256e10297373af169a69e" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.5.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.5.1-linux-armhf-raring.tar.bz2#0a5648c18cc604b0a8eaa559549cb332d18358fc551865e9b7ef051b796e4ec7" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-2.5.1-linux64" "https://downloads.python.org/pypy/pypy-2.5.1-linux64.tar.bz2#68e0955dbc80a0d51dfa9a8a76d8623f34920ece1bcbc6d910c2be019a653ba8" "pypy" verify_py27 ensurepip else install_package "pypy-2.5.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.5.1-linux_x86_64-portable.tar.bz2#157bee6349878cf0ef575b0d7bfd6cbb837c00e83b2872c924580ef7bc32c0d7" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-2.5.1-osx64" "https://downloads.python.org/pypy/pypy-2.5.1-osx64.tar.bz2#db40dc8b5e95ef9c3322bd9897099e91555ef34188cf1c3852a92b081142d183" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.5.1-win32" "https://downloads.python.org/pypy/pypy-2.5.1-win32.zip#0dbf90c30e848a91611bea99968a215244db02cf5f649114f10269cf1a15d607" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.5.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.5.1-src000066400000000000000000000006361476513315000246660ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.5.1-src" "https://downloads.python.org/pypy/pypy-2.5.1-src.tar.bz2#ddb3a580b1ee99c5a699172d74be91c36dda9a38946d4731d8c6a63120a3ba2a" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.6.0000066400000000000000000000053461476513315000241040ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-2.6.0-linux" "https://downloads.python.org/pypy/pypy-2.6.0-linux.tar.bz2#6e0b052c40a59bf5a85ee239980bbcab8b031b4c2bc33b99efe1b072977d9910" "pypy" verify_py27 ensurepip else install_package "pypy-2.6-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.6-linux_i686-portable.tar.bz2#e01db0984f7fecd80dadfb1d5f65118e596e3984d12643b4d552e83f92bff549" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.6.0-linux-armel" "https://downloads.python.org/pypy/pypy-2.6.0-linux-armel.tar.bz2#9d0cb9b15283f9c15f83c05293f8bd41d302c96090fd89b778f359df9bc8e619" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.6.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.6.0-linux-armhf-raspbian.tar.bz2#e9f6a16c3e21f38bd571adb33757649ceef3f2ebfdd6d37eea923ce26ea6728c" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.6.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.6.0-linux-armhf-raring.tar.bz2#ccb37a6d861b6dd69cd038337664885dcf91852a2ab6aef480dd7cfbda8de502" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-2.6.0-linux64" "https://downloads.python.org/pypy/pypy-2.6.0-linux64.tar.bz2#f5d2b0e3594cec57e32d3e43a951041ec330e1e962a836be470d591633e51388" "pypy" verify_py27 ensurepip else install_package "pypy-2.6-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.6-linux_x86_64-portable.tar.bz2#97284b66476c5d1b17a62f5017569a0073730928e19f95b49d78d6bc60b69495" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-2.6.0-osx64" "https://downloads.python.org/pypy/pypy-2.6.0-osx64.tar.bz2#77f1d056484e40e0a8e2e2b2b489eedfe785605ef36b144ffce05f7b748f6acd" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.6.0-win32" "https://downloads.python.org/pypy/pypy-2.6.0-win32.zip#de907e7fef7b9b6ceccfc8aa5f4781ee3bc4a49b119d4b22ab5e25eab21c6e8d" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.6.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.6.0-src000066400000000000000000000006361476513315000246660ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.6.0-src" "https://downloads.python.org/pypy/pypy-2.6.0-src.tar.bz2#9bf353f22d25e97a85a6d3766619966055edea1ea1b2218445d683a8ad0399d9" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.6.1000066400000000000000000000057111476513315000241010ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "freebsd64" ) install_package "pypy-2.6.1-freebsd64" "https://downloads.python.org/pypy/pypy-2.6.1-freebsd64.tar.bz2#58118e88ce01c1d48b31d293db40687efbdeba54334eb55ba96de9ecf3c39055" "pypy" verify_py27 ensurepip ;; "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-2.6.1-linux" "https://downloads.python.org/pypy/pypy-2.6.1-linux.tar.bz2#d010b1f1aafdb01beb107f16843985508ce81698260ce830690686d9b2768c88" "pypy" verify_py27 ensurepip else install_package "pypy-2.6.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.6.1-linux_i686-portable.tar.bz2#af8f05790fe21bffdb0619d39f2890e2ecabe47bbd3b21c2c97b9778e4cdb378" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-2.6.1-linux-armel" "https://downloads.python.org/pypy/pypy-2.6.1-linux-armel.tar.bz2#0ca15d289e78a82f927b375a016b7c3246accac5d7eebded4e32a496fb3245ab" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-2.6.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-2.6.1-linux-armhf-raspbian.tar.bz2#13d983805ebc6d9a3627dea3c34898375a4e4e7b6f0171cfbde463c1c04a92aa" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-2.6.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-2.6.1-linux-armhf-raring.tar.bz2#4caa7c1922a212cca4690bfa181cd368760a23b50163b3cbbd6d28401dd5cef5" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-2.6.1-linux64" "https://downloads.python.org/pypy/pypy-2.6.1-linux64.tar.bz2#78a48490d1b2dba8571156c2bf822324ca7dae6f6a56a4bbb96d3e8e8885367b" "pypy" verify_py27 ensurepip else install_package "pypy-2.6.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-2.6.1-linux_x86_64-portable.tar.bz2#ed6a35dee4c982123af716e62975039e18920b599afc4f6a2f3c7c89d0403389" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-2.6.1-osx64" "https://downloads.python.org/pypy/pypy-2.6.1-osx64.tar.bz2#4a78ef76ec38a49a9de40225c337e89486fa09938c600df2bd2dd60110066f65" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-2.6.1-win32" "https://downloads.python.org/pypy/pypy-2.6.1-win32.zip#ccea3940fdedc03e2fcb5acf6badfe6d9c1ae876d5faf0a004e1d94edd7fd856" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-2.6.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-2.6.1-src000066400000000000000000000006361476513315000246670ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-2.6.1-src" "https://downloads.python.org/pypy/pypy-2.6.1-src.tar.bz2#7fddd414c9348c2f899f79ad86adc3fc2b19443855b5243f58487e1f0ac46560" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-4.0.0000066400000000000000000000063401476513315000240730ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-4.0.0-linux" "https://downloads.python.org/pypy/pypy-4.0.0-linux.tar.bz2#365600947775bc73a902a5b1d11f8b96cf49f07cdbbab28bb47240097b4bb4c5" "pypy" verify_py27 ensurepip else install_package "pypy-4.0-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-4.0-linux_i686-portable.tar.bz2#8d6b775a1fdc79db453f80e6b50cd9979d89be3714cd71d3af21bf9f56745610" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-4.0.0-linux-armel" "https://downloads.python.org/pypy/pypy-4.0.0-linux-armel.tar.bz2#612df41fa21c5bc95d8d3575e0d8c09f605de6f0684109222afa561672dd9c7b" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-4.0.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-4.0.0-linux-armhf-raspbian.tar.bz2#fccd9d8436781cbeb8c94e2b37e590303c52e63bc50ed30c4a99a46f022c44bb" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-4.0.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-4.0.0-linux-armhf-raring.tar.bz2#9586d9accdb8faa488a313132047e0dad73c8facc222201380d4935a2ba429b8" "pypy" verify_py27 ensurepip fi ;; "linux-ppc64" ) require_distro "Fedora 20" || true install_package "pypy-4.0.0-ppc64" "https://downloads.python.org/pypy/pypy-4.0.0-ppc64.tar.bz2#729eab7fa84289a094d69fe1607ef97c8e7acc08588db5cd410c9dd26bdd4110" "pypy" verify_py27 ensurepip ;; "linux-ppc64le" ) require_distro "Fedora 21" || true install_package "pypy-4.0.0-ppc64le" "https://downloads.python.org/pypy/pypy-4.0.0-ppc64le.tar.bz2#0ba3c313afb48cba2798c9b46e9a27e24a597f90e092b649b6ac9cd8af4f7765" "pypy" verify_py27 ensurepip ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-4.0.0-linux64" "https://downloads.python.org/pypy/pypy-4.0.0-linux64.tar.bz2#30365cf4fa6cd8e9ff44126f06dcaebefda35c2543ddcf9b9e8516c29cabe726" "pypy" verify_py27 ensurepip else install_package "pypy-4.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-4.0-linux_x86_64-portable.tar.bz2#61fb04eaa823763b8de777e16edc02b09116985586f53c14c6e85d531072a38f" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-4.0.0-osx64" "https://downloads.python.org/pypy/pypy-4.0.0-osx64.tar.bz2#d9e590fe5b9461bbdff56c76636e844ef90a297f82d0d2e204866c8a21759a50" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-4.0.0-win32" "https://downloads.python.org/pypy/pypy-4.0.0-win32.zip#86493202261c62ba5b4b8840b1d0005bc9bf46af4f46d3b9a54ddbe8335da568" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-4.0.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-4.0.0-src000066400000000000000000000006361476513315000246620ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-4.0.0-src" "https://downloads.python.org/pypy/pypy-4.0.0-src.tar.bz2#acff480e44ce92acd057f2e786775af36dc3c2cd12e9efc60a1ac6a562ad7b4d" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-4.0.1000066400000000000000000000061461476513315000241000ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-4.0.1-linux" "https://downloads.python.org/pypy/pypy-4.0.1-linux.tar.bz2#721920fcbb6aefc9a98e868e32b7f4ea5fd68b7f9305d08d0a2595327c9c0611" "pypy" verify_py27 ensurepip else install_package "pypy-4.0.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-4.0.1-linux_i686-portable.tar.bz2#2a1078bf36372b1c2919c11c418860dd7f0d44c92e6772bb36490eaf793b5c47" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-4.0.1-linux-armel" "https://downloads.python.org/pypy/pypy-4.0.1-linux-armel.tar.bz2#d1acdd45ebd34580dd632c63c95211f6bae5e9a8f7a46ffa6f0443286ff9f61b" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-4.0.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-4.0.1-linux-armhf-raspbian.tar.bz2#52eef495f560af59a787b9935367cb5f8c83b48e32a80ec3e7060bffac011ecc" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-4.0.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-4.0.1-linux-armhf-raring.tar.bz2#e67278ce7423aa7bf99a95fd271cb76763eae3106930f4b7de1fba6a70a3f383" "pypy" verify_py27 ensurepip fi ;; "linux-ppc64" ) require_distro "Fedora 20" || true install_package "pypy-4.0.1-ppc64" "https://downloads.python.org/pypy/pypy-4.0.1-ppc64.tar.bz2" "pypy" verify_py27 ensurepip ;; "linux-ppc64le" ) require_distro "Fedora 21" || true install_package "pypy-4.0.1-ppc64le" "https://downloads.python.org/pypy/pypy-4.0.1-ppc64le.tar.bz2" "pypy" verify_py27 ensurepip ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-4.0.1-linux64" "https://downloads.python.org/pypy/pypy-4.0.1-linux64.tar.bz2#0d6090cee59f4b9bab91ddbea76580d0c232b78dae65aaa9e8fa8d4449ba25b4" "pypy" verify_py27 ensurepip else install_package "pypy-4.0.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-4.0.1-linux_x86_64-portable.tar.bz2#b3803f6dd9bbb964f7d322aa4aeb93191ff0ebe573428c1d2014ea26da49ff53" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-4.0.1-osx64" "https://downloads.python.org/pypy/pypy-4.0.1-osx64.tar.bz2#06be1299691f7ea558bf8e3bdf3d20debb8ba03cd7cadf04f2d6cbd5fd084430" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-4.0.1-win32" "https://downloads.python.org/pypy/pypy-4.0.1-win32.zip#9a350a5e6f9b86fb525c6f1300b0c97c021ea8b1e37bfd32a8c4bb7a415d5329" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-4.0.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-4.0.1-src000066400000000000000000000006361476513315000246630ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-4.0.1-src" "https://downloads.python.org/pypy/pypy-4.0.1-src.tar.bz2#29f5aa6ba17b34fd980e85172dfeb4086fdc373ad392b1feff2677d2d8aea23c" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.0.0000066400000000000000000000063321476513315000240750ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-5.0.0-linux" "https://downloads.python.org/pypy/pypy-5.0.0-linux.tar.bz2#a9cc9afa94ff1cde811626a70081c477c9840e7816c0562d1903fd823d222ceb" "pypy" verify_py27 ensurepip else install_package "pypy-5.0-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.0-linux_i686-portable.tar.bz2#316e03afdd2f6212857789933c01f0d41a1665c80d28526c0fb4082b6d3f4f60" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-5.0.0-linux-armel" "https://downloads.python.org/pypy/pypy-5.0.0-linux-armel.tar.bz2#87bd85441b16ecca0d45ba6e9c0e9d26bb7bd8867afbf79d80312cf79b032dc1" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-5.0.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-5.0.0-linux-armhf-raspbian.tar.bz2#8033c0cc39e9f6771688f2eda95c726595f5453b3e73e1cd5f7ebbe3dae1f685" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-5.0.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-5.0.0-linux-armhf-raring.tar.bz2#5bb52cf5db4ae8497c4e03cd8a70e49867e6b93d9f29ad335d030fcd3a375769" "pypy" verify_py27 ensurepip fi ;; "linux-ppc64" ) require_distro "Fedora 20" || true install_package "pypy-5.0.0-ppc64" "https://downloads.python.org/pypy/pypy-5.0.0-ppc64.tar.bz2#334a37e68cb543cf2cbcdd12379b9b770064bb70ba7fd104f1e451cfa10cdda5" "pypy" verify_py27 ensurepip ;; "linux-ppc64le" ) require_distro "Fedora 21" || true install_package "pypy-5.0.0-ppc64le" "https://downloads.python.org/pypy/pypy-5.0.0-ppc64le.tar.bz2#e72fe5c094186f79c997000ddbaa01616def652a8d1338b75a27dfa3755eb86c" "pypy" verify_py27 ensurepip ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-5.0.0-linux64" "https://downloads.python.org/pypy/pypy-5.0.0-linux64.tar.bz2#b9c73be8e3c3b0835df83bdb86335712005240071cdd4dc245ac30b457063ae0" "pypy" verify_py27 ensurepip else install_package "pypy-5.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.0-linux_x86_64-portable.tar.bz2#57c9ea251bf1e7074e14aeecdd1ac8bb2fc53dbf3f90a9613d03e33076a7fa08" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-5.0.0-osx64" "https://downloads.python.org/pypy/pypy-5.0.0-osx64.tar.bz2#45ed8bf799d0fd8eb051cbcc427173fba74dc9c2f6c309d7a3cc90f4917e6a10" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-5.0.0-win32" "https://downloads.python.org/pypy/pypy-5.0.0-win32.zip#c53f0946703f5e4885484c7cde2554a0320537135bf8965e054757c214412438" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-5.0.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.0.0-src000066400000000000000000000006361476513315000246630ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-5.0.0-src" "https://downloads.python.org/pypy/pypy-5.0.0-src.tar.bz2#89027b1b33553b53ff7733dc4838f0a76af23552c0d915d9f6de5875b8d7d4ab" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.0.1000066400000000000000000000053561476513315000241030ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy-5.0.1-linux" "https://downloads.python.org/pypy/pypy-5.0.1-linux.tar.bz2#4b9a294033f917a1674c9ddcb2e7e8d32c4f4351f8216fd1fe23f6d2ad2b1a36" "pypy" verify_py27 ensurepip else install_package "pypy-5.0.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.0.1-linux_i686-portable.tar.bz2#96f1b487655c914a03f56747dfff9c20350175cae01e2911f19b1016442ed6b5" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-5.0.1-linux-armel" "https://downloads.python.org/pypy/pypy-5.0.1-linux-armel.tar.bz2#17d55804b2253acd9de42276d756d4a08b7d1d2da09ef81dd325e14b18a1bcda" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-5.0.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-5.0.1-linux-armhf-raspbian.tar.bz2#338d1c32c1326e6321b222ae357711b38c4a0ffddf020c2a35536b5f69376e28" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-5.0.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-5.0.1-linux-armhf-raring.tar.bz2#1e9146978cc7e7bd30683a518f304a824db7b9b1c6fae5e866eb703684ba3c98" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-5.0.1-linux64" "https://downloads.python.org/pypy/pypy-5.0.1-linux64.tar.bz2#1b1363a48edd1c1b31ca5e995987eda3d460a3404f36c3bb2dd9f52c93eecff5" "pypy" verify_py27 ensurepip else install_package "pypy-5.0.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.0.1-linux_x86_64-portable.tar.bz2#14d65f84fe8228cfa2b8e924364cf4c71e2bc6b13649098fa340baf044606436" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-5.0.1-osx64" "https://downloads.python.org/pypy/pypy-5.0.1-osx64.tar.bz2#6ebdb9d91203f053b38e3c21841c11a72f416dc185f7b3b7c908229df15e924a" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-5.0.1-win32" "https://downloads.python.org/pypy/pypy-5.0.1-win32.zip#c12254d8b1747322736d26e014744a426c6900d232c1799140fbb43f44319730" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-5.0.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.0.1-src000066400000000000000000000006361476513315000246640ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-5.0.1-src" "https://downloads.python.org/pypy/pypy-5.0.1-src.tar.bz2#1573c9284d3ec236c8e6ef3b954753932dff29462c54b5885b761d1ee68b6e05" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.1000066400000000000000000000064341476513315000237430ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-5.1.0-linux" "https://downloads.python.org/pypy/pypy-5.1.0-linux.tar.bz2#2f6c521b5b3c1082eab58be78655aa01ec400d19baeec93c455864a7483b8744" "pypy" verify_py27 ensurepip else install_package "pypy-5.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.1-linux_i686-portable.tar.bz2#893507603a58b8983b69924e60591de39b8f71f70ba36d6e3894db8f7c49c3ea" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-5.1.0-linux-armel" "https://downloads.python.org/pypy/pypy-5.1.0-linux-armel.tar.bz2#ea7017449ff0630431866423220c3688fc55c1a0b80a96af0ae138dd0751b81c" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-5.1.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-5.1.0-linux-armhf-raspbian.tar.bz2#3bfcd251b4f3fd1a09520b2741c647c364d16d50c82b813732a78ac60ccb2b69" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-5.1.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-5.1.0-linux-armhf-raring.tar.bz2#a3e13083591bccc301fb974ff0a6c7e4ab4e611e4b31c0932898b981c794462b" "pypy" verify_py27 ensurepip fi ;; "linux-ppc64" ) require_distro "Fedora 20" || true install_package "pypy-5.1.0-ppc64" "https://downloads.python.org/pypy/pypy-5.1.0-ppc64.tar.bz2#32a31b9ff5174d69f8cf8db711ba2a593fed49b52bdf590bcecd6b727419b6df" "pypy" verify_py27 ensurepip ;; "linux-ppc64le" ) require_distro "Fedora 21" || true install_package "pypy-5.1.0-ppc64le" "https://downloads.python.org/pypy/pypy-5.1.0-ppc64le.tar.bz2#303764f44154f81d7f0753258c89f8a14653658911a16ec2bcfee04055cbfab6" "pypy" verify_py27 ensurepip ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-5.1.0-linux64" "https://downloads.python.org/pypy/pypy-5.1.0-linux64.tar.bz2#0e8913351d043a50740b98cb89d99852b8bd6d11225a41c8abfc0baf7084cbf6" "pypy" verify_py27 ensurepip else install_package "pypy-5.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.1-linux_x86_64-portable.tar.bz2#b2df9b0127457d1c3cc0dc9b8f027a53569ccd3ba5a79012d641e576d9cc003a" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-5.1.0-osx64" "https://downloads.python.org/pypy/pypy-5.1.0-osx64.tar.bz2#7e270c66347158dd794c101c4817f742f760ed805aa0d10abe19ba4a78a75118" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-5.1.0-win32" "https://downloads.python.org/pypy/pypy-5.1.0-win32.zip#044e7f35223a443412b5948740e60e93069a6f8b0a72053cc9d472874bb1b6cc" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-5.1.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.1-src000066400000000000000000000006361476513315000245260ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-5.1.0-src" "https://downloads.python.org/pypy/pypy-5.1.0-src.tar.bz2#16bab9501e942c0704abbf9cd6c4e950c6a76dc226cf1e447ea084916aef4714" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.1.1000066400000000000000000000054521476513315000241010ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-5.1.1-linux" "https://downloads.python.org/pypy/pypy-5.1.1-linux.tar.bz2#7951fd2b87c9e621ec57c932c20da2b8a4a9e87d8daeb9e2b7373f9444219abc" "pypy" verify_py27 ensurepip else install_package "pypy-5.1.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.1.1-linux_i686-portable.tar.bz2#f00faf426f41f9980344d03fd74bb949875c0cf86048ad762dd445f72353eb8f" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy-5.1.1-linux-armel" "https://downloads.python.org/pypy/pypy-5.1.1-linux-armel.tar.bz2#062b33641c24dfc8c6b5af955c2ddf3815b471de0af4bfc343020651b94d13bf" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy-5.1.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy-5.1.1-linux-armhf-raspbian.tar.bz2#fc2a1f8719a7eca5d85d0bdcf499c6ab7409fc32aa312435bcbe66950b47e863" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy-5.1.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy-5.1.1-linux-armhf-raring.tar.bz2#c4bcdabccd15669ea44d1c715cd36b2ca55b340a27b63e1a92ef5ab6eb158a8d" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy-5.1.1-linux64" "https://downloads.python.org/pypy/pypy-5.1.1-linux64.tar.bz2#c852622e8bc81618c137da35fcf57b2349b956c07b6fd853300846e3cefa64fc" "pypy" verify_py27 ensurepip else install_package "pypy-5.1.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.1.1-linux_x86_64-portable.tar.bz2#c0502d8db1cc2b81513cc6047813669b0a561cb20e41d60e179f51fe8657a794" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy-5.1.1-osx64" "https://downloads.python.org/pypy/pypy-5.1.1-osx64.tar.bz2#fe2bbb7cf95eb91b1724029f81e85d1dbb6025a2e9a005cfe7258fe07602f771" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy-5.1.1-win32" "https://downloads.python.org/pypy/pypy-5.1.1-win32.zip#22a780e328ef053e098f2edc2302957ac3119adf7bf11ff23e225931806e7bcd" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-5.1.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.1.1-src000066400000000000000000000006361476513315000246650ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy-5.1.1-src" "https://downloads.python.org/pypy/pypy-5.1.1-src.tar.bz2#ca3d943d7fbd78bb957ee9e5833ada4bb8506ac99a41b7628790e286a65ed2be" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.3000066400000000000000000000000451476513315000237350ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.3" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.3-src000066400000000000000000000000511476513315000245170ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.3-src" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.3.1000066400000000000000000000000471476513315000240760ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.3.1" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.3.1-src000066400000000000000000000000531476513315000246600ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.3.1-src" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.4000066400000000000000000000000451476513315000237360ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.4" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.4-src000066400000000000000000000000511476513315000245200ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.4-src" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.4.1000066400000000000000000000000471476513315000240770ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.4.1" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.4.1-src000066400000000000000000000000531476513315000246610ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.4.1-src" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.6.0000066400000000000000000000000471476513315000241000ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.6.0" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.6.0-src000066400000000000000000000000531476513315000246620ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.6.0-src" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.7.0000066400000000000000000000000471476513315000241010ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.7.0" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.7.0-src000066400000000000000000000000531476513315000246630ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.7.0-src" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.7.1000066400000000000000000000000471476513315000241020ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.7.1" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-5.7.1-src000066400000000000000000000000531476513315000246640ustar00rootroot00000000000000source "${BASH_SOURCE%/*}/pypy2-5.7.2-src" pyenv-2.5.4/plugins/python-build/share/python-build/pypy-c-jit-latest000066400000000000000000000032211476513315000257270ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_nightly_package "pypy-c-jit-latest-linux" "http://buildbot.pypy.org/nightly/trunk/pypy-c-jit-latest-linux.tar.bz2" "pypy-c-jit-*-linux" "pypy" verify_py27 ensurepip ;; "linux-armel" ) install_nightly_package "pypy-c-jit-latest-linux-armel" "http://buildbot.pypy.org/nightly/trunk/pypy-c-jit-latest-linux-armel.tar.bz2" "pypy-c-jit-*-linux-armel" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_nightly_package "pypy-c-jit-latest-linux-armhf-raspbian" "http://buildbot.pypy.org/nightly/trunk/pypy-c-jit-latest-linux-armhf-raspbian.tar.bz2" "pypy-c-jit-*-linux-armhf-raspbian" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 fi ;; "linux64" ) install_nightly_package "pypy-c-jit-latest-linux64" "http://buildbot.pypy.org/nightly/trunk/pypy-c-jit-latest-linux64.tar.bz2" "pypy-c-jit-*-linux64" "pypy" verify_py27 ensurepip ;; "osx64" ) install_nightly_package "pypy-c-jit-latest-osx64" "http://buildbot.pypy.org/nightly/trunk/pypy-c-jit-latest-osx64.tar.bz2" "pypy-c-jit-*-osx64" "pypy" verify_py27 ensurepip ;; "win32" ) install_zip "pypy-c-jit-latest-win32" "http://buildbot.pypy.org/nightly/trunk/pypy-c-jit-latest-win32.zip" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-dev000066400000000000000000000005071476513315000242110ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_hg "pypy-dev" "https://foss.heptapod.net/pypy/pypy" "default" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy-stm-2.3000066400000000000000000000010501476513315000245300ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" || true install_package "pypy-stm-2.3-linux64" "https://downloads.python.org/pypy/pypy-stm-2.3-linux64.tar.bz2#2a489280c679503442219782a87a2d16504a1467cac85ad4be1361a21d1f4d54" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy-STM is not available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy-stm-2.5.1000066400000000000000000000010541476513315000246750ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" || true install_package "pypy-stm-2.5.1-linux64" "https://downloads.python.org/pypy/pypy-stm-2.5.1-linux64.tar.bz2#f280788002f2acf8690b8f9c479bb5b6f0e699ebb42f8bf203da3f70f1a38134" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy-STM is not available for $(pypy_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.3000066400000000000000000000053101476513315000240170ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.3.0-linux" "https://downloads.python.org/pypy/pypy2-v5.3.0-linux32.tar.bz2#bd422fe9d0b7d525d1da3f32855b047bc39ba397d0cf708d8f4f96fe874424f2" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.3-src' to build from source." echo } >&2 exit 1 fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.3.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.3.0-linux-armel.tar.bz2#81b6f589a947d7353bb69408c46d4833d6e9cb501f3c3f0c73bd28d0e3df69aa" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.3.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.3.0-linux-armhf-raspbian.tar.bz2#87b3566b6bbb8bf31c2f0d72bf31d95142fdce004d987812336a59d788005bed" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.3.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.3.0-linux-armhf-raring.tar.bz2#bdb911a87e773a292334061b9c33b907f46d987e403fe94cc627a3b9b1c9cb19" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.3.0-linux64" "https://downloads.python.org/pypy/pypy2-v5.3.0-linux64.tar.bz2#ac336e8877ed676bf87a9a546d5926b6afc4679fa2d3fdf9f3ca56f28ec40588" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.3-src' to build from source." echo } >&2 exit 1 fi ;; "osx64" ) install_package "pypy2-v5.3.0-osx64" "https://downloads.python.org/pypy/pypy2-v5.3.0-osx64.tar.bz2#1b103bacbdcdbbc490660ec0c7b3d99d1ff1cfc2f13cd403db21c27f03d36a1d" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.3.0-win32" "https://downloads.python.org/pypy/pypy2-v5.3.0-win32.zip#32a9e5286fc344165f63b529a9f84e521e9368e717c583488115654676428a20" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy-5.3-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.3-src000066400000000000000000000006421476513315000246070ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.3.0-src" "https://downloads.python.org/pypy/pypy2-v5.3.0-src.tar.bz2#4142eb8f403810bc88a4911792bb5a502e152df95806e33e69050c828cd160d5" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.3.1000066400000000000000000000055111476513315000241610ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.3.1-linux" "https://downloads.python.org/pypy/pypy2-v5.3.1-linux32.tar.bz2#da69f4280b288e524387103eaa3eb4d036965724c3e546da27135c15a77bd2eb" "pypy" verify_py27 ensurepip else install_package "pypy-5.3.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.3.1-linux_i686-portable.tar.bz2#4460dad6376406c221406676208abae989c126115b0f0b2e46c8b8a027bf978a" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.3.1-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.3.1-linux-armel.tar.bz2#0425f2022c35ef7f0bb3d2b854c5bcbe500b1aba511a0d83581ba6c784913961" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.3.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.3.1-linux-armhf-raspbian.tar.bz2#5c93eb3c54fbb2c7d7332f775a096671512e590565e6051196bbc5039c5033b5" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.3.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.3.1-linux-armhf-raring.tar.bz2#b4859496099bde4b17c1e56cc5749dcdcd25b4c68fde1d2ea426de84130e84cc" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.3.1-linux64" "https://downloads.python.org/pypy/pypy2-v5.3.1-linux64.tar.bz2#6d0e8b14875b76b1e77f06a2ee3f1fb5015a645a951ba7a7586289344d4d9c22" "pypy" verify_py27 ensurepip else install_package "pypy-5.3.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.3.1-linux_x86_64-portable.tar.bz2#73014c3840609a62c0984b9c383652097f0a8c52fb74dd9de70d9df2a9a743ff" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.3.1-osx64" "https://downloads.python.org/pypy/pypy2-v5.3.1-osx64.tar.bz2#7a242d7373b4f18c7f5fe6c2fe6f15e2a405d9adf1f4f934c89b875e60ac5def" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.3.1-win32" "https://downloads.python.org/pypy/pypy2-v5.3.1-win32.zip#d83477e2c5f032ebd8c7f47afce03dc8adbeb41a3c74f7db50d9de317dcf3a4a" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.3.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.3.1-src000066400000000000000000000006421476513315000247460ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.3.1-src" "https://downloads.python.org/pypy/pypy2-v5.3.1-src.tar.bz2#31a52bab584abf3a0f0defd1bf9a29131dab08df43885e7eeddfc7dc9b71836e" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.4000066400000000000000000000054771476513315000240360ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.4.0-linux" "https://downloads.python.org/pypy/pypy2-v5.4.0-linux32.tar.bz2#ce581270464b14cdecd13dedb9bd7bf98232f767ac4ac282229a405d8e807af1" "pypy" verify_py27 ensurepip else install_package "pypy-5.4-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.4-linux_i686-portable.tar.bz2#7d7d253f009bb2624f43db6b8caeeb73d29177c4166a643a581a231a099c8689" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.4.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.4.0-linux-armel.tar.bz2#04509044f21bb41ee6d3fafcf637fc0c586c248d4cdae6ac3357606a7b660fdb" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.4.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.4.0-linux-armhf-raspbian.tar.bz2#839b08db89b7e20cb670b8cf02596e033ea0b76fb8336af7bedfbb04b6b502da" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.4.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.4.0-linux-armhf-raring.tar.bz2#95c690bcae6771ebce6cf06c7c2842e0662e007e35162afc963337aa597b471a" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.4.0-linux64" "https://downloads.python.org/pypy/pypy2-v5.4.0-linux64.tar.bz2#bdfea513d59dcd580970cb6f79f3a250d00191fd46b68133d5327e924ca845f8" "pypy" verify_py27 ensurepip else install_package "pypy-5.4-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.4-linux_x86_64-portable.tar.bz2#0a48c7ba7163589b1ade9cfe184f422d1bc9a0f988321b2fdcbd924d90594d9a" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.4.0-osx64" "https://downloads.python.org/pypy/pypy2-v5.4.0-osx64.tar.bz2#3adf21c2bf3432759c99123f21240d71a72aba81d73129e48ef912c34631b723" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.4.0-win32" "https://downloads.python.org/pypy/pypy2-v5.4.0-win32.zip#442c0a917781b6155bf78d2648f1ccd9a36c321926a043f83efcea22a99960b4" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.4-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.4-src000066400000000000000000000006421476513315000246100ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.4.0-src" "https://downloads.python.org/pypy/pypy2-v5.4.0-src.tar.bz2#d9568ebe9a14d0eaefde887d78f3cba63d665e95c0d234bb583932341f55a655" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.4.1000066400000000000000000000055131476513315000241640ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.4.1-linux32" "https://downloads.python.org/pypy/pypy2-v5.4.1-linux32.tar.bz2#6d1e2386ec1e05dffed493aa2d5e6db5cf5de18d7350d44b85f2e45aa5c9a774" "pypy" verify_py27 ensurepip else install_package "pypy-5.4.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.4.1-linux_i686-portable.tar.bz2#190e1df78886f0b2bd700f110b7d312d91cafc84886c5de3c5d55c10fe1a5e75" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.4.1-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.4.1-linux-armel.tar.bz2#a1eb5f672aae62606176305e52a51b060ba974b6181ebefcd2c555ecf5f8614f" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.4.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.4.1-linux-armhf-raspbian.tar.bz2#b38646519ee1a888c68f8f4713c122867b4b36693c8acabb38eb827a9d2d51f9" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.4.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.4.1-linux-armhf-raring.tar.bz2#2c4befc4517adec874155a8b6fa0b9d18388943d4ffe778002072db7783e417a" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.4.1-linux64" "https://downloads.python.org/pypy/pypy2-v5.4.1-linux64.tar.bz2#9c85319778224d7fb0c348f55fe3fada15bb579c5f3870a13ad63b42a737dd72" "pypy" verify_py27 ensurepip else install_package "pypy-5.4.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.4.1-linux_x86_64-portable.tar.bz2#0b59f8e69c7883d454fce6364ab01a5ec6a481ed7f0cc0f1612c3b0c253f7da4" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.4.1-osx64" "https://downloads.python.org/pypy/pypy2-v5.4.1-osx64.tar.bz2#ae9329c8f0a6df431c6224c27c634f998688ac803e8d100cee9a774e6bba38b5" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.4.1-win32" "https://downloads.python.org/pypy/pypy2-v5.4.1-win32.zip#ec729218a820bc2aa2cf1fcacf9de0fee9e04144fe138596198a6b4615505e03" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.4.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.4.1-src000066400000000000000000000006421476513315000247470ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.4.1-src" "https://downloads.python.org/pypy/pypy2-v5.4.1-src.tar.bz2#45dbc50c81498f6f1067201b8fc887074b43b84ee32cc47f15e7db17571e9352" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.6.0000066400000000000000000000055031476513315000241640ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.6.0-linux32" "https://downloads.python.org/pypy/pypy2-v5.6.0-linux32.tar.bz2#5d4ad43aed5c5e147f7e7c84766c729f34f63b714b6d224e912a2bb42dc95d62" "pypy" verify_py27 ensurepip else install_package "pypy-5.6-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.6-linux_i686-portable.tar.bz2#1f220e05ddd4423882794f0e9d3e2dfdecee259d00f1151a52dd244607313399" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.6.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.6.0-linux-armel.tar.bz2#2d1c7820f6368c92bb43a153d2c995f70aa183ff8f1df6916b0d2e57838d8a30" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.6.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.6.0-linux-armhf-raspbian.tar.bz2#0f69c40a38d72254bf12094620bda9d2face758f763cd0d989588642d81eccae" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.6.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.6.0-linux-armhf-raring.tar.bz2#2c430240cecb562102c677598f106aa57899f00cd37f719989e18ed9ca44bd01" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.6.0-linux64" "https://downloads.python.org/pypy/pypy2-v5.6.0-linux64.tar.bz2#aad55328cb0673a60b2633dcc3c36cf452917ac906b577eb3aed5876a7666fca" "pypy" verify_py27 ensurepip else install_package "pypy-5.6-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.6-linux_x86_64-portable.tar.bz2#9bd220bc54000e142bd4929435959305efeef8c832fbe3c907211cc5214095ce" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.6.0-osx64" "https://downloads.python.org/pypy/pypy2-v5.6.0-osx64.tar.bz2#6121f791f440564d3a0a41315e9f2d2d61bc484654acffd85d9e1c6e92b85c36" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.6.0-win32" "https://downloads.python.org/pypy/pypy2-v5.6.0-win32.zip#bab4fa37ef2d32660e291393d955a4e951d5e883abea8bee83be1ec044ddcaac" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.6.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.6.0-src000066400000000000000000000006421476513315000247500ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.6.0-src" "https://downloads.python.org/pypy/pypy2-v5.6.0-src.tar.bz2#7411448045f77eb9e087afdce66fe7eafda1876c9e17aad88cf891f762b608b0" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.7.0000066400000000000000000000050321476513315000241620ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.7.0-linux32" "https://downloads.python.org/pypy/pypy2-v5.7.0-linux32.tar.bz2#aaa55085d11a49cb982b059b4159495d7a4fb9afcfda7bfd680cc0175e9fa33b" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.7.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.7.0-linux-armel.tar.bz2#3bc0d2616cacef9f544e739d4c25a89e16d7aa8c1ccb18c32dceeb021ed73711" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.7.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.7.0-linux-armhf-raspbian.tar.bz2#6328e4767cf20d20a290739db2d1ec769f3c9c360fa9824f61581b3356add79b" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.7.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.7.0-linux-armhf-raring.tar.bz2#413df8097c87a8e79cc46df65837b1d533de83b7cb06ce88b168697807fff696" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.7.0-linux64" "https://downloads.python.org/pypy/pypy2-v5.7.0-linux64.tar.bz2#64bed80e299b09c13296f577a0f52c5d4be9f7c699a390ca6026f967aeff3846" "pypy" verify_py27 ensurepip else install_package "pypy-5.7-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.7-linux_x86_64-portable.tar.bz2#209d2224fe461d85afb201a0c8da18df21219687defadd4550b60420a120bacb" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.7.0-osx64" "https://downloads.python.org/pypy/pypy2-v5.7.0-osx64.tar.bz2#9204aa1b55771a374a3118bb43e498c88caca8c33710eecf3249855c4dd1352a" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.7.0-win32" "https://downloads.python.org/pypy/pypy2-v5.7.0-win32.zip#09c8da3a7e09cea821f9b300c6f4f52f4a571d949d91839ecbce93b84a08d570" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.7.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.7.0-src000066400000000000000000000006421476513315000247510ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.7.0-src" "https://downloads.python.org/pypy/pypy2-v5.7.0-src.tar.bz2#e522ea7ca51b16ee5505f22b86803664b762a263a6d69ba84c359fcf8365ad3e" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.7.1000066400000000000000000000050361476513315000241670ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.7.1-linux32" "https://downloads.python.org/pypy/pypy2-v5.7.1-linux32.tar.bz2#f125a227f8c814ba1698168a639ea6ca59bb69c280529639eed29076d8429a73" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.7.1-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.7.1-linux-armel.tar.bz2#591a4a73cc945a1125848f3615a28559692db8febf677d7087eaef40cb119a8d" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.7.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.7.1-linux-armhf-raspbian.tar.bz2#67544f8c4b284db71cf1af74edef290722f97f82476cbdaff2015fdab244c6ee" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.7.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.7.1-linux-armhf-raring.tar.bz2#c1b1a0968b22c58672f7492dc7900bc85e3bd02c791f219f31401a00ef387207" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.7.1-linux64" "https://downloads.python.org/pypy/pypy2-v5.7.1-linux64.tar.bz2#c4fa3da42156bed4a9d912433b618a141e0c5161d7cc8c328786736ea5d1c2da" "pypy" verify_py27 ensurepip else install_package "pypy-5.7.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.7.1-linux_x86_64-portable.tar.bz2#8a6a194963eb58d582413c4bcdef6119f9f9f117a05032d1fb13192d934510c6" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.7.1-osx64" "https://downloads.python.org/pypy/pypy2-v5.7.1-osx64.tar.bz2#4e99ba356432861534917a9477ace0ccee617bd631512759a530f8383e153a3d" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.7.1-win32" "https://downloads.python.org/pypy/pypy2-v5.7.1-win32.zip#a3ba7c946635236836f8536d8767a0f456b3b9a86876cb5c3173a04522bf451b" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-5.7.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2-5.7.1-src000066400000000000000000000006421476513315000247520ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.7.0-src" "https://downloads.python.org/pypy/pypy2-v5.7.0-src.tar.bz2#e522ea7ca51b16ee5505f22b86803664b762a263a6d69ba84c359fcf8365ad3e" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-5.10.0000066400000000000000000000046521476513315000244100ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.10.0-linux32" "https://downloads.python.org/pypy/pypy2-v5.10.0-linux32.tar.bz2#ee1980467ac8cc9fa9d609f7da93c5282503e59a548781248fe1914a7199d540" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.10.0-linux64" "https://downloads.python.org/pypy/pypy2-v5.10.0-linux64.tar.bz2#da85af9240220179493ad66c857934dc7ea91aef8f168cd293a2d99af8346ee2" "pypy" verify_py27 ensurepip else install_package "pypy-5.10.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.10.0-linux_x86_64-portable.tar.bz2#c966124497ba8728654ce1161fa4c46b035ff30f289be70960f58292e5897cc8" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.10.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.10.0-linux-armel.tar.bz2#6fdd55dd8f674efd06f76edb60a09a03b9b04a5fbc56741f416a94a0b9d2ff91" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.10.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.10.0-linux-armhf-raspbian.tar.bz2#5ec3617bb9a07a0a0b2f3c8fbe69912345da4696cdb0a2aca7889b6f1e74435c" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-5.10.0-src' to build from source." echo } >&2 exit 1 fi ;; "osx64" ) install_package "pypy2-v5.10.0-osx64" "https://downloads.python.org/pypy/pypy2-v5.10.0-osx64.tar.bz2#7e4120f0a83529a6851cbae0ec107dc7085ba8a4aeff4e7bd9da9aadb1ef37a4" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.10.0-win32" "https://downloads.python.org/pypy/pypy2-v5.10.0-win32.zip#350914f9b70404781674f2f188f84d440d9d25da46ed9733b3f98269a510e033" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-5.10.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-5.10.0-src000066400000000000000000000006441476513315000251720ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.10.0-src" "https://downloads.python.org/pypy/pypy2-v5.10.0-src.tar.bz2#1209f2db718e6afda17528baa5138177a14a0938588a7d3e1b7c722c483079a8" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-5.8.0000066400000000000000000000046461476513315000243420ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.8.0-linux32" "https://downloads.python.org/pypy/pypy2-v5.8.0-linux32.tar.bz2#a0b125a5781f7e5ddfc3baca46503b14f4ee6a0e234e8d72bfcf3afdf4120bef" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.8.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.8.0-linux-armel.tar.bz2#28b7fd0cc7418ffc66c71520728e87941be40ebf4b82675c57e25598a2a702b0" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.8.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.8.0-linux-armhf-raspbian.tar.bz2#da58279a0e3706889fc0df06087cea08f8cfd22322139fe9bae73ef9b2d119b7" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.8.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.8.0-linux-armhf-raring.tar.bz2#ddceca9c5c9a456d4bf1beab177660adffbbdf255a922244e1cc05f20318be46" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.8.0-linux64" "https://downloads.python.org/pypy/pypy2-v5.8.0-linux64.tar.bz2#6274292d0e954a2609b15978cde6efa30942ba20aa5d2acbbf1c70c0a54e9b1e" "pypy" verify_py27 ensurepip else install_package "pypy-5.8-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.8-1-linux_x86_64-portable.tar.bz2#52556230af5769c656173ae8a1bdcb2e16aef46e3993ed89f3aec3d220aec862" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.8.0-osx64" "https://downloads.python.org/pypy/pypy2-v5.8.0-osx64.tar.bz2#04b61d1cf13aaca6d0420e854c820b8bd049dc88be16c02542abe8ca26eb075c" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.8.0-win32" "https://downloads.python.org/pypy/pypy2-v5.8.0-win32.zip#43d6217653e5bdc09e3ff8cb56fb52c4eb019429063d80107be4e88eef79ea8d" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-5.8.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-5.8.0-src000066400000000000000000000006421476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.8.0-src" "https://downloads.python.org/pypy/pypy2-v5.8.0-src.tar.bz2#504c2d522595baf8775ae1045a217a2b120732537861d31b889d47c340b58bd5" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-5.9.0000066400000000000000000000046441476513315000243410ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.9.0-linux32" "https://downloads.python.org/pypy/pypy2-v5.9.0-linux32.tar.bz2#a2431a9e4ef879da1a2b56b111013b4a6efb87d4173a37bf650de47834ac5fe4" "pypy" verify_py27 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v5.9.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v5.9.0-linux-armel.tar.bz2#ac0676d91dfb388c799ec5c2845f42018a666423376f52f3ae13d61fd2e6f87d" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v5.9.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v5.9.0-linux-armhf-raspbian.tar.bz2#b8a20042a3f34486a372ff7c751539b2e16859c0a7ea69d5a73af92f0fdcb25a" "pypy" verify_py27 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy2-v5.9.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy2-v5.9.0-linux-armhf-raring.tar.bz2#2597b7b21acdef4f2b81074a594157c9450363c74a17f005548c6b102f93cff4" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v5.9.0-linux64" "https://downloads.python.org/pypy/pypy2-v5.9.0-linux64.tar.bz2#790febd4f09e22d6e2f81154efc7dc4b2feec72712aaf4f82aa91b550abb4b48" "pypy" verify_py27 ensurepip else install_package "pypy-5.9-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-5.9-linux_x86_64-portable.tar.bz2#8d39eb98df3adf7882a7f3551f47b8c7cff47a0e20d6aabc57bb592f155c2616" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v5.9.0-osx64" "https://downloads.python.org/pypy/pypy2-v5.9.0-osx64.tar.bz2#94de50ed80c7f6392ed356c03fd54cdc84858df43ad21e9e971d1b6da0f6b867" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v5.9.0-win32" "https://downloads.python.org/pypy/pypy2-v5.9.0-win32.zip#b61081e24e05b83d8110da1262be19f0094532c6cacc293e318a1c186d926533" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-5.9.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-5.9.0-src000066400000000000000000000006421476513315000251200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v5.9.0-src" "https://downloads.python.org/pypy/pypy2-v5.9.0-src.tar.bz2#de4bf05df47f1349dbac97233d9277bbaf1ef3331663ea2557fd5da3dbcfd0a7" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-6.0.0000066400000000000000000000054011476513315000243210ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v6.0.0-linux32" "https://downloads.python.org/pypy/pypy2-v6.0.0-linux32.tar.bz2#ad1082d4328ae8f32617b14628648583b82b6d29df3aa42b97bd1853c08c4bc8" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.5-6.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy2-v6.0.0-linux-armel" "https://downloads.python.org/pypy/pypy2-v6.0.0-linux-armel.tar.bz2#924ca3f90aa28e8961859508c25752c95253b842318a0f267267ffe90f56a916" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy2-v6.0.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy2-v6.0.0-linux-armhf-raspbian.tar.bz2#6506ce739e31981e5596d3cc2e2c7f5b086ee77bb4d97773082b62b2f283eef2" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-6.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy2-v6.0.0-linux64" "https://downloads.python.org/pypy/pypy2-v6.0.0-linux64.tar.bz2#6cbf942ba7c90f504d8d6a2e45d4244e3bf146c8722d64e9410b85eac6b5af67" "pypy" verify_py27 ensurepip else install_package "pypy-6.0.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-6.0.0-linux_x86_64-portable.tar.bz2#1d2a833680f9432b6b5f6b8503f656535f429eeb6c4bc5408abe5b637bfb9b94" "pypy" verify_py27 ensurepip fi ;; "osx64" ) install_package "pypy2-v6.0.0-osx64" "https://downloads.python.org/pypy/pypy2-v6.0.0-osx64.tar.bz2#d7dc443e6bb9a45212e8d8f5a63e9f6ce23f1d88c50709efea1c75b76c8bc186" "pypy" verify_py27 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy2-v6.0.0-win32" "https://downloads.python.org/pypy/pypy2-v6.0.0-win32.zip#6e2210dae1ae721ed4eb9cba19f15453514b64111511c84f24843c4fdefdaf7f" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2-6.0.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-6.0.0-src000066400000000000000000000006421476513315000251100ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2-v6.0.0-src" "https://downloads.python.org/pypy/pypy2-v6.0.0-src.tar.bz2#6097ec5ee23d0d34d8cd27a1072bed041c8a080ad48731190a03a2223029212d" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.0.0000066400000000000000000000042211476513315000243210ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.0.0-linux32" "https://downloads.python.org/pypy/pypy2.7-v7.0.0-linux32.tar.bz2#446fc208dd77a0048368da830564e6e4180bcd786e524b5369c61785af5c903a" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.0.0-linux64" "https://downloads.python.org/pypy/pypy2.7-v7.0.0-linux64.tar.bz2#971b1909f9fe960c4c643a6940d3f8a60d9a7a2937119535ab0cfaf83498ecd7" "pypy" verify_py27 ensurepip else install_package "pypy-7.0.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-7.0.0-linux_x86_64-portable.tar.bz2#fd71f2bef69c342e492239c2de04a67676bbc08b262d31948bef9e1385a44646" "pypy" verify_py27 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy2.7-v7.0.0-osx64" "https://downloads.python.org/pypy/pypy2.7-v7.0.0-osx64.tar.bz2#e7ecb029d9c7a59388838fc4820a50a2f5bee6536010031060e3dfa882730dc8" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy2.7-7.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy2.7-v7.0.0-win32" "https://downloads.python.org/pypy/pypy2.7-v7.0.0-win32.zip#04477a41194240cd71e485c3f41dec35a787d1b3bc030f9aa59e5e81bcf4118b" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.0.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.0.0-src000066400000000000000000000006461476513315000251150ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.0.0-src" "https://downloads.python.org/pypy/pypy2.7-v7.0.0-src.tar.bz2#f51d8bbfc4e73a8a01820b7871a45d13c59f1399822cdf8a19388c69eb20c18c" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.1.0000066400000000000000000000042211476513315000243220ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.1.0-linux32" "https://downloads.python.org/pypy/pypy2.7-v7.1.0-linux32.tar.bz2#44ec91e8cb01caab289d8763c203f3aaf288d14325a6c42692bd1ac4e870d758" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.1.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.1.0-linux64" "https://downloads.python.org/pypy/pypy2.7-v7.1.0-linux64.tar.bz2#fef176a29a2ef068c00c8098e59dab935ca6e956f089672b3f7351da95a034f5" "pypy" verify_py27 ensurepip else install_package "pypy-7.1.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-7.1.0-linux_x86_64-portable.tar.bz2#ee917d9d72fb6a7d15e31e6c5e470ce561a940f112e99f29ac5dd6b41f512657" "pypy" verify_py27 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy2.7-v7.1.0-osx64" "https://downloads.python.org/pypy/pypy2.7-v7.1.0-osx64.tar.bz2#8be43685ce718b0768387450fc6dc395d60809b778b6146c353ef67826022153" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy2.7-7.1.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy2.7-v7.1.0-win32" "https://downloads.python.org/pypy/pypy2.7-v7.1.0-win32.zip#76658c9ad679d562b8b6a09d006caa666406337b9834ff56db16980c5e549f20" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.1.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.1.0-src000066400000000000000000000006461476513315000251160ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.1.0-src" "https://downloads.python.org/pypy/pypy2.7-v7.1.0-src.tar.bz2#b051a71ea5b4fa27d0a744b28e6054661adfce8904dcc82500716b5edff5ce4b" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.1.1000066400000000000000000000042211476513315000243230ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.1.1-linux32" "https://downloads.python.org/pypy/pypy2.7-v7.1.1-linux32.tar.bz2#41ca390a76ca0d47b8353a0d6a20d5aab5fad8b0bb647b960d8c33e873d18ef5" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.1.1-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.1.1-linux64" "https://downloads.python.org/pypy/pypy2.7-v7.1.1-linux64.tar.bz2#73b09ef0860eb9ad7997af3030b22909806a273d90786d78420926df53279d66" "pypy" verify_py27 ensurepip else install_package "pypy-7.1.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy-7.1.1-linux_x86_64-portable.tar.bz2#d0b226d2dd656c622cee4e3e982225e1b346653823b49f736d8b0ddc06fd0c73" "pypy" verify_py27 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy2.7-v7.1.1-osx64" "https://downloads.python.org/pypy/pypy2.7-v7.1.1-osx64.tar.bz2#31a17294dec96c2191885c776b4ee02112957dc874f7ba03e570537a77b78c35" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy2.7-7.1.1-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy2.7-v7.1.1-win32" "https://downloads.python.org/pypy/pypy2.7-v7.1.1-win32.zip#9c59226311f216a181e70ee7b5aa4d9665a15d00f24ae02acec9af7d96355f63" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.1.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.1.1-src000066400000000000000000000006461476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.1.1-src" "https://downloads.python.org/pypy/pypy2.7-v7.1.1-src.tar.bz2#5f06bede6d71dce8dfbfe797aab26c8e35cb990e16b826914652dc093ad74451" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.2.0000066400000000000000000000041601476513315000243250ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.2.0-linux32" "https://downloads.python.org/pypy/pypy2.7-v7.2.0-linux32.tar.bz2#76d666e5aee54b519d6ec1af4ef0cbdc85f7f9276dd554e97deb026adfd0c936" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.2.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy2.7-v7.2.0-linux64" "https://downloads.python.org/pypy/pypy2.7-v7.2.0-linux64.tar.bz2#05acf28e6a243026ecad933b9361d8f74b41f00818071b76b38c4694cc4c9599" "pypy" verify_py27 ensurepip else install_package "pypy-7.2.0-linux_x86_64-portable" "https://github.com/squeaky-pl/portable-pypy/releases/download/pypy-7.2.0/pypy-7.2.0-linux_x86_64-portable.tar.bz2#a4f301e7629aafe4691ed1c3e9a39cf2158d86524f6ce584e5b850303e77ad81" "pypy" verify_py27 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy2.7-v7.2.0-osx64" "https://downloads.python.org/pypy/pypy2.7-v7.2.0-osx64.tar.bz2#36aa2f2440e762333569118dd0b3d5371d575c40966effa194d116c5453ddb52" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy2.7-7.2.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy2.7-v7.2.0-win32" "https://downloads.python.org/pypy/pypy2.7-v7.2.0-win32.zip#956eeaaaac053e5d0917e77a3d2ad1933ab5561eb3e6e71235780b5aa5fd2bb7" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy2.7-7.2.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.2.0-src000066400000000000000000000006461476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.2.0-src" "https://downloads.python.org/pypy/pypy2.7-v7.2.0-src.tar.bz2#55cb7757784fbe3952102447f65b27d80e6c885a464a7af1a9ce264492439dcc" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.0000066400000000000000000000035421476513315000243310ustar00rootroot00000000000000VERSION='7.3.0' PYVER='2.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#eac1308b7d523003a5f6d20f58406d52ab14611bcec750122ae513a5a35110db" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#f4950a54378ac637da2a6defa52d6ffed96af12fcd5d74e1182fb834883c9826" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#a3dd8d5e2a656849fa344dce4679d854a19bc4a096a0cf62b46a1be127a5d56c" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#ca7b056b243a6221ad04fa7fc8696e36a2fb858396999dcaa31dbbae53c54474" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#a9e3c5c983edba0313a41d3c1ab55b080816c4129e67a6c272c53b9dbcdd97ec" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.0-src000066400000000000000000000006461476513315000251200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.3.0-src" "https://downloads.python.org/pypy/pypy2.7-v7.3.0-src.tar.bz2#b0b25c7f8938ab0fedd8dedf26b9e73c490913b002b484c1b2f19d5844a518de" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.1000066400000000000000000000035421476513315000243320ustar00rootroot00000000000000VERSION='7.3.1' PYVER='2.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#cd155d06cd0956d9de4a16e8a6bdf0722cb45b5bc4bbf805825d393ebd6690ad" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#be74886547df7bf7094096a11fc0a48496779d0d1b71901797b0c816f92caca3" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#094f23ab262e666d8740bf27459a6b1215a628dad9b6c2a88f1ed5c793fab267" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#dfd4651243441d2f8f1c348e9ecc09848642d0c31bb323aa8ac320e5b9f232f0" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#e3c0dfb385d9825dd7723f26576d55d43ed92f1178f2399ab39e9fa11621a47b" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.1-src000066400000000000000000000006341476513315000251160ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.3.1-src" "https://downloads.python.org/pypy/pypy2.7-v7.3.1-src.tar.bz2#fa3771514c8a354969be9bd3b26d65a489c30e28f91d350e4ad2f4081a9c9321" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.10000066400000000000000000000043551476513315000244150ustar00rootroot00000000000000VERSION='7.3.10' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=274342f0e75e99d60ba7a0cfb0e13792e7664163e01450d2f7f2f7825603a0ae linux32_hash=0b17132f62d2a0c3c4572c57eb53820f25611afad71f3d6a310202942baed6e1 linux64_hash=461fb6df524208af9e94ffb16989f628b585bdb4b9e97d81e668899fc3a064a3 osarm64_hash=14b178f005603e3df6db7574b77b9c65ae79feda1a629214cafcb4eee7da679d osx64_hash=188551185ee945d5e42a3a619205d02ac31db77bdd5d98b6c11469e125c3bdb5 s390x_hash=0fac1ec1e05c70941f758be05d40ce7ffe6a42c0416e70b55d40a7523e3e70ae ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.10-src000066400000000000000000000011331476513315000251710ustar00rootroot00000000000000VERSION='7.3.10' PYVER='2.7' # https://www.pypy.org/checksums.html hash=35e2cf4519cb51c4d5ffb4493ee24f0c7f42b4b04944903ca4b33981a04a3bc5 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.11000066400000000000000000000043551476513315000244160ustar00rootroot00000000000000VERSION='7.3.11' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=ea924da1defe9325ef760e288b04f984614e405580f5321eb6a5c8f539bd415a linux32_hash=30fd245fab7068c96a75b9ff1323ac55174c64fc8c4751cceb4b7a9bedc1851e linux64_hash=ba8ed958a905c0735a4cfff2875c25089954dc020e087d982b0ffa5b9da316cd osarm64_hash=cc5696ab4f93cd3481c1e4990b5dedd7ba60ac0602fa1890d368889a6c5bf771 osx64_hash=56deee9c22640f5686c35b9d64fdb1ce3abd044583e4078f0b171ca2fd2a198e s390x_hash=8fe9481c473178e53266983678684a70fe0c42bafc95f1807bf3ef28770316d4 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.11-src000066400000000000000000000011331476513315000251720ustar00rootroot00000000000000VERSION='7.3.11' PYVER='2.7' # https://www.pypy.org/checksums.html hash=1117afb66831da4ea6f39d8d2084787a74689fd0229de0be301f9ed9b255093c ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.12000066400000000000000000000043551476513315000244170ustar00rootroot00000000000000VERSION='7.3.12' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=e04dcb6286a7b4724ec3f0e50d3cc1ba8583301dd1658c06d7f37599e4201c59 linux32_hash=abf3ae477bd0e526ac6dcefe0bfa845e1535aa053342c0d641219bfcde4b9b56 linux64_hash=1a61a2574b79466f606010f2999a2b995bd96cd085f91a78ebdd3d5c2c40e81d osarm64_hash=6b747aa076ae8597e49603c5dec4ca5935a1a0a132d7404a559be96a260d9bf7 osx64_hash=6e89ffdd15537ce4ffce3145b65ee57c2e9c952892bd95b934012d2f009f503b s390x_hash=80c0154d8b0949f9dc6a227c322abbc9590c8ae4c9f11c13bf4022aa38b82064 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.12-src000066400000000000000000000011331476513315000251730ustar00rootroot00000000000000VERSION='7.3.12' PYVER='2.7' # https://www.pypy.org/checksums.html hash=dd61d88da274c2ce2cec77667d4a3df9a652bcc50e26f90991d4dd0af66bccf4 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.13000066400000000000000000000043621476513315000244160ustar00rootroot00000000000000VERSION='7.3.13' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=f1e20f833cc86a097c1f1318069fc17d01c3988678c1438fe27ed567fcb5cfd0 linux32_hash=b727d2e759a740f45bab1e333029d001c4384b52949bcbb4bd2ad7912eae8dad linux64_hash=e41ceb5dc6c4d3a9311ed5f88edfeedbf3e8abbd1ed3c4f2e151a90a5cf4e1d7 osarm64_hash=5b86cf0750abc188a0355380d10c7bab1dec51b610cde23ce78f30a9ef296618 osx64_hash=50769df0091e8fa51c9e4356e0cb204e6f6aa54f502ec5a6e55aef03d0ac5675 s390x_hash=fbb2f3d92831c02b094f17e9609b95a6202d4bdcddae437e380ab14388d4556e ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.13-src000066400000000000000000000011401476513315000251720ustar00rootroot00000000000000VERSION='7.3.13' PYVER='2.7' # https://www.pypy.org/checksums.html hash=976984bc6ca5ec9d37ae4e219b020cbed2751d1a02267033f59ed700ba8cec40 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.14000066400000000000000000000043621476513315000244170ustar00rootroot00000000000000VERSION='7.3.14' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=98468f4cc704a2821401afdd001ebddd367e594e05a70c7767fb86f1364fb21a linux32_hash=b12b4b587da55c8f212ae854e31d29258451e069c65aca596e577644e520bc8b linux64_hash=5938c3c6cddb2e8eb5e435cd3bf61d15134b94a9ac026e26a533bdda6c28a4a0 osarm64_hash=a428e18fcf1470b032fb1f4d75795aeed9216b4314a4c8a3e4d7e13f10f8607e osx64_hash=8af24683621937e65c518fbca1eb34e17ffc741c2ac917e4ca20694348157d78 s390x_hash=5abc6a0f55a89c08def13b5f410b8e7bd706fe1b472f31db01ecbc4d0a49e8dc ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.14-src000066400000000000000000000011401476513315000251730ustar00rootroot00000000000000VERSION='7.3.14' PYVER='2.7' # https://www.pypy.org/checksums.html hash=e096fe67ce2d8d4d5e7dceb84fe1ca854498f00766d31b27d32c8d8833131373 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.15000066400000000000000000000043621476513315000244200ustar00rootroot00000000000000VERSION='7.3.15' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=31b41fca7280636d7818713b7a0fab8f34ece9c82cc88e51d305d43b3e6306d6 linux32_hash=cb5c1da62a8ca31050173c4f6f537bc3ff316026895e5f1897b9bb526babae79 linux64_hash=e857553bdc4f25ba9670a5c173a057a9ff71262d5c5da73a6ddef9d7dc5d4f5e osarm64_hash=618d33df7ac6570d88a58183e3e15c56f63f862968cecbd2ee896eac6255cea6 osx64_hash=72dac262fc63115b6ccd2c3c15e7afd1b2e7a65d7e97265c116246d1cf2cdffd s390x_hash=eb442279ec3f1eb17da296e38b531d3ca50c6418eab208a020bca4646a1dea46 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.15-src000066400000000000000000000011401476513315000251740ustar00rootroot00000000000000VERSION='7.3.15' PYVER='2.7' # https://www.pypy.org/checksums.html hash=a66ddaed39544a35bb7ab7a17dbf673a020c7cb3a614bd2b61a54776888daf2c ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.16000066400000000000000000000043621476513315000244210ustar00rootroot00000000000000VERSION='7.3.16' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=be44e65dd8c00d2388b2580dbe2af6a5179f951a8f4979efc74360f92f3c7e96 linux32_hash=a19712d7a6bd4f6d113e352c5271803c583b5129b76a357d387b1fa85204f8e5 linux64_hash=04b2fceb712d6f811274825b8a471ee392d3d1b53afc83eb3f42439ce00d8e07 osarm64_hash=9cc13f4d6c4096820e1e0ddabb3959f853e45150ce0166a39aa23867e99f0145 osx64_hash=e8744c1cef8b9e4eb2d2b6b368ed19a1c5cde482c7ef750f2d9f0807bb77fd1c s390x_hash=09eb70b932e6aac484cf4b5f2de5845f71589f2cbb53e5ed37a497613b43cd53 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.16-src000066400000000000000000000011401476513315000251750ustar00rootroot00000000000000VERSION='7.3.16' PYVER='2.7' # https://www.pypy.org/checksums.html hash=43721cc0c397f0f3560b325c20c70b11f7c76c27910d3df09f8418cec4f9c2ad ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.17000066400000000000000000000041641476513315000244220ustar00rootroot00000000000000VERSION='7.3.17' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=a8df5ce1650f4756933f8780870c91a0a40e7c9870d74629bf241392bcb5c2e3 linux32_hash=a3aa0867cc837a34941047ece0fbb6ca190410fae6ad35fae4999d03bf178750 linux64_hash=9f3497f87b3372d17e447369e0016a4bec99a6b4d2a59aba774a25bfe4353474 osarm64_hash=8573172db377ee0831bf20492cdee9bac4e0b194e3dfe8bf7c44ee257a824766 osx64_hash=e3e1af1d6ad15e51d8d19ea36e1ac65c4c792314cc8b8dc5cf771ec4353b50f8 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.17-src000066400000000000000000000011401476513315000251760ustar00rootroot00000000000000VERSION='7.3.17' PYVER='2.7' # https://www.pypy.org/checksums.html hash=50e06840f4bbde91448080a4118068a89b8fbcae25ff8da1e2bb1402dc9a0346 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.18000066400000000000000000000041641476513315000244230ustar00rootroot00000000000000VERSION='7.3.18' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=d647cad5be915df65f44277fd051c8d52e708d22838b5cb21b2de033530acc80 linux32_hash=54990fb1ae2266c260a7ce694b84ab91a8d0d298da440cd5695ac671dc5615e2 linux64_hash=1da34354e5fa59400609e94c00ba6feccf5aa575abb26fb6caf9c2ac16100ff4 osarm64_hash=48927b1931a4feadea945f7c988c429b42e9fb6567af3810ab86ad95efbe98bc osx64_hash=db9d2bcc8dbe089b34a19083a11116697e8679acc2c47a2862264429810f666e ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.18-src000066400000000000000000000011401476513315000251770ustar00rootroot00000000000000VERSION='7.3.18' PYVER='2.7' # https://www.pypy.org/checksums.html hash=737435ddfc5afa5b97a7209c87d70d5f1062426c053b9bb8b99a0347cb4891fa ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.19000066400000000000000000000041641476513315000244240ustar00rootroot00000000000000VERSION='7.3.19' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=fe89d4fd4af13f76dfe7315975003518cf176520e3ccec1544a88d174f50910e linux32_hash=cc52df02b6926bd8645c1651cd7f6637ce51c2f352d0fb3c6b9330d15194b409 linux64_hash=d38445508c2eaf14ebb380d9c1ded321c5ebeae31c7e66800173d83cb8ddf423 osarm64_hash=28780e0b908ad6db4b4e096f4237124be79ecc9731946d840d9c8749eb67a759 osx64_hash=6be28d448d8e64fffc586d9b0ae4d09064a83ccaeb5b8060c651c5cd9ae06878 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.19-src000066400000000000000000000011401476513315000252000ustar00rootroot00000000000000VERSION='7.3.19' PYVER='2.7' # https://www.pypy.org/checksums.html hash=8703cdcb01f9f82966dd43b6a6018f140399db51ebb43c125c1f9a215e7bb003 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip_lt21' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.2000066400000000000000000000035421476513315000243330ustar00rootroot00000000000000VERSION='7.3.2' PYVER='2.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#78f30ac17abe3cc077fc2456ef55adb51b052c5126011b2a32bacc858acaca7d" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#8d4f08116a97153a0f739de8981874d544b564cbc87dd064cca33f36c29da13b" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#fce1f06f20ab8bcacb9ac1c33572d6425033de53c3a93fbd5391189cc3e106cb" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#10ca57050793923aea3808b9c8669cf53b7342c90c091244e9660bf797d397c7" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#0fd62265e0421a02432f10a294a712a5e784a8e061375e6d8ea5fd619be1be62" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.2-src000066400000000000000000000006341476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.3.2-src" "https://downloads.python.org/pypy/pypy2.7-v7.3.2-src.tar.bz2#8189480d8350ad6364d05c2b39fd7d832644d4b1cd018f785126389df45928d1" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.3000066400000000000000000000035421476513315000243340ustar00rootroot00000000000000VERSION='7.3.3' PYVER='2.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#bfbc81874b137837a8ba8c517b97de29f5a336f7ec500c52f2bfdbd3580d1703" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#f412b602ccd6912ddee0e7523e0e38f4b2c7a144449c2cad078cffbdb66fd7b1" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#23b145b7cfbaeefb6ee76fc8216c83b652ab1daffac490558718edbbd60082d8" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#f34dc4f5ded1f6bcea05841aa9781b9307329e3ab755607917148568824ae0b0" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#b3e660dae8d25d8278fd6a0db77e76a16ac9a8c1dca22e7e103d39ed696dc69e" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.3-src000066400000000000000000000006341476513315000251200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.3.3-src" "https://downloads.python.org/pypy/pypy2.7-v7.3.3-src.tar.bz2#f63488051ba877fd65840bf8d53822a9c6423d947839023b8720139f4b6e2336" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.4000066400000000000000000000035421476513315000243350ustar00rootroot00000000000000VERSION='7.3.4' PYVER='2.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#653cc3f0612399e494021027f4463d62639dffa4345736a16d0704f3f8a61d5f" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#d3f7b0625e770d9be62201765d7d2316febc463372fba9c93a12969d26ae03dd" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#9e741162ce486b14fbcf5aa377796d26b0529a9352fb602ee8b66c005f8420d1" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#ee7bf42ce843596521e02c763408a5164d18f23c9617f1b8e032ce0675686582" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#1080012d7a3cea65182528259b51d52b1f61a3717377c2d9ba11ef36e06162d5" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.4-src000066400000000000000000000006341476513315000251210ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.3.4-src" "https://downloads.python.org/pypy/pypy2.7-v7.3.4-src.tar.bz2#ff9b928237767efe08ccfba79dae489519b3c768fb6e3af52d39c2a8a1c21ca4" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.5000066400000000000000000000035421476513315000243360ustar00rootroot00000000000000VERSION='7.3.5' PYVER='2.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#35bb5cb1dcca8e05dc58ba0a4b4d54f8b4787f24dfc93f7562f049190e4f0d94" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#4858b347801fba3249ad90af015b3aaec9d57f54d038a58d806a1bd3217d5150" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#8dc2c753f8a94eca1a304d7736c99b439c09274f492eaa3446770c6c32ed010e" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#8b10442ef31c3b28048816f858adde6d6858a190d9367001a49648e669cbebb6" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#0b90eded11ba89a526c4288f17fff7e75000914ac071bd6d67912748ae89d761" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.5-src000066400000000000000000000006341476513315000251220ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.3.5-src" "https://downloads.python.org/pypy/pypy2.7-v7.3.5-src.tar.bz2#c0444fd9873058c1c0d99e13a934e92285cb05992c9968bf523c32bf9bec0a9d" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.6000066400000000000000000000035421476513315000243370ustar00rootroot00000000000000VERSION='7.3.6' PYVER='2.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#7a1145f3a278ffab4da0e2d4c4bd024ab8d67106a502e4bb7f6d67337e7af2b7" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#82127f43fae6ce75d47d6c4539f8c1ea372e9c2dbfa40fae8b58351d522793a4" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#90e9aafb310314938f54678d4d6d7db1163b57c9343e640b447112f74d7f9151" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#9a97de82037d4be1949ec0c35a4d638ba635e8b34948549ae2fa08abd2cbaa8c" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#fcc8f6b3b472a77eaa754951f288fe234b4953bfba845888dd839b9b862cb891" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.6-src000066400000000000000000000006341476513315000251230ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy2.7-v7.3.6-src" "https://downloads.python.org/pypy/pypy2.7-v7.3.6-src.tar.bz2#0114473c8c57169cdcab1a69c60ad7fef7089731fdbe6f46af55060b29be41e4" "pypy_builder" verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.8000066400000000000000000000047201476513315000243400ustar00rootroot00000000000000VERSION='7.3.8' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=ca1f8d3146c83002ee97615906b0930e821297dcce3063b5b28933a0690ef298 linux32_hash=7c84f173bbcd73d0eb10909259d11b5cc253d4c6ea4492e6da8f2532df9b3da5 linux64_hash=1f2e84fb539ffce233c34769d2f11647955f894be091e85419e05f48011e8940 osx64_hash=e5c1ff39ad9916ea23e3deb8012fe42367b6b19284cf13b1a1ea2b2f53a43add s390x_hash=b4ae4e708ba84602d976ad6ae391ef2eef4b1896d831b8f2b2ec69927dd92014 win64_hash=806a29a6c5550b1e669d8870683d3379138d3d43eb1e07bdf26d65a0691265f2 ### end of manual settings - following lines same for every download function pypy_pkg_data { # pypy architecture local ARCH="${1}" local basesrc="pypy${PYVER}-${VERSION}-src" local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local url="${baseurl}-${pkg}.tar.bz2" # use bz2 local hash='' # undefined case "${pkg}" in 'linux-aarch64' ) hash="${aarch64_hash}" url="${baseurl}-aarch64.tar.bz2" # diff url ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' # package name revised url="${baseurl}-${pkg}.tar.bz2" # new url ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command url="${baseurl}-${pkg}.zip" # zip rather than bz2 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 ;; esac # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${url}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.8-src000066400000000000000000000011321476513315000251170ustar00rootroot00000000000000VERSION='7.3.8' PYVER='2.7' # https://www.pypy.org/checksums.html hash=0cdad270c62d3ccc53cc87eeb069a6dc46acaf95521b584624bcd6697d94fa1c ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.9000066400000000000000000000044651476513315000243470ustar00rootroot00000000000000VERSION='7.3.9' PYVER='2.7' # https://www.pypy.org/checksums.html aarch64_hash=aff4e4dbab53448f662cd01acb2251571d60f836d2f48382a7d8da54ca5b3442 linux32_hash=bbf4e7343d43c8217099a9bffeed6a1781f4b5a3e186ed1a0befca65e647aeb9 linux64_hash=172a928b0096a7e00b7d58f523f57300c35c3de7f822491e2a7bc845375c23f8 osx64_hash=77314f5a6b2cc35d24e6f952bef89f5da612b90e4127a8034aed708d9ae483c4 s390x_hash=62481dd3c6472393ca05eb3a0880c96e4f5921747157607dbaa772a7369cab77 win64_hash=ca7b0f4c576995b388cfb4c796e3f6f20b037e5314571bf267daa068a3a2af31 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' # windows is always diff... local hash='' # undefined # select the hash, fix pkg if not match ARCH, windows has ext of zip case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command ext='zip' # zip rather than bz2 ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy2.7-7.3.9-src000066400000000000000000000011321476513315000251200ustar00rootroot00000000000000VERSION='7.3.9' PYVER='2.7' # https://www.pypy.org/checksums.html hash=39b0972956f6548ce5828019dbae12503c32d6cbe91a2becf88d3e42cc52197b ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3-2.3.1000066400000000000000000000053041476513315000241570ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy3-2.3.1-linux" "https://downloads.python.org/pypy/pypy3-2.3.1-linux.tar.bz2#7eddc6826e58c9c89e68b59ec8caf1596b76401517ad8d26ad5e18e0ffa45db9" "pypy" verify_py32 ensurepip else install_package "pypy3-2.3.1-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3-2.3.1-linux_i686-portable.tar.bz2#32a5b3fd4299b13aedf7bc6262eee0f6be9a27744ccf787718553d973ec38abb" "pypy" verify_py32 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy3-2.3.1-linux-armel" "https://downloads.python.org/pypy/pypy3-2.3.1-linux-armel.tar.bz2#37ccdc68df322ba1bafe4177593b4ca293d1fffd60d72f2cf2326d090677f04f" "pypy" verify_py32 ensurepip ;; "linux-armhf") if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy3-2.3.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy3-2.3.1-linux-armhf-raspbian.tar.bz2#033ccca1e3d7156d05ca8accd58b6371e15efc17468bbc3f963625b0c829b66b" "pypy" verify_py32 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy3-2.3.1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy3-2.3.1-linux-armhf-raring.tar.bz2#bd7c19bde4b18158da42534a677f27c9b23855968e7cc3d4178cc9d1620a250a" "pypy" verify_py32 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" 1>/dev/null 2>&1; then install_package "pypy3-2.3.1-linux64" "https://downloads.python.org/pypy/pypy3-2.3.1-linux64.tar.bz2#303df2cf4766db20ec77786d9091dce284fdab01d7173c5828a35e86bc931b99" "pypy" verify_py32 ensurepip else install_package "pypy3-2.3.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3-2.3.1-linux_x86_64-portable.tar.bz2#cb56b5bde8f444d44a0ea9cd475ddeed00aa895f3dcc89fd37577a51439540aa" "pypy" verify_py32 ensurepip fi ;; "osx64" ) install_package "pypy3-2.3.1-osx64" "https://downloads.python.org/pypy/pypy3-2.3.1-osx64.tar.bz2#600d4dad2039b8035582c0e0ce9b71e8236d95db26cff48c84c6d1e0ea6814c1" "pypy" verify_py32 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy3-2.3.1-win32" "https://downloads.python.org/pypy/pypy3-2.3.1-win32.zip#3f3566a39100da9b0fb730ff629352b48c5ae322546fce2c528c58fc0a652b26" "pypy" verify_py32 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3-2.3.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3-2.3.1-src000066400000000000000000000006401476513315000247420ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-2.3.1-src" "https://downloads.python.org/pypy/pypy3-2.3.1-src.tar.bz2#924ca36bf85e02469c71d451c145f9a6d19b905df473a3d1c25179c63ea79d74" "pypy_builder" verify_py32 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3-2.4.0000066400000000000000000000053701476513315000241620ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy3-2.4.0-linux" "https://downloads.python.org/pypy/pypy3-2.4.0-linux.tar.bz2#108fdcccfddb9b2cb2fc3cbca5e6f7902ed3ab74a24c8ae29da7fbdadbab4345" "pypy" verify_py32 ensurepip else install_package "pypy3-2.4-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3-2.4-linux_i686-portable.tar.bz2#7ce050b4928dc58f7e9dd01e3e48c443c85616ca83f4bcc9147f1078d0fd126c" "pypy" verify_py32 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" || true install_package "pypy3-2.4.0-linux-armel" "https://downloads.python.org/pypy/pypy3-2.4.0-linux-armel.tar.bz2#322ddc863006a97d48edc302a73bb0981bbc142951237ed161ca0ca2cd02831f" "pypy" verify_py32 ensurepip ;; "linux-armhf") if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy3-2.4.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy3-2.4.0-linux-armhf-raspbian.tar.bz2#ad8f00255c85bf3c1012d56d5638c7aee12bc9f1ddcdaad35985bbd65a16c602" "pypy" verify_py32 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy3-2.4.0-linux-armhf-raring" "https://downloads.python.org/pypy/pypy3-2.4.0-linux-armhf-raring.tar.bz2#eb41a3ee62741199aeeab818553ded460db991911609acf36e5710f491e5ac0a" "pypy" verify_py32 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" 1>/dev/null 2>&1; then install_package "pypy3-2.4.0-linux64" "https://downloads.python.org/pypy/pypy3-2.4.0-linux64.tar.bz2#24e680b1742af7361107876a421dd793f5ef852dd5f097546f84b1378f7f70cc" "pypy" verify_py32 ensurepip else install_package "pypy3-2.4-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3-2.4-linux_x86_64-portable.tar.bz2#7b3e0f0bc924bd0d68d85c0b566979e74a2b366595db3d81502267367370a5fb" "pypy" verify_py32 ensurepip fi ;; "osx64" ) install_package "pypy3-2.4.0-osx64" "https://downloads.python.org/pypy/pypy3-2.4.0-osx64.tar.bz2#dcd86bdb753e93dbf55e1f3af3ffa97eea328b8b77aa60e92ea2260a6258cedb" "pypy" verify_py32 ensurepip ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy3-2.4.0-win32" "https://downloads.python.org/pypy/pypy3-2.4.0-win32.zip#7ea499993b07405898dee9435836220d8c7b8abfa1b1f760c4a1c04b43945797" "pypy" verify_py32 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3-2.4.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3-2.4.0-src000066400000000000000000000006401476513315000247420ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-2.4.0-src" "https://downloads.python.org/pypy/pypy3-2.4.0-src.tar.bz2#d9ba207d6eecf8a0dc4414e9f4e92db1abd143e8cc6ec4a6bdcac75b29f104f3" "pypy_builder" verify_py32 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.12000066400000000000000000000043561476513315000244730ustar00rootroot00000000000000VERSION='7.3.12' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=26208b5a134d9860a08f74cce60960005758e82dc5f0e3566a48ed863a1f16a1 linux32_hash=811667825ae58ada4b7c3d8bc1b5055b9f9d6a377e51aedfbe0727966603f60e linux64_hash=6c577993160b6f5ee8cab73cd1a807affcefafe2f7441c87bd926c10505e8731 osarm64_hash=45671b1e9437f95ccd790af10dbeb57733cca1ed9661463b727d3c4f5caa7ba0 osx64_hash=dbc15d8570560d5f79366883c24bc42231a92855ac19a0f28cb0adeb11242666 s390x_hash=043c13a585479428b463ab69575a088db74aadc16798d6e677d97f563585fee3 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.12-src000066400000000000000000000011341476513315000252470ustar00rootroot00000000000000VERSION='7.3.12' PYVER='3.10' # https://www.pypy.org/checksums.html hash=86e4e4eacc36046c6182f43018796537fe33a60e1d2a2cc6b8e7f91a5dcb3e42 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.13000066400000000000000000000043561476513315000244740ustar00rootroot00000000000000VERSION='7.3.13' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=ac476f01c9653358404f2e4b52f62307b2f64ccdb8c96dadcbfe355824d81a63 linux32_hash=bfba57eb1f859dd0ad0d6fe841bb12e1256f1f023c7fbca083b536cccbc1233b linux64_hash=54936eeafd9350a5ea0375b036272a260871b9bca82e1b0bb3201deea9f5a442 osarm64_hash=efb3007b7aace0af6e3b30d381088a5bbc175973a6627b6b0d624a2ca2dc63ce osx64_hash=2c6238b9ece7b94ffdfd1d9b50619edef4b169a5c78adcdb691fce6709cd6610 s390x_hash=3c813c7efa6a026b281313b299c186c585155fc164c7538e65d41efdabff87c9 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.13-src000066400000000000000000000011341476513315000252500ustar00rootroot00000000000000VERSION='7.3.13' PYVER='3.10' # https://www.pypy.org/checksums.html hash=4ac1733c19d014d3193c804e7f40ffccbf6924bcaaee1b6089b82b9bf9353a6d ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.14000066400000000000000000000043561476513315000244750ustar00rootroot00000000000000VERSION='7.3.14' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=fbef65dfc69dcd6006d843553d268b331f1b13dfc3938492bd35f0f477b5bcf4 linux32_hash=d37e7c7a03bed5dceca2ab7f821ad7655808cccf6908155f78f0effd811b7f4f linux64_hash=a83879891dc0a6c1504da0954fba1125b21a2591782897231a8168100ea72b94 osarm64_hash=0f09584e21ed8f45e8ff1e3dd1582f077ebdd23a1068298f45006f67bc692632 osx64_hash=31ce62b7ea3b5b5bde68241ae9404f0a68f5a7d0094ef651062b7a64caecfd4e s390x_hash=363e87ad3b6547cc68981c665cf049449bed44cf9e49cabbbcc61df73ea2d40b ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.14-src000066400000000000000000000011341476513315000252510ustar00rootroot00000000000000VERSION='7.3.14' PYVER='3.10' # https://www.pypy.org/checksums.html hash=a3481af466103fa13740db4e27780e0423dcf8626b3340f60d3d3c28fbc11ae0 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.15000066400000000000000000000043561476513315000244760ustar00rootroot00000000000000VERSION='7.3.15' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=52146fccaf64e87e71d178dda8de63c01577ec3923073dc69e1519622bcacb74 linux32_hash=75dd58c9abd8b9d78220373148355bc3119febcf27a2c781d64ad85e7232c4aa linux64_hash=33c584e9a70a71afd0cb7dd8ba9996720b911b3b8ed0156aea298d4487ad22c3 osarm64_hash=d927c5105ea7880f7596fe459183e35cc17c853ef5105678b2ad62a8d000a548 osx64_hash=559b61ba7e7c5a5c23cef5370f1fab47ccdb939ac5d2b42b4bef091abe3f6964 s390x_hash=209e57596381e13c9914d1332f359dc4b78de06576739747eb797bdbf85062b8 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.15-src000066400000000000000000000011341476513315000252520ustar00rootroot00000000000000VERSION='7.3.15' PYVER='3.10' # https://www.pypy.org/checksums.html hash=837622130b36603a1893899bd9f529961a8e4a56c9eb67268d72ddf8920c9579 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.16000066400000000000000000000043561476513315000244770ustar00rootroot00000000000000VERSION='7.3.16' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=fc720999bc5050e1d3706b3b6445e695cf42bfc71ebc7c88ed6bb88828b1d385 linux32_hash=0df48aa780159e879ac89a805d143e4a6cd1b842f98046f5a3f865814bfaa2a4 linux64_hash=404e6180d6caf9258eaab0c02c72018e9aa8eb03ab9094a0ff17ee5e3b265ac1 osarm64_hash=6c003376667a95c7a228544649677b9927b8210d6444b901817aad24b8719b93 osx64_hash=490f2c6ba2489f405444f3b4ad42166da6e2eb73489a9535b206067eaaf21737 s390x_hash=af97efe498a209ba18c7bc7d084164a9907fb3736588b6864955177e19d5216a ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.16-src000066400000000000000000000011341476513315000252530ustar00rootroot00000000000000VERSION='7.3.16' PYVER='3.10' # https://www.pypy.org/checksums.html hash=4a3a3177d0a1f51d59982bb981d1d485403bda3419d5437b9e077f55f59424ff ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.17000066400000000000000000000041601476513315000244710ustar00rootroot00000000000000VERSION='7.3.17' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=53b6e5907df869c49e4eae7aca09fba16d150741097efb245892c1477d2395f2 linux32_hash=e534110e1047da37c1d586c392f74de3424f871d906a2083de6d41f2a8cc9164 linux64_hash=fdcdb9b24f1a7726003586503fdeb264fd68fc37fbfcea022dcfe825a7fee18b osarm64_hash=a050e25e8d686853dd5afc363e55625165825dacfb55f8753d8225ebe417cfd2 osx64_hash=6c2c5f2300d7564e711421b4968abd63243cb96f76e363975dd648ebf4a362ee ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.17-src000066400000000000000000000011341476513315000252540ustar00rootroot00000000000000VERSION='7.3.17' PYVER='3.10' # https://www.pypy.org/checksums.html hash=6ad74bc578e9c6d3a8a1c51503313058e3c58c35df86f7485453c4be6ab24bf7 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.18000066400000000000000000000041601476513315000244720ustar00rootroot00000000000000VERSION='7.3.18' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=e843aecd48eb06b625af67891b99e3440313cfb64c6851fc37df1e5572c8ef9e linux32_hash=34ef09a481254aad0f22bf09fd7c99efb65ffef4f79f5b4222505f55f8d9c22e linux64_hash=834ccd4544bb47112a66977add7e47f30619f74061ae990876bcba95d98c27c5 osarm64_hash=1d47da22bc9f7b5329f97c9c7b3ee0b051252ff1e82ca76999ad2d44758be41f osx64_hash=b7031cbf815b7ba26ed2503b76ee3e73d7322b55f3671219019e8385042e212f ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.18-src000066400000000000000000000011341476513315000252550ustar00rootroot00000000000000VERSION='7.3.18' PYVER='3.10' # https://www.pypy.org/checksums.html hash=08eb70e866987e4abe88ae9f54a98f919df92b595f7cdf4041703e8802b11552 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.19000066400000000000000000000041601476513315000244730ustar00rootroot00000000000000VERSION='7.3.19' PYVER='3.10' # https://www.pypy.org/checksums.html aarch64_hash=af27a589178f11198e2244ab65ca510630ba97c131d7ccc4021eb5bc58de7f57 linux32_hash=e63a4fcad2641ee541e852918befb513abf04ce7070f743a50778cae9f9da80e linux64_hash=c73ac2cc2380ac9227fd297482bf2a3e17a80618ba46db7544d535515321ec1e osarm64_hash=3db8a03fc496164801646844d7f3b12baa0adb3ad9a0b7cb124521bc2e168a36 osx64_hash=2c5e5c2a33ac882551d7f28b98d19d486b8995aa50824a73b4edcc6aeec35c63 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.10-7.3.19-src000066400000000000000000000011341476513315000252560ustar00rootroot00000000000000VERSION='7.3.19' PYVER='3.10' # https://www.pypy.org/checksums.html hash=a7c22930b918f40870865ed8a74147f4434ef84d3d6ca2b3c1eba9355d4929c8 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.11-7.3.18000066400000000000000000000041601476513315000244730ustar00rootroot00000000000000VERSION='7.3.18' PYVER='3.11' # https://www.pypy.org/checksums.html aarch64_hash=95bc3021cb9be2aa766ecb776c215e97ae8c0dda99dd48840b40b5b87d90bc45 linux32_hash=70357a69cdbf4ce449b5743901fcd36208e0a89eadcfb4d2ebdc9b4711a0612c linux64_hash=df5fa534800ff09d990e50ca4fdb02d8a06b9ed948dbcb3a09bea0739ef42de7 osarm64_hash=cc4d6dd621dffd474eb9a2d01e5844d1b6a6f88b404aac2c48a9c267b5370df4 osx64_hash=4f2274ffb4b787fd5b5f15cd61f7fef5a3710bf0ecbd4293bf0251035b468865 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.11-7.3.18-src000066400000000000000000000011341476513315000252560ustar00rootroot00000000000000VERSION='7.3.18' PYVER='3.11' # https://www.pypy.org/checksums.html hash=fbc82b8ff67b942e6fce49980dc0f0f83193b005173f9bddd39d6396fb6b939d ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.11-7.3.19000066400000000000000000000041601476513315000244740ustar00rootroot00000000000000VERSION='7.3.19' PYVER='3.11' # https://www.pypy.org/checksums.html aarch64_hash=13207dbf81ce24e96da760b1b863627b77bb20b1fb4c95191e02a0b72383df74 linux32_hash=5c6cdafd0a0abd14ca59926ed1b6aeb13b228c18b4b46de655aae48734c731ad linux64_hash=9177d9e0bb91b05f921c642cb0ff71a0f3653b5d29a42d40d6a078c15b75720f osarm64_hash=7704e0d5302e53920d32dcfe9afeeb10436d4c94233e8830cf603aa955a861c1 osx64_hash=a2439f9d30dfdae96a5e9101c7dc54a8a68b56c9d7314ea399b0a25d3e87ebb2 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.11-7.3.19-src000066400000000000000000000011341476513315000252570ustar00rootroot00000000000000VERSION='7.3.19' PYVER='3.11' # https://www.pypy.org/checksums.html hash=4817c044bb469a3274e60aa3645770f81eb4f9166ea7fdc4e6c351345554c8d8 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.3-5.2-alpha1000066400000000000000000000053221476513315000253270ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 10.04" 1>/dev/null 2>&1; then install_package "pypy3.3-v5.2.0-alpha1-linux" "https://downloads.python.org/pypy/pypy3.3-v5.2.0-alpha1-linux32.tar.bz2#351aec101bdedddae7ea1b63845a5654b1a95fc9393894ef84a66749f6945f17" "pypy" verify_py33 ensurepip else install_package "pypy3.3-5.2-alpha-20160602-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.3-5.2-alpha-20160602-linux_i686-portable.tar.bz2#6f2412167c63d6711b41062a23794828f95a75400082a6957595867762cb170d" "pypy" verify_py33 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy3.3-v5.2.0-alpha1-linux-armel" "https://downloads.python.org/pypy/pypy3.3-v5.2.0-alpha1-linux-armel.tar.bz2#ac83e632213f078ab60045e6ad0564b146d65dcd9a52c130026fab6dd85bf2dc" "pypy" verify_py33 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy3.3-v5.2.0-alpha1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy3.3-v5.2.0-alpha1-linux-armhf-raspbian.tar.bz2#ba9a5d0cbac1c622363315b30df288ab2cf8fcccf7e2882bf5946115dbfa657e" "pypy" verify_py33 ensurepip else require_distro "Ubuntu 13.04" || true install_package "pypy3.3-v5.2.0-alpha1-linux-armhf-raring" "https://downloads.python.org/pypy/pypy3.3-v5.2.0-alpha1-linux-armhf-raring.tar.bz2#b4d847d33c1bf9b3956d1d17b9e37505eb32f68e341c9333a74a82010a63e799" "pypy" verify_py33 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3.3-v5.2.0-alpha1-linux64" "https://downloads.python.org/pypy/pypy3.3-v5.2.0-alpha1-linux64.tar.bz2#f5e66ab24267d6ddf662d07c512d06c10ebc732ae62093dabbd775ac63b9060a" "pypy" verify_py33 ensurepip else install_package "pypy3.3-5.2-alpha-20160602-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.3-5.2-alpha-20160602-linux_x86_64-portable.tar.bz2#4d1e7dd727448c1b2caa90c943713c0aa10b32e9d977c2c3b348835f515a3ad4" "pypy" verify_py33 ensurepip fi ;; "osx64" ) install_package "pypy3.3-v5.2.0-alpha1-osx64" "https://downloads.python.org/pypy/pypy3.3-v5.2.0-alpha1-osx64.tar.bz2#abaceab5d2790f49e04e0d80669283da41f94b77cf483b30ac0de48d3c19f304" "pypy" verify_py33 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.3-5.2-alpha1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.3-5.2-alpha1-src000066400000000000000000000006641476513315000261200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3.3-v5.2.0-alpha1-src" "https://downloads.python.org/pypy/pypy3.3-v5.2.0-alpha1-src.tar.bz2#344c2f088c82ea1274964bb0505ab80d3f9e538cc03f91aa109325ddbaa61426" "pypy_builder" verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.3-5.5-alpha000066400000000000000000000052641476513315000252560ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3.3-v5.5.0-linux32" "https://downloads.python.org/pypy/pypy3.3-v5.5.0-alpha-linux32.tar.bz2#966ee7951ad497ac907e01554fe48da77cc64a5e35a1307477c2f78652eba622" "pypy" verify_py33 ensurepip else install_package "pypy3.3-5.5-alpha-20161014-linux_i686-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.3-5.5-alpha-20161014-linux_i686-portable.tar.bz2#af32420f368bc3276d15a5cf4e2e8cb0bef16f711ee830a636ad117e55c3268f" "pypy" verify_py33 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy3-v5.5.0-linux-armel" "https://downloads.python.org/pypy/pypy3.3-v5.5.0-alpha-linux-armel.tar.bz2#9f081041867f434f18456f936befbacd9f40c0ede24137cbf80f9f45ff37b69f" "pypy" verify_py33 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy3-v5.5.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy3.3-v5.5.0-alpha-linux-armhf-raspbian.tar.bz2#d8e94c834307081d5c4be863fab935e34df360a77b06e8bc833624c4b712b2aa" "pypy" verify_py33 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.3-5.5-alpha-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.5.0-linux64" "https://downloads.python.org/pypy/pypy3.3-v5.5.0-alpha-linux64.tar.bz2#41ef7c25fd04eeb20deaa83c5d88c10aef2bbc8bcfd9e53e7cc61136220861cc" "pypy" verify_py33 ensurepip else install_package "pypy3.3-5.5-alpha-20161013-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.3-5.5-alpha-20161013-linux_x86_64-portable.tar.bz2#1cd7a00da376b2db29b3e1f3e9bb7a77afc8ad988b3f13fd0805f37b23960a34" "pypy" verify_py33 ensurepip fi ;; "osx64" ) install_package "pypy3-v5.5.0-osx64" "https://downloads.python.org/pypy/pypy3.3-v5.5.0-alpha-osx64.tar.bz2#fa45f861a6c40ae44f99ec94c521adfb6b64b0c9c0b6fc6e9df018241a648986" "pypy" verify_py33 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.3-5.5-alpha-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.3-5.5-alpha-src000066400000000000000000000006521476513315000260370ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v5.5.0-src" "https://downloads.python.org/pypy/pypy3.3-v5.5.0-alpha-src.tar.bz2#d5591c34d77253e9ed57d182b6f49585b95f7c09c3e121f0e8630e5a7e75ab5f" "pypy_builder" verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.10.0000066400000000000000000000052611476513315000244040ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.10.0-linux32" "https://downloads.python.org/pypy/pypy3-v5.10.0-linux32.tar.bz2#529bc3b11edbdcdd676d90c805b8f607f6eedd5f0ec457a31bbe09c03f5bebfe" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.10.0-linux64" "https://downloads.python.org/pypy/pypy3-v5.10.0-linux64.tar.bz2#aa4fb52fb858d973dd838dcf8d74f30705e5afdf1150acb8e056eb99353dfe77" "pypy" verify_py27 ensurepip else install_package "pypy3.5-5.10.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-5.10.0-linux_x86_64-portable.tar.bz2#d03f81f26e5e67d808569c5c69d56ceb007df78f7e36ab1c50da4d9096cebde0" "pypy" verify_py35 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy3-v5.10.0-linux-armel" "https://downloads.python.org/pypy/pypy3-v5.10.0-linux-armel.tar.bz2#c2cc529befb3e1f2ef8bd4e96af4a823c52ef2d180b0b3bd87511c5b47d59210" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy3-v5.10.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy3-v5.10.0-linux-armhf-raspbian.tar.bz2#4e902e0e79f62f2a9049c1c71310ff4fc801011bec4d25082edb5c537d3f15c9" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.10.0-src' to build from source." echo } >&2 exit 1 fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3-v5.10.0-osx64" "https://downloads.python.org/pypy/pypy3-v5.10.0-osx64.tar.bz2#7e389a103f560de1eead1271ec3a2df9424c6ccffe7cbae8e95e6e81ae811a16" "pypy" verify_py27 ensurepip else install_package "pypy3-v5.10.0-osx64-2" "https://downloads.python.org/pypy/pypy3-v5.10.0-osx64-2.tar.bz2#f5ced20934fff78e55c72aa82a4703954349a5a8099b94e77d74b96a94326a2c" "pypy" verify_py27 ensurepip fi ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy3-v5.10.0-win32" "https://downloads.python.org/pypy/pypy3-v5.10.0-win32.zip#2d93bf2bd7b1d031b96331d3fde6cacdda95673ce6875d6d1669c4c0ea2a52bc" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.10.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.10.0-src000066400000000000000000000006441476513315000251710ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v5.10.0-src" "https://downloads.python.org/pypy/pypy3-v5.10.0-src.tar.bz2#a6e4cffde71e3f08b6e1befa5c0352a9bcc5f4e9f5cbf395001e0763a1a0d9e3" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.10.1000066400000000000000000000056541476513315000244130ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.10.1-linux32" "https://downloads.python.org/pypy/pypy3-v5.10.1-linux32.tar.bz2#a6ceca9ee5dc511de7902164464b88311fec9366c5673d0c00528eda862bbe54" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.10.1-linux64" "https://downloads.python.org/pypy/pypy3-v5.10.1-linux64.tar.bz2#75a276e1ee1863967bbacb70c5bff636de200768c0ec90e72f7ec17aace0aefe" "pypy" verify_py27 ensurepip else install_package "pypy3.5-5.10.1-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-5.10.1-linux_x86_64-portable.tar.bz2#b7c7b0e0905208ce8a8061b1a0ae136a702e5218d0d350cb5216ad5a7c20d12e" "pypy" verify_py35 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy3-v5.10.1-linux-armel" "https://downloads.python.org/pypy/pypy3-v5.10.1-linux-armel.tar.bz2#5065e9ad958d06b9612ba974f43997d20168d4245c054dd43270e4b458782282" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy3-v5.10.1-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy3-v5.10.1-linux-armhf-raspbian.tar.bz2#203dd595fbad7055340b23326f20c85b0d6c11c4877e3559a437611fc2ac40c2" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.10.1-src' to build from source." echo } >&2 exit 1 fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3-v5.10.1-osx64" "https://downloads.python.org/pypy/pypy3-v5.10.1-osx64.tar.bz2#52f006611513c995fdebba6e72d394186d4085460408cbbe086e5467bf3fb9b6" "pypy" verify_py27 ensurepip else # install_package "pypy3-v5.10.1-osx64-2" "https://downloads.python.org/pypy/pypy3-v5.10.1-osx64.tar.bz2#52f006611513c995fdebba6e72d394186d4085460408cbbe086e5467bf3fb9b6" "pypy" verify_py27 ensurepip { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.5-5.10.1-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy3-v5.10.1-win32" "https://downloads.python.org/pypy/pypy3-v5.10.1-win32.zip#4edf4f021689a529e5a631c5cca72a1a9dc19a6ea2091e64289cdd5b60eaf929" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.10.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.10.1-src000066400000000000000000000006441476513315000251720ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v5.10.1-src" "https://downloads.python.org/pypy/pypy3-v5.10.1-src.tar.bz2#f5548e06e2fc0c24ec8b6e3c5b09f90081818f7caa3e436dc312592611724713" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.7-beta000066400000000000000000000016661476513315000251120ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.7.0-linux64" "https://downloads.python.org/pypy/pypy3-v5.7.0-linux64.tar.bz2#921894884a647220a712ecdaad516d9c22fbadf3b4bb3a5db8f3635c60eabc7b" "pypy" verify_py35 ensurepip else install_package "pypy3.5-5.7-beta-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-5.7-beta-linux_x86_64-portable.tar.bz2#d289ff7c32fd4263c3889994c8191c626891513e8ab60a65ba41a58b331db92c" "pypy" verify_py35 ensurepip fi ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.7-beta-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.7-beta-src000066400000000000000000000006421476513315000256700ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v5.7.0-src" "https://downloads.python.org/pypy/pypy3-v5.7.0-src.tar.bz2#f0f563b74f8b82ec33b022393219b93cc0d81e9f9500614fe8417b67a52e9569" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.7.1-beta000066400000000000000000000016721476513315000252460ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 12.10" "Ubuntu 13.04" "Ubuntu 13.10" "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.7.1-linux64" "https://downloads.python.org/pypy/pypy3-v5.7.1-linux64.tar.bz2#2abaa54d88c9b70b64c37083e7e430a1d3a8f78f8de92e484a988b7aca1e50a7" "pypy" verify_py35 ensurepip else install_package "pypy3.5-5.7.1-beta-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-5.7.1-beta-linux_x86_64-portable.tar.bz2#3d1b02f6ef50d4e9069885e0b3f19f26491c7f4f9c5ccc8aa118e38fd6a23997" "pypy" verify_py35 ensurepip fi ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.7-beta-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.7.1-beta-src000066400000000000000000000006421476513315000260270ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v5.7.1-src" "https://downloads.python.org/pypy/pypy3-v5.7.1-src.tar.bz2#40ece0145282980ac121390f13709404c0532896507d5767496381180b631bd0" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.8.0000066400000000000000000000015711476513315000243330ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.8.0-linux64" "https://downloads.python.org/pypy/pypy3-v5.8.0-linux64.tar.bz2#57d871a7f1135719c138cee4e3533c3275d682a76a40ff668e95150c65923035" "pypy" verify_py35 ensurepip else install_package "pypy3.5-5.8-beta-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-5.8-1-beta-linux_x86_64-portable.tar.bz2#cab20a6d315a1bb05aa953ebc37d8deaa34dcbe298cb5938e373c42c05542b99" "pypy" verify_py35 ensurepip fi ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.8.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.8.0-src000066400000000000000000000006421476513315000251160ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v5.8.0-src" "https://downloads.python.org/pypy/pypy3-v5.8.0-src.tar.bz2#9d090127335c3c0fd2b14c8835bf91752e62756e55ea06aad3353f24a6854223" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.9.0000066400000000000000000000015671476513315000243410ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux64" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v5.9.0-linux64" "https://downloads.python.org/pypy/pypy3-v5.9.0-linux64.tar.bz2#d8c41ede3758127718944cc2fd6bf78ed4303d946f85596cac91281ccce36165" "pypy" verify_py35 ensurepip else install_package "pypy3.5-5.9-beta-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-5.9-beta-linux_x86_64-portable.tar.bz2#b0a79dabe2c48b0374d567936139ecf1379904a504d4a645be5c3e7e35140575" "pypy" verify_py35 ensurepip fi ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-5.9.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-5.9.0-src000066400000000000000000000006421476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v5.9.0-src" "https://downloads.python.org/pypy/pypy3-v5.9.0-src.tar.bz2#a014f47f50a1480f871a0b82705f904b38c93c4ca069850eb37653fedafb1b97" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-6.0.0000066400000000000000000000053201476513315000243200ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 14.04" 1>/dev/null 2>&1; then install_package "pypy3-v6.0.0-linux32" "https://downloads.python.org/pypy/pypy3-v6.0.0-linux32.tar.bz2#b04eeee5160e6cb5f8962de80f077ea1dc7be34e77d74bf075519c23603f5ff9" "pypy" verify_py27 ensurepip fi ;; "linux64" ) if require_distro "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3-v6.0.0-linux64" "https://downloads.python.org/pypy/pypy3-v6.0.0-linux64.tar.bz2#4cfffa292b9ef34bb6ba39cdbaa196c5c5cbbc5aa3faaa157cf45d7e34027048" "pypy" verify_py27 ensurepip else install_package "pypy3.5-6.0.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-6.0.0-linux_x86_64-portable.tar.bz2#07f16282d126abfa759702baea869b0f661aa97f4c553ebec66c624bda28155f" "pypy" verify_py35 ensurepip fi ;; "linux-armel" ) require_distro "Ubuntu 12.04" || true install_package "pypy3-v6.0.0-linux-armel" "https://downloads.python.org/pypy/pypy3-v6.0.0-linux-armel.tar.bz2#6a6888a55192f58594838b8b3d2e7daaad43d3bf4293afab3dd8987d0bbd1124" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_package "pypy3-v6.0.0-linux-armhf-raspbian" "https://downloads.python.org/pypy/pypy3-v6.0.0-linux-armhf-raspbian.tar.bz2#8a0420dda23413925400538bbfc0cff2bbb2ab0de984eef6faaeab6d3309cbcc" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-6.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3-v6.0.0-osx64" "https://downloads.python.org/pypy/pypy3-v6.0.0-osx64.tar.bz2#938b8034e30f5f5060d2a079070c56c3be5559bc7ae9cc0c8395fe6fc45cfe4c" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.5-6.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) # FIXME: never tested on Windows install_zip "pypy3-v6.0.0-win32" "https://downloads.python.org/pypy/pypy3-v6.0.0-win32.zip#72dddb3746a51f7672c77d619c818e27efe899e08ae82762448e50dbfdc2f5f3" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-6.0.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-6.0.0-src000066400000000000000000000006421476513315000251070ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3-v6.0.0-src" "https://downloads.python.org/pypy/pypy3-v6.0.0-src.tar.bz2#ed8005202b46d6fc6831df1d13a4613bc40084bfa42f275068edadf8954034a3" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-7.0.0000066400000000000000000000042271476513315000243260ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.5-v7.0.0-linux32" "https://downloads.python.org/pypy/pypy3.5-v7.0.0-linux32.tar.bz2#b8db8fbca9621de8ea8cd7184b322f2dddb2f385e8e5a63dfb75bb3fea4b2e3f" "pypy" verify_py35 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-7.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.5-v7.0.0-linux64" "https://downloads.python.org/pypy/pypy3.5-v7.0.0-linux64.tar.bz2#729e3c54325969c98bd3658c6342b9f5987b96bad1d6def04250a08401b54c4b" "pypy" verify_py35 ensurepip else install_package "pypy3.5-7.0.0-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.5-7.0.0-linux_x86_64-portable.tar.bz2#b0fa200f25a5a0ef90b8776ab1d0665c47d47c607d2ef057cce1da1ad2568e1f" "pypy" verify_py35 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3.5-v7.0.0-osx64" "https://downloads.python.org/pypy/pypy3.5-v7.0.0-osx64.tar.bz2#7c6d71653d9b1a7946d1eeebbf24b454fe934fba8b0c39f648bdc545fb2895ce" "pypy" verify_py35 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.5-7.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy3.5-v7.0.0-win32" "https://downloads.python.org/pypy/pypy3.5-v7.0.0-win32.zip#a840305c24f426e11d8bb3f062cacec1edf7fcbce6a99122d59f73e1984bc5c0" "pypy" verify_py35 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.5-7.0.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-7.0.0-src000066400000000000000000000006461476513315000251140ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3.5-v7.0.0-src" "https://downloads.python.org/pypy/pypy3.5-v7.0.0-src.tar.bz2#b2ddb0f45cb4e0384fb498ef7fcca2ac96c730b9000affcf8d730169397f017f" "pypy_builder" verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.5-c-jit-latest000066400000000000000000000042071476513315000261620ustar00rootroot00000000000000echo colorize 1 "WARNING" echo ": This may eat your kittens/ affect timespace in alternate dimensions/" echo "cause you to complain more. Nightly builds are meant for testing only." echo echo "To report bugs/regressions, please see:" echo echo "http://doc.pypy.org/en/latest/faq.html#how-should-i-report-a-bug" echo case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_nightly_package "pypy-c-jit-latest-linux" "http://buildbot.pypy.org/nightly/py3.5/pypy-c-jit-latest-linux.tar.bz2" "pypy-c-jit-*-linux" "pypy" verify_py27 ensurepip ;; "linux-armel" ) install_nightly_package "pypy-c-jit-latest-linux-armel" "http://buildbot.pypy.org/nightly/py3.5/pypy-c-jit-latest-linux-armel.tar.bz2" "pypy-c-jit-*-linux-armel" "pypy" verify_py27 ensurepip ;; "linux-armhf" ) if [[ "$(cat /etc/issue 2>/dev/null || true)" == "Raspbian"* ]]; then install_nightly_package "pypy-c-jit-latest-linux-armhf-raspbian" "http://buildbot.pypy.org/nightly/py3.5/pypy-c-jit-latest-linux-armhf-raspbian.tar.bz2" "pypy-c-jit-*-linux-armhf-raspbian" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The latest nightly build of PyPy 3.5 is not available for $(pypy_architecture 2>/dev/null || true)," echo "Please check http://buildbot.pypy.org/nightly/py3.5/ for previous builds." echo } >&2 exit 1 fi ;; "linux64" ) install_nightly_package "pypy3.5-c-jit-latest-linux64" "http://buildbot.pypy.org/nightly/py3.5/pypy-c-jit-latest-linux64.tar.bz2" "pypy-c-jit-*-linux64" "pypy" verify_py35 ensurepip ;; "osx64" ) install_nightly_package "pypy-c-jit-latest-osx64" "http://buildbot.pypy.org/nightly/py3.5/pypy-c-jit-latest-osx64.tar.bz2" "pypy-c-jit-*-osx64" "pypy" verify_py27 ensurepip ;; "win32" ) install_zip "pypy-c-jit-latest-win32" "http://buildbot.pypy.org/nightly/py3.5/pypy-c-jit-latest-win32.zip" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The latest nightly build of PyPy 3.5 is not available for $(pypy_architecture 2>/dev/null || true)," echo "Please check http://buildbot.pypy.org/nightly/py3.5/ for previous builds." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.0.0000066400000000000000000000035651476513315000243330ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.0.0-src' to build from source." echo } >&2 exit 1 ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.6-v7.0.0-linux64" "https://downloads.python.org/pypy/pypy3.6-v7.0.0-linux64.tar.bz2#8576bde0760c239040706cf4952995eb0e77938b175885392a465a0d1616173d" "pypy" verify_py36 ensurepip else install_package "pypy3.6-7.0.0-alpha-20190209-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.6-7.0.0-alpha-20190209-linux_x86_64-portable.tar.bz2#ef8a5254b9a082dec23a6e029b1bb674a122a789c29d9c452452a9e97498bcbe" "pypy" verify_py36 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3.6-v7.0.0-osx64" "https://downloads.python.org/pypy/pypy3.6-v7.0.0-osx64.tar.bz2#4a95ffd61fd2d626a9c099db6e44889c2a7eecee9cb1cbc29e06603c218ba8e2" "pypy" verify_py36 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.6-7.0.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy3.6-v7.0.0-win32" "https://downloads.python.org/pypy/pypy3.6-v7.0.0-win32.zip#645d81472d16922fd592e9261da449cb19847ff7d5eaa89bcf05d9214b6b2698" "pypy" verify_py36 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.0.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.0.0-src000066400000000000000000000006461476513315000251150ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.0.0-src" "https://downloads.python.org/pypy/pypy3.6-v7.0.0-src.tar.bz2#7ccbf81db5c647fa0c27636c7d18d059d2570fff7eaffc03857c67bee84b8a26" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.1.0000066400000000000000000000042411476513315000243240ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.6-v7.1.0-linux32" "https://downloads.python.org/pypy/pypy3.6-v7.1.0-linux32.tar.bz2#031bfac61210a6e161bace0691b854dc15d01b0e624dc0588c544ee5e1621a83" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.1.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.6-v7.1.0-linux64" "https://downloads.python.org/pypy/pypy3.6-v7.1.0-linux64.tar.bz2#270dd06633cf03337e6f815d7235e790e90dabba6f4b6345c9745121006925fc" "pypy" verify_py36 ensurepip else install_package "pypy3.6-7.1.0-beta-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.6-7.1.0-beta-linux_x86_64-portable.tar.bz2#d1bde814fb0c3645dfc0bdab67c335c8aa259b83fb39106e2e11b0112bcbb602" "pypy" verify_py36 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3.6-v7.1.0-osx64" "https://downloads.python.org/pypy/pypy3.6-v7.1.0-osx64.tar.bz2#d46e005ba095cb4a7006079ffbf4fe63c18cf5e9d8ce9ce8383efc1a4863ab5b" "pypy" verify_py36 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.6-7.1.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy3.6-v7.1.0-win32" "https://downloads.python.org/pypy/pypy3.6-v7.1.0-win32.zip#77a0576a3d518210467f0df2d0d9a1892c664566dc02f25d974c2dbc6b4749e7" "pypy" verify_py36 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.1.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.1.0-src000066400000000000000000000006461476513315000251160ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.1.0-src" "https://downloads.python.org/pypy/pypy3.6-v7.1.0-src.tar.bz2#faa81f469bb2a7cbd22c64f22d4b4ddc5a1f7c798d43b7919b629b932f9b1c6f" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.1.1000066400000000000000000000042411476513315000243250ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.6-v7.1.1-linux32" "https://downloads.python.org/pypy/pypy3.6-v7.1.1-linux32.tar.bz2#cb11ef4b0df569c28390b1ee93029159e1b90bfbad98df6abd629d5203b2abd9" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.1.1-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.6-v7.1.1-linux64" "https://downloads.python.org/pypy/pypy3.6-v7.1.1-linux64.tar.bz2#8014f63b1a34b155548852c7bf73aab2d41ebddf2c8fb603dc9dd8509be93db0" "pypy" verify_py36 ensurepip else install_package "pypy3.6-7.1.1-beta-linux_x86_64-portable" "https://bitbucket-archive.softwareheritage.org/static/14/140b7b14-aa94-424e-b191-9cd3438381f7/attachments/pypy3.6-7.1.1-beta-linux_x86_64-portable.tar.bz2#82c878b61ad34fc2cf1686fa600a7a002d352e1b33a99a43007eec486ecd068e" "pypy" verify_py36 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3.6-v7.1.1-osx64" "https://downloads.python.org/pypy/pypy3.6-v7.1.1-osx64.tar.bz2#a5c2f2bfa2b4a4d29e8a67baab95699b169054066df218a14f171bb84a6df0c0" "pypy" verify_py36 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.6-7.1.1-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy3.6-v7.1.1-win32" "https://downloads.python.org/pypy/pypy3.6-v7.1.1-win32.zip#8b513b254de5f31890f5956569de9aec3a0a91d7aba72fc89d66901f4a8ccf49" "pypy" verify_py36 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.1.1-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.1.1-src000066400000000000000000000006461476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.1.1-src" "https://downloads.python.org/pypy/pypy3.6-v7.1.1-src.tar.bz2#6a3ef876e3691a54f4cff045028ec3be94ab9beb2e99f051b83175302c1899a8" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.2.0000066400000000000000000000041761476513315000243340ustar00rootroot00000000000000case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.6-v7.2.0-linux32" "https://downloads.python.org/pypy/pypy3.6-v7.2.0-linux32.tar.bz2#45e99de197cb3e974cfc8d45e0076ad2066852e61e56b3eafd1237efafd2c43e" "pypy" verify_py27 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.2.0-src' to build from source." echo } >&2 exit 1 fi ;; "linux64" ) if require_distro "Ubuntu 12.04" "Ubuntu 14.04" "Ubuntu 16.04" 1>/dev/null 2>&1; then install_package "pypy3.6-v7.2.0-linux64" "https://downloads.python.org/pypy/pypy3.6-v7.2.0-linux64.tar.bz2#aa128e555ad0fe5c4c15104ae0903052bd232b6e3a73f5fe023d27b8fd0d6089" "pypy" verify_py36 ensurepip else install_package "pypy3.6-7.2.0-beta-linux_x86_64-portable" "https://github.com/squeaky-pl/portable-pypy/releases/download/pypy3.6-7.2.0/pypy3.6-7.2.0-linux_x86_64-portable.tar.bz2#59099546b4dee56edcde2c9ff706687e35bb2aa94354cd56daa78aca036bd3d8" "pypy" verify_py36 ensurepip fi ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy3.6-v7.2.0-osx64" "https://downloads.python.org/pypy/pypy3.6-v7.2.0-osx64.tar.bz2#836abb0ec303b90a684533711ed3b8269d3e8c64805b595e410920abdea678ac" "pypy" verify_py36 ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy3.6-7.2.0-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy3.6-v7.2.0-win32" "https://downloads.python.org/pypy/pypy3.6-v7.2.0-win32.zip#c926f622bec24a8b348591d631717ace83b3a6c3c2dac02b157b622b97d1fc9c" "pypy" verify_py36 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy3.6-7.2.0-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.2.0-src000066400000000000000000000006461476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.2.0-src" "https://downloads.python.org/pypy/pypy3.6-v7.2.0-src.tar.bz2#0d7c707df5041f1593fe82f29c40056c21e4d6cb66554bbd66769bd80bcbfafc" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.0000066400000000000000000000035421476513315000243310ustar00rootroot00000000000000VERSION='7.3.0' PYVER='3.6' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#7045b295d38ba0b5ee65bd3f078ca249fcf1de73fedeaab2d6ad78de2eab0f0e" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#d3d549e8f43de820ac3385b698b83fa59b4d7dd6cf3fe34c115f731e26ad8856" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#b900241bca7152254c107a632767f49edede99ca6360b9a064141267b47ef598" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#87b2545dad75fe3027b4b2108aceb9fdadcdd24e61ae312ac48b449fdd452bf3" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#30e6870c4f3d8ef91890a6556a98080758000ba7c207cccdd86a8f5d358998c1" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.0-src000066400000000000000000000006461476513315000251200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.3.0-src" "https://downloads.python.org/pypy/pypy3.6-v7.3.0-src.tar.bz2#48d12c15fbcbcf4a32882a883195e1f922997cde78e7a16d4342b9b521eefcfa" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.1000066400000000000000000000035421476513315000243320ustar00rootroot00000000000000VERSION='7.3.1' PYVER='3.6' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#2e7a818c67f3ac0708e4d8cdf1961f30cf9586b3f3ca2f215d93437c5ea4567b" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#f67cf1664a336a3e939b58b3cabfe47d893356bdc01f2e17bc912aaa6605db12" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#0069bc3c1570b935f1687f5e128cf050cd7229309e48fad2a2bf2140d43ffcee" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#d9c1778cd1ba37e129b495ea0f35ccdd9b68f5cd9d33ef0ce24e955c16d8840b" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#752fbe8c4abee6468e5ce22af82818f821daded36faa65f3d69423f9c217007a" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.1-src000066400000000000000000000006341476513315000251160ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.3.1-src" "https://downloads.python.org/pypy/pypy3.6-v7.3.1-src.tar.bz2#0c2cc3229da36c6984baee128c8ff8bb4516d69df1d73275dc4622bf249afa83" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.2000066400000000000000000000035421476513315000243330ustar00rootroot00000000000000VERSION='7.3.2' PYVER='3.6' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#6fa871dedf5e60372231362d2ccb0f28f623d42267cabb49be11a3e10bee2726" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#d7a91f179076aaa28115ffc0a81e46c6a787785b2bc995c926fe3b02f0e9ad83" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#164d6a0503c83dd328e1a6bf7fcb2b2e977c1d27c6fcc491a7174fd37bc32a12" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#fd457bfeaf54aa69417b6aa4817df40e702dc8aaaf7e83ba005d391a1bddfa96" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#13a39d46340afed20f11de24e9068968386e4bb7c8bd168662711916e2bf1da6" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.2-src000066400000000000000000000006341476513315000251170ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.3.2-src" "https://downloads.python.org/pypy/pypy3.6-v7.3.2-src.tar.bz2#fd6175fed63ff9fccd7886068078853078948d98afae9bd4f5554c6f7873c10d" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.3000066400000000000000000000035421476513315000243340ustar00rootroot00000000000000VERSION='7.3.3' PYVER='3.6' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#f183c61e66fd2c536a65695bd7ff770748c2884c235a589b9c6ac63690770c69" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#4fb85fdd516482cab727bb9473b066ff8fb672940dedf7ccc32bf92957d29e0a" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#bc82cf7f0182b942a2cfad4a0d167f364bfbf18f434e100a2fe62bc88547ac9b" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#84126fcb957f260de221244222152c981643144df1d817329781f555daa52e35" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#b935253877b703d29b1b11f79e66944f1f88adb8a76f871abf765d4de9d25f8a" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.6-7.3.3-src000066400000000000000000000006341476513315000251200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy3.6-v7.3.3-src" "https://downloads.python.org/pypy/pypy3.6-v7.3.3-src.tar.bz2#a23d21ca0de0f613732af4b4abb0b0db1cc56134b5bf0e33614eca87ab8805af" "pypy_builder" verify_py36 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.2000066400000000000000000000035421476513315000243340ustar00rootroot00000000000000VERSION='7.3.2' PYVER='3.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#34c7e1c7bd06e437ad43cc90a20f9444be1f0a264d0955e32098294c30274784" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#a285ddcbc909d68c648585fae4f33b0ba24961bb4e8fafe5874cf725d6e83df6" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#c5c35a37917f759c19e2a6b3df3b4d56298faa2fae83c143469bcbda42ca5dd2" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#337dd4d9e529d2f221e0beb092236c18430e0564ab835c6bba425a1daf7c9958" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#e3c589be07760bc3042981c379b7fd1603e832a4db426075f09e090473846a96" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.2-src000066400000000000000000000006341476513315000251200ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy3.7-v7.3.2-src" "https://downloads.python.org/pypy/pypy3.7-v7.3.2-src.tar.bz2#9274186eb0c28716a8c6134803b1df857bc3f496e25e50e605c4d95201c8817d" "pypy_builder" verify_py37 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.3000066400000000000000000000035421476513315000243350ustar00rootroot00000000000000VERSION='7.3.3' PYVER='3.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#7d81b8e9fcd07c067cfe2f519ab770ec62928ee8787f952cadf2d2786246efc8" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#37e2804c4661c86c857d709d28c7de716b000d31e89766599fdf5a98928b7096" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#ee4aa041558b58de6063dd6df93b3def221c4ca4c900d6a9db5b1b52135703a8" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#d72b27d5bb60813273f14f07378a08822186a66e216c5d1a768ad295b582438d" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win32" ) install_zip "pypy${PYVER}-v${VERSION}-win32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win32.zip#a282ce40aa4f853e877a5dbb38f0a586a29e563ae9ba82fd50c7e5dc465fb649" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.3-src000066400000000000000000000006341476513315000251210ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy3.7-v7.3.3-src" "https://downloads.python.org/pypy/pypy3.7-v7.3.3-src.tar.bz2#f6c96401f76331e474cca2d14437eb3b2f68a0f27220a6dcbc537445fe9d5b78" "pypy_builder" verify_py37 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.4000066400000000000000000000035421476513315000243360ustar00rootroot00000000000000VERSION='7.3.4' PYVER='3.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#04de1a2e80530f3d74abcf133ec046a0fb12d81956bc043dee8ab4799f3b77eb" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#09d7298b44a38648a87995ec06e1e093761644e50f547c8bb0b2d7f4fe433548" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#a4148fa73b74a091e004e1f378b278c0b8830984cbcb91e10fa31fd915c43efe" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#8a4f0e6c7e3845820202bf7f46b48e36886ceb820ff0767963fd74091c4f5d13" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win64" ) install_zip "pypy${PYVER}-v${VERSION}-win64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win64.zip#0ff4e4653f1ff0653f105680eb101c64c857fa8f828a54a61b02f65c94b5d262" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.4-src000066400000000000000000000006341476513315000251220ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy3.7-v7.3.4-src" "https://downloads.python.org/pypy/pypy3.7-v7.3.4-src.tar.bz2#74d3c1e79f3fc7d384ffb32d3d2a95c2d5f61b81091eccce12ac76030d96ad08" "pypy_builder" verify_py37 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.5000066400000000000000000000035431476513315000243400ustar00rootroot00000000000000VERSION='7.3.5' PYVER='3.7' case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#3dd8b565203d372829e53945c599296fa961895130342ea13791b17c84ed06c4" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#9000db3e87b54638e55177e68cbeb30a30fe5d17b6be48a9eb43d65b3ebcfc26" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#85d83093b3ef5b863f641bc4073d057cc98bb821e16aa9361a5ff4898e70e8ee" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#b3a7d3099ad83de7c267bb79ae609d5ce73b01800578ffd91ba7e221b13f80db" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "win64" ) install_zip "pypy${PYVER}-v${VERSION}-win64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win64.zip#072bd22427178dc4e65d961f50281bd2f56e11c4e4d9f16311c703f69f46ae24" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.5-src000066400000000000000000000006341476513315000251230ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy3.7-v7.3.5-src" "https://downloads.python.org/pypy/pypy3.7-v7.3.5-src.tar.bz2#d920fe409a9ecad9d074aa8568ca5f3ed3581be66f66e5d8988b7ec66e6d99a2" "pypy_builder" verify_py37 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.6000066400000000000000000000041771476513315000243450ustar00rootroot00000000000000VERSION='7.3.6' PYVER='3.7' # https://www.pypy.org/checksums.html case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#459e77c845b31fa9367f7b1b1122155f0ba7888b1d4ce4455c35d2111eeeb275" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#c41d07063b1d002a91ad2a0763b4baaca2b306ec635889c2e4826e706cc7f9ca" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#d446b6987eeaa03d706603863e83d6b99df69232cf1e06d3ee5706add6a84cd6" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#26f0c5c2a5f4a2ce35281d2fa760aa10715300dd110387eac43699a78ed32365" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "s390x" ) install_package "pypy${PYVER}-v${VERSION}-s390x" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-s390x.tar.bz2#3659bf96a177a53426ffc38d3619c6ee307e600c80e924edc9cee604680c141d" "pypy" "verify_py${PYVER//./}" ensurepip ;; "win64" ) install_zip "pypy${PYVER}-v${VERSION}-win64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win64.zip#341e69a369da5a1f4f69dbbd47e7dff5e745439b203e28c7afcf98308a24b003" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.6-src000066400000000000000000000007311476513315000251220ustar00rootroot00000000000000VERSION='7.3.6' PYVER='3.7' prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy${PYVER}-v${VERSION}-src" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-src.tar.bz2#9252ccaa130094205b3c7f0a2cad5adc0d9dfba31658ff3172f788dec1fdb348" "pypy_builder" "verify_py${PYVER//./}" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.7000066400000000000000000000041771476513315000243460ustar00rootroot00000000000000VERSION='7.3.7' PYVER='3.7' # https://www.pypy.org/checksums.html case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#0ab9e2e8ae1ac463bb811b9d3ba24d138f41f7378c17ca9e2d8dee51bf151d19" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#8332f923755441fedfe4767a84601c94f4d6f8475384406cb5f259ad8d0b2002" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#a1a84882525dd574c4b051b66e9b7ef0e132392acc2f729420d7825f96835216" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#edc9df7d0f7c56f7ee05b24117bdb6c03aa65e768471e210c05ccdbbfd11a866" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "s390x" ) install_package "pypy${PYVER}-v${VERSION}-s390x" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-s390x.tar.bz2#7f91efc65a69e727519cc885ca6351f4bfdd6b90580dced2fdcc9ae1bf10013b" "pypy" "verify_py${PYVER//./}" ensurepip ;; "win64" ) install_zip "pypy${PYVER}-v${VERSION}-win64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win64.zip#53505dc0b57590290efd7656117ee5384bcd036f7f7c4f0bc3f5cd10299037d1" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.7-src000066400000000000000000000007771476513315000251350ustar00rootroot00000000000000VERSION='7.3.7' PYVER='3.7' # https://www.pypy.org/checksums.html prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy${PYVER}-v${VERSION}-src" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-src.tar.bz2#2ed02ac9e710859c41bc82deafb08619792bb9a27eeaa1676c741ededd214dd7" "pypy_builder" "verify_py${PYVER//./}" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.8000066400000000000000000000047201476513315000243410ustar00rootroot00000000000000VERSION='7.3.8' PYVER='3.7' # https://www.pypy.org/checksums.html aarch64_hash=4fb2f8281f3aaca72e6fe62ecc5fc054fcc79cd061ca3e0eea730f7d82d610d4 linux32_hash=38429ec6ea1aca391821ee4fbda7358ae86de4600146643f2af2fe2c085af839 linux64_hash=409085db79a6d90bfcf4f576dca1538498e65937acfbe03bd4909bdc262ff378 osx64_hash=76b8eef5b059a7e478f525615482d2a6e9feb83375e3f63c16381d80521a693f s390x_hash=5c2cd3f7cf04cb96f6bcc6b02e271f5d7275867763978e66651b8d1605ef3141 win64_hash=96df67492bc8d62b2e71dddf5f6c58965a26cac9799c5f4081401af0494b3bcc ### end of manual settings - following lines same for every download function pypy_pkg_data { # pypy architecture local ARCH="${1}" local basesrc="pypy${PYVER}-${VERSION}-src" local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local url="${baseurl}-${pkg}.tar.bz2" # use bz2 local hash='' # undefined case "${pkg}" in 'linux-aarch64' ) hash="${aarch64_hash}" url="${baseurl}-aarch64.tar.bz2" # diff url ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' # package name revised url="${baseurl}-${pkg}.tar.bz2" # new url ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command url="${baseurl}-${pkg}.zip" # zip rather than bz2 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 ;; esac # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${url}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.8-src000066400000000000000000000011321476513315000251200ustar00rootroot00000000000000VERSION='7.3.8' PYVER='3.7' # https://www.pypy.org/checksums.html hash=35752be62b148fa6f7fb69e58e1f993c7cc319bea54928eb03ed2e75b8248d5f ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.9000066400000000000000000000044651476513315000243500ustar00rootroot00000000000000VERSION='7.3.9' PYVER='3.7' # https://www.pypy.org/checksums.html aarch64_hash=dfc62f2c453fb851d10a1879c6e75c31ffebbf2a44d181bb06fcac4750d023fc linux32_hash=3398cece0167b81baa219c9cd54a549443d8c0a6b553ec8ec13236281e0d86cd linux64_hash=c58195124d807ecc527499ee19bc511ed753f4f2e418203ca51bc7e3b124d5d1 osx64_hash=12d92f578a200d50959e55074b20f29f93c538943e9a6e6522df1a1cc9cef542 s390x_hash=fcab3b9e110379948217cf592229542f53c33bfe881006f95ce30ac815a6df48 win64_hash=8acb184b48fb3c854de0662e4d23a66b90e73b1ab73a86695022c12c745d8b00 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' # windows is always diff... local hash='' # undefined # select the hash, fix pkg if not match ARCH, windows has ext of zip case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command ext='zip' # zip rather than bz2 ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-7.3.9-src000066400000000000000000000011321476513315000251210ustar00rootroot00000000000000VERSION='7.3.9' PYVER='3.7' # https://www.pypy.org/checksums.html hash=70426163b194ee46009986eea6d9426098a3ffb552d9cdbd3dfaa64a47373f49 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.7-c-jit-latest000066400000000000000000000033061476513315000261630ustar00rootroot00000000000000echo colorize 1 "WARNING" echo ": This may eat your kittens/ affect timespace in alternate dimensions/" echo "cause you to complain more. Nightly builds are meant for testing only." echo "Current pypy py3.7 development status:" echo echo "https://foss.heptapod.net/pypy/pypy/-/wikis/py3.7%20status" echo echo "for the latest status updates. To report bugs/regressions, please see:" echo echo "https://doc.pypy.org/en/latest/faq.html#how-should-i-report-a-bug" echo case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_nightly_package "pypy-c-jit-latest-linux" "https://buildbot.pypy.org/nightly/py3.7/pypy-c-jit-latest-linux.tar.bz2" "pypy-c-jit-*-linux" "pypy" verify_py27 ensurepip ;; "linux64" ) install_nightly_package "pypy3.7-c-jit-latest-linux64" "https://buildbot.pypy.org/nightly/py3.7/pypy-c-jit-latest-linux64.tar.bz2" "pypy-c-jit-*-linux64" "pypy" verify_py35 ensurepip ;; "linux-aarch64" ) install_nightly_package "pypy3.7-c-jit-latest-aarch64" "https://buildbot.pypy.org/nightly/py3.7/pypy-c-jit-latest-aarch64.tar.bz2" "pypy-c-jit-*-aarch64" "pypy" verify_py35 ensurepip ;; "osx64" ) install_nightly_package "pypy-c-jit-latest-osx64" "https://buildbot.pypy.org/nightly/py3.7/pypy-c-jit-latest-osx64.tar.bz2" "pypy-c-jit-*-osx64" "pypy" verify_py27 ensurepip ;; "win32" ) install_zip "pypy-c-jit-latest-win32" "https://buildbot.pypy.org/nightly/py3.7/pypy-c-jit-latest-win32.zip" "pypy" verify_py27 ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The latest nightly build of PyPy 3.7 is not available for $(pypy_architecture 2>/dev/null || true)," echo "Please check https://buildbot.pypy.org/nightly/py3.7/ for previous builds." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.10000066400000000000000000000043551476513315000244170ustar00rootroot00000000000000VERSION='7.3.10' PYVER='3.8' # https://www.pypy.org/checksums.html aarch64_hash=e4caa1a545f22cfee87d5b9aa6f8852347f223643ad7d2562e0b2a2f4663ad98 linux32_hash=b70ed7fdc73a74ebdc04f07439f7bad1a849aaca95e26b4a74049d0e483f071c linux64_hash=ceef6496fd4ab1c99e3ec22ce657b8f10f8bb77a32427fadfb5e1dd943806011 osarm64_hash=6cb1429371e4854b718148a509d80143f801e3abfc72fef58d88aeeee1e98f9e osx64_hash=399eb1ce4c65f62f6a096b7c273536601b7695e3c0dc0457393a659b95b7615b s390x_hash=c294f8e815158388628fe77ac5b8ad6cd93c8db1359091fa02d41cf6da4d61a1 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.10-src000066400000000000000000000011331476513315000251730ustar00rootroot00000000000000VERSION='7.3.10' PYVER='3.8' # https://www.pypy.org/checksums.html hash=218a1e062f17aba89f61bc398e8498f13c048b9fcf294343f5d9d56c3ac9b882 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.11000066400000000000000000000043551476513315000244200ustar00rootroot00000000000000VERSION='7.3.11' PYVER='3.8' # https://www.pypy.org/checksums.html aarch64_hash=9a2fa0b8d92b7830aa31774a9a76129b0ff81afbd22cd5c41fbdd9119e859f55 linux32_hash=a79b31fce8f5bc1f9940b6777134189a1d3d18bda4b1c830384cda90077c9176 linux64_hash=470330e58ac105c094041aa07bb05676b06292bc61409e26f5c5593ebb2292d9 osarm64_hash=78cdc79ff964c4bfd13eb45a7d43a011cbe8d8b513323d204891f703fdc4fa1a osx64_hash=194ca0b4d91ae409a9cb1a59eb7572d7affa8a451ea3daf26539aa515443433a s390x_hash=eab7734d86d96549866f1cba67f4f9c73c989f6a802248beebc504080d4c3fcd ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.11-src000066400000000000000000000011331476513315000251740ustar00rootroot00000000000000VERSION='7.3.11' PYVER='3.8' # https://www.pypy.org/checksums.html hash=4d6769bfca73734e8666fd70503b7ceb06a6e259110e617331bb3899ca4e6058 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.6000066400000000000000000000041731476513315000243420ustar00rootroot00000000000000VERSION='7.3.6' PYVER='3.8' # https://www.pypy.org/checksums.html case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#e857a04a76285f0ef5bae84f6f5e9943ca415d499204c531b1c33fe8f015b48d" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#8579ea990e95d2b7e101ef47fd9ebf25a9500d5086e8f708c43f9bae83306ece" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#704d5303096e8a3173e73435f3bb204e31a8bf02ed5ba617a4a0f1e7491edf50" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#8195e52a20cf2a4f42c2d7e4969fbf44fe349c1f80f758e20525dd0f8c134bec" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "s390x" ) install_package "pypy${PYVER}-v${VERSION}-s390x" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-s390x.zip#a36208d5e950ec4b630b33d0aede8ca3da383d973fc5ca387082c7e5bad8d245" "pypy" "verify_py${PYVER//./}" ensurepip ;; "win64" ) install_zip "pypy${PYVER}-v${VERSION}-win64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win64.zip#1b216fd75f8f0a48633cc21dce7d6f25ba65016142df758842e1df661269b458" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.6-src000066400000000000000000000007771476513315000251350ustar00rootroot00000000000000VERSION='7.3.6' PYVER='3.8' # https://www.pypy.org/checksums.html prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy${PYVER}-v${VERSION}-src" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-src.tar.bz2#f234c56eb0d4ab0afb196232fb38cd1ca8e19b1c65cf7b65eb691695499be259" "pypy_builder" "verify_py${PYVER//./}" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.7000066400000000000000000000041731476513315000243430ustar00rootroot00000000000000VERSION='7.3.7' PYVER='3.8' # https://www.pypy.org/checksums.html case "$(pypy_architecture 2>/dev/null || true)" in "linux" ) install_package "pypy${PYVER}-v${VERSION}-linux32" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux32.tar.bz2#dfb9d005f0fc917edc60fd618143e4934c412f9168b55166f5519ba0a3b1a835" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux64" ) install_package "pypy${PYVER}-v${VERSION}-linux64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-linux64.tar.bz2#5dee37c7c3cb8b160028fbde3a5901c68043dfa545a16794502b897d4bc40d7e" "pypy" "verify_py${PYVER//./}" ensurepip ;; "linux-aarch64" ) install_package "pypy${PYVER}-v${VERSION}-aarch64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-aarch64.tar.bz2#cbd44e0a9146b3c03a9d14b265774a848f387ed846316c3e984847e278d0efd3" "pypy" "verify_py${PYVER//./}" ensurepip ;; "osx64" ) if require_osx_version "10.13"; then install_package "pypy${PYVER}-v${VERSION}-osx64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-osx64.tar.bz2#1f044fe7bbdd443b7913ecf554683dab6dade5dcd7f47d4e6d01f4bb4cf84836" "pypy" "verify_py${PYVER//./}" ensurepip else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 fi ;; "s390x" ) install_package "pypy${PYVER}-v${VERSION}-s390x" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-s390x.zip#ae7d6a76490b317a74b87788d596610c7ffd0ae2d3ffa2433d5bb5300f6b4b77" "pypy" "verify_py${PYVER//./}" ensurepip ;; "win64" ) install_zip "pypy${PYVER}-v${VERSION}-win64" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-win64.zip#8ceb03d2f7b73c6ce0758290bc42ba366a45c46e033eda36f1779d957a905735" "pypy" "verify_py${PYVER//./}" ensurepip ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try 'pypy${PYVER}-${VERSION}-src' to build from source." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.7-src000066400000000000000000000007771476513315000251360ustar00rootroot00000000000000VERSION='7.3.7' PYVER='3.8' # https://www.pypy.org/checksums.html prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "pypy${PYVER}-v${VERSION}-src" "https://downloads.python.org/pypy/pypy${PYVER}-v${VERSION}-src.tar.bz2#21ae339f4f5016d6ca7300305f3e3b554373835cb3c39a9041fe30e6811c80c6" "pypy_builder" "verify_py${PYVER//./}" ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.8000066400000000000000000000047201476513315000243420ustar00rootroot00000000000000VERSION='7.3.8' PYVER='3.8' # https://www.pypy.org/checksums.html aarch64_hash=fe41df391f87239925e573e195e631a9d03d37f471eb1479790ee13ca47a28af linux32_hash=bea4b275decd492af6462157d293dd6fcf08a949859f8aec0959537b40afd032 linux64_hash=089f8e3e357d6130815964ddd3507c13bd53e4976ccf0a89b5c36a9a6775a188 osx64_hash=de1b283ff112d76395c0162a1cf11528e192bdc230ee3f1b237f7694c7518dee s390x_hash=0c46527770ec1322b98942860ad3551767d3e09d4481bcb49abd92001a293840 win64_hash=0894c468e7de758c509a602a28ef0ba4fbf197ccdf946c7853a7283d9bb2a345 ### end of manual settings - following lines same for every download function pypy_pkg_data { # pypy architecture local ARCH="${1}" local basesrc="pypy${PYVER}-${VERSION}-src" local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local url="${baseurl}-${pkg}.tar.bz2" # use bz2 local hash='' # undefined case "${pkg}" in 'linux-aarch64' ) hash="${aarch64_hash}" url="${baseurl}-aarch64.tar.bz2" # diff url ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' # package name revised url="${baseurl}-${pkg}.tar.bz2" # new url ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command url="${baseurl}-${pkg}.zip" # zip rather than bz2 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 ;; esac # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${url}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.8-src000066400000000000000000000011321476513315000251210ustar00rootroot00000000000000VERSION='7.3.8' PYVER='3.8' # https://www.pypy.org/checksums.html hash=f1a378b264cdbfb0e03d77dfc4d105d02f91d542bd7c9c957d1f8083a9808f1f ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.9000066400000000000000000000044651476513315000243510ustar00rootroot00000000000000VERSION='7.3.9' PYVER='3.8' # https://www.pypy.org/checksums.html aarch64_hash=5e124455e207425e80731dff317f0432fa0aba1f025845ffca813770e2447e32 linux32_hash=4b261516c6c59078ab0c8bd7207327a1b97057b4ec1714ed5e79a026f9efd492 linux64_hash=08be25ec82fc5d23b78563eda144923517daba481a90af0ace7a047c9c9a3c34 osx64_hash=91a5c2c1facd5a4931a8682b7d792f7cf4f2ba25cd2e7e44e982139a6d5e4840 s390x_hash=c6177a0016c9145c7b99fddb5d74cc2e518ccdb216a6deb51ef6a377510cc930 win64_hash=05022baaa55db2b60880f2422312d9e4025e1267303ac57f33e8253559d0be88 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' # windows is always diff... local hash='' # undefined # select the hash, fix pkg if not match ARCH, windows has ext of zip case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command ext='zip' # zip rather than bz2 ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.8-7.3.9-src000066400000000000000000000011321476513315000251220ustar00rootroot00000000000000VERSION='7.3.9' PYVER='3.8' # https://www.pypy.org/checksums.html hash=5b5d9d9256f12a129af8384e2f581bdfab3bc0fbbe3a0a480d9c1d2e95490eb1 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.10000066400000000000000000000043551476513315000244200ustar00rootroot00000000000000VERSION='7.3.10' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=657a04fd9a5a992a2f116a9e7e9132ea0c578721f59139c9fb2083775f71e514 linux32_hash=b6db59613b9a1c0c1ab87bc103f52ee95193423882dc8a848b68850b8ba59cc5 linux64_hash=95cf99406179460d63ddbfe1ec870f889d05f7767ce81cef14b88a3a9e127266 osarm64_hash=e2a6bec7408e6497c7de8165aa4a1b15e2416aec4a72f2578f793fb06859ccba osx64_hash=f90c8619b41e68ec9ffd7d5e913fe02e60843da43d3735b1c1bc75bcfe638d97 s390x_hash=ca6525a540cf0c682d1592ae35d3fbc97559a97260e4b789255cc76dde7a14f0 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.10-src000066400000000000000000000011331476513315000251740ustar00rootroot00000000000000VERSION='7.3.10' PYVER='3.9' # https://www.pypy.org/checksums.html hash=3738d32575ed2513e3e66878e4e4c6c208caed267570f3f9f814748830002967 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.11000066400000000000000000000043551476513315000244210ustar00rootroot00000000000000VERSION='7.3.11' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=09175dc652ed895d98e9ad63d216812bf3ee7e398d900a9bf9eb2906ba8302b9 linux32_hash=0099d72c2897b229057bff7e2c343624aeabdc60d6fb43ca882bff082f1ffa48 linux64_hash=d506172ca11071274175d74e9c581c3166432d0179b036470e3b9e8d20eae581 osarm64_hash=91ad7500f1a39531dbefa0b345a3dcff927ff9971654e8d2e9ef7c5ae311f57e osx64_hash=d33f40b207099872585afd71873575ca6ea638a27d823bc621238c5ae82542ed s390x_hash=e1f30f2ddbe3f446ddacd79677b958d56c07463b20171fb2abf8f9a3178b79fc ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.11-src000066400000000000000000000011331476513315000251750ustar00rootroot00000000000000VERSION='7.3.11' PYVER='3.9' # https://www.pypy.org/checksums.html hash=b0f3166fb2a5aadfd5ceb9db5cdd5f7929a0eccca02b4a26c0dae0492f7ca8ea ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.12000066400000000000000000000043551476513315000244220ustar00rootroot00000000000000VERSION='7.3.12' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=e9327fb9edaf2ad91935d5b8563ec5ff24193bddb175c1acaaf772c025af1824 linux32_hash=aa04370d38f451683ccc817d76c2b3e0f471dbb879e0bd618d9affbdc9cd37a4 linux64_hash=84c89b966fab2b58f451a482ee30ca7fec3350435bd0b9614615c61dc6da2390 osarm64_hash=0e8a1a3468b9790c734ac698f5b00cc03fc16899ccc6ce876465fac0b83980e3 osx64_hash=64f008ffa070c407e5ef46c8256b2e014de7196ea5d858385861254e7959f4eb s390x_hash=20d84658a6899bdd2ca35b00ead33a2f56cff2c40dce1af630466d27952f6d4f ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.12-src000066400000000000000000000011331476513315000251760ustar00rootroot00000000000000VERSION='7.3.12' PYVER='3.9' # https://www.pypy.org/checksums.html hash=e7a2046c7e6c25fc386abbb5132e92a7cc2491e3935699a946cb5dcbb342c2aa ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.13000066400000000000000000000043551476513315000244230ustar00rootroot00000000000000VERSION='7.3.13' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=317d7876c5825a086f854253648b967a432b993ce87695d2895d3ad6ed0d2716 linux32_hash=ac695238b4a3635ac6b482e74e04e2ea78b31acca0decd5de601dfd2f4ebf35a linux64_hash=323b05a9f607e932cda1995cbe77a96e4ea35994631aa6d734c8035e8479b74e osarm64_hash=a07b17a790a1952b551e69d47d77a5546ad5e666ed1bd90b9ad60baaca6aa51e osx64_hash=180802aa0122d4a05ec480bf3130c78591ba88fdde25d8e65a92d4a798b318a3 s390x_hash=213c88f652a99c4dc4e8e00b4b5b58f381c7f7e9ea1a9b65801fc0eb1e50df0a ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.13-src000066400000000000000000000011331476513315000251770ustar00rootroot00000000000000VERSION='7.3.13' PYVER='3.9' # https://www.pypy.org/checksums.html hash=bc6147268105e7cb3bd57b401e6d97f66aa4ede269104b2712a7cdd9f02f68cd ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.14000066400000000000000000000043551476513315000244240ustar00rootroot00000000000000VERSION='7.3.14' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=14b842f32f60ce2d9d130971f9bcbdb6875824a0e78fac36806d267e0982179c linux32_hash=4ad89a22369a6f2f83a7d8d047e0fc4cf5597f0921fa7afa23499ed05f663503 linux64_hash=febd770a616641ca8419c381c7fb224e515b892551d0db49a1231397ed38859d osarm64_hash=4f8f2464a743f855b8fc8bda7ce7994a674616db3b5c2c1955cd08502fa782ca osx64_hash=0e2fea9b2dadb82b7acf05f21c0144f7bb1cfaaa39c693ab1eba4aef5ed52680 s390x_hash=ba2451e9081db5bc724a05530a7f98817231de83ff6fdf15bad21a4e9b6dfeae ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.14-src000066400000000000000000000011331476513315000252000ustar00rootroot00000000000000VERSION='7.3.14' PYVER='3.9' # https://www.pypy.org/checksums.html hash=560fe6161e159557e1fe612aaadf9b293eefded1da372e70b8e3b23bba598366 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.15000066400000000000000000000043551476513315000244250ustar00rootroot00000000000000VERSION='7.3.15' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=03e35fcba290454bb0ccf7ee57fb42d1e63108d10d593776a382c0a2fe355de0 linux32_hash=c6209380977066c9e8b96e8258821c70f996004ce1bc8659ae83d4fd5a89ff5c linux64_hash=f062be307200bde434817e1620cebc13f563d6ab25309442c5f4d0f0d68f0912 osarm64_hash=300541c32125767a91b182b03d9cc4257f04971af32d747ecd4d62549d72acfd osx64_hash=18ad7c9cb91c5e8ef9d40442b2fd1f6392ae113794c5b6b7d3a45e04f19edec6 s390x_hash=deeb5e54c36a0fd9cfefd16e63a0d5bed4f4a43e6bbc01c23f0ed8f7f1c0aaf3 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.15-src000066400000000000000000000011331476513315000252010ustar00rootroot00000000000000VERSION='7.3.15' PYVER='3.9' # https://www.pypy.org/checksums.html hash=6bb9537d85aa7ad13c0aad2e41ff7fd55080bc9b4d1361b8f502df51db816e18 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.16000066400000000000000000000043551476513315000244260ustar00rootroot00000000000000VERSION='7.3.16' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=de3f2ed3581b30555ac0dd3e4df78a262ec736a36fb2e8f28259f8539b278ef4 linux32_hash=583b6d6dd4e8c07cbc04da04a7ec2bdfa6674825289c2378c5e018d5abe779ea linux64_hash=16f9c5b808c848516e742986e826b833cdbeda09ad8764e8704595adbe791b23 osarm64_hash=88f824e7a2d676440d09bc90fc959ae0fd3557d7e2f14bfbbe53d41d159a47fe osx64_hash=fda015431621e7e5aa16359d114f2c45a77ed936992c1efff86302e768a6b21c s390x_hash=7a56ebb27dba3110dc1ff52d8e0449cdb37fe5c2275f7faf11432e4e164833ba ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' local hash='' # undefined # select the hash, fix pkg if not match ARCH case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osarm64' ) hash="${osarm64_hash}" pkg='macos_arm64' ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" pkg='macos_x86_64' else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.16-src000066400000000000000000000011331476513315000252020ustar00rootroot00000000000000VERSION='7.3.16' PYVER='3.9' # https://www.pypy.org/checksums.html hash=5b75af3f8e76041e79c1ef5ce22ce63f8bd131733e9302081897d8f650e81843 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.8000066400000000000000000000047201476513315000243430ustar00rootroot00000000000000VERSION='7.3.8' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=89d7ee12a8c416e83fae80af82482531fc6502321e75e5b7a0cc01d756ee5f0e linux32_hash=0894c468e7de758c509a602a28ef0ba4fbf197ccdf946c7853a7283d9bb2a345 linux64_hash=129a055032bba700cd1d0acacab3659cf6b7180e25b1b2f730e792f06d5b3010 osx64_hash=95bd88ac8d6372cd5b7b5393de7b7d5c615a0c6e42fdb1eb67f2d2d510965aee s390x_hash=37b596bfe76707ead38ffb565629697e9b6fa24e722acc3c632b41ec624f5d95 win64_hash=c1b2e4cde2dcd1208d41ef7b7df8e5c90564a521e7a5db431673da335a1ba697 ### end of manual settings - following lines same for every download function pypy_pkg_data { # pypy architecture local ARCH="${1}" local basesrc="pypy${PYVER}-${VERSION}-src" local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local url="${baseurl}-${pkg}.tar.bz2" # use bz2 local hash='' # undefined case "${pkg}" in 'linux-aarch64' ) hash="${aarch64_hash}" url="${baseurl}-aarch64.tar.bz2" # diff url ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' # package name revised url="${baseurl}-${pkg}.tar.bz2" # new url ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true), OS X < 10.13." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command url="${baseurl}-${pkg}.zip" # zip rather than bz2 ;; * ) { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for $(pypy_architecture 2>/dev/null || true)." echo "try '${basesrc}' to build from source." echo } >&2 exit 1 ;; esac # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${url}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.8-src000066400000000000000000000011321476513315000251220ustar00rootroot00000000000000VERSION='7.3.8' PYVER='3.9' # https://www.pypy.org/checksums.html hash=546b7fc3789728869d5ada7b6a95ce9d03047e8489b92ada84613c900e431ee9 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.9000066400000000000000000000044651476513315000243520ustar00rootroot00000000000000VERSION='7.3.9' PYVER='3.9' # https://www.pypy.org/checksums.html aarch64_hash=2e1ae193d98bc51439642a7618d521ea019f45b8fb226940f7e334c548d2b4b9 linux32_hash=0de4b9501cf28524cdedcff5052deee9ea4630176a512bdc408edfa30914bae7 linux64_hash=46818cb3d74b96b34787548343d266e2562b531ddbaf330383ba930ff1930ed5 osx64_hash=59c8852168b2b1ba1f0211ff043c678760380d2f9faf2f95042a8878554dbc25 s390x_hash=774dca83bcb4403fb99b3d155e7bd572ef8c52b9fe87a657109f64e75ad71732 win64_hash=be48ab42f95c402543a7042c999c9433b17e55477c847612c8733a583ca6dff5 ### end of manual settings - following lines same for every download function err_no_binary { local archmsg="${1}" local ver="pypy${PYVER}-v${VERSION}-src" local url="https://downloads.python.org/pypy/${ver}.tar.bz2" { echo colorize 1 "ERROR" echo ": The binary distribution of PyPy is not available for ${archmsg}." echo "try '${url}' to build from source." echo } >&2 exit 1 } function pypy_pkg_data { # pypy architecture tag local ARCH="${1}" # defaults local cmd='install_package' # use bz2 local pkg="${ARCH}" # assume matches local ext='tar.bz2' # windows is always diff... local hash='' # undefined # select the hash, fix pkg if not match ARCH, windows has ext of zip case "${ARCH}" in 'linux-aarch64' ) hash="${aarch64_hash}" pkg='aarch64' ;; 'linux' ) hash="${linux32_hash}" pkg='linux32' ;; 'linux64' ) hash="${linux64_hash}" ;; 'osx64' ) if require_osx_version "10.13"; then hash="${osx64_hash}" else err_no_binary "${ARCH}, OS X < 10.13" fi ;; 's390x' ) hash="${s390x_hash}" ;; 'win64' ) hash="${win64_hash}" cmd='install_zip' # diff command ext='zip' # zip rather than bz2 ;; * ) err_no_binary "${ARCH}" ;; esac local basever="pypy${PYVER}-v${VERSION}" local baseurl="https://downloads.python.org/pypy/${basever}" # result - command, package dir, url+hash echo "${cmd}" "${basever}-${pkg}" "${baseurl}-${pkg}.${ext}#${hash}" } # determine command, package directory, url+hash declare -a pd="$(pypy_pkg_data "$(pypy_architecture 2>/dev/null || true)")" # install ${pd[0]} "${pd[1]}" "${pd[2]}" 'pypy' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pypy3.9-7.3.9-src000066400000000000000000000011321476513315000251230ustar00rootroot00000000000000VERSION='7.3.9' PYVER='3.9' # https://www.pypy.org/checksums.html hash=2abaa1e9fe1ec0e233c9fbc377a0c8e9a0634080a8f4f30eb6898301f6618c12 ### end of manual settings - following lines same for every download ver="pypy${PYVER}-v${VERSION}-src" url="https://downloads.python.org/pypy/${ver}.tar.bz2" prefer_openssl11 install_package "openssl-1.1.1f" "https://www.openssl.org/source/openssl-1.1.1f.tar.gz#186c6bfe6ecfba7a5b48c47f8a1673d0f3b0e5ba2e25602dd23b629975da3f35" mac_openssl --if has_broken_mac_openssl install_package "${ver}" "${url}#${hash}" 'pypy_builder' "verify_py${PYVER//./}" 'ensurepip' pyenv-2.5.4/plugins/python-build/share/python-build/pyston-2.2000066400000000000000000000011761476513315000242720ustar00rootroot00000000000000echo colorize 1 "WARNING" echo ": Pyston only runs on x86_64 platforms, and only has been tested on Ubuntu" echo "so, your mileage may vary with other Linux distributions." echo case "$(pyston_architecture 2>/dev/null || true)" in "linux64" ) install_package "pyston_2.2" "https://github.com/pyston/pyston/releases/download/pyston_2.2/pyston_2.2_portable.tar.gz#d113cc4d1f6821c0f117f7a84978823d8ac751d7970fa7841eb994663ec5a59f" "pyston2_2" verify_py38 get_pip ;; * ) { echo colorize 1 "ERROR" echo ": A Pyston 2.2 binary is not available for $(pyston_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pyston-2.3000066400000000000000000000011731476513315000242700ustar00rootroot00000000000000echo colorize 1 "WARNING" echo ": Pyston only runs on x86_64 platforms, and only has been tested on Ubuntu" echo "so, your mileage may vary with other Linux distributions." echo case "$(pyston_architecture 2>/dev/null || true)" in "linux64" ) install_package "pyston_2.3" "https://github.com/pyston/pyston/releases/download/v2.3/pyston_2.3_portable-v2.tar.gz#90185e29e4a1a19562c095f2bb4e81a5d0715150fa10eca363ec1188b5ba7ee7" "pyston2_2" verify_py38 get_pip ;; * ) { echo colorize 1 "ERROR" echo ": A Pyston 2.3 binary is not available for $(pyston_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pyston-2.3.1000066400000000000000000000012061476513315000244240ustar00rootroot00000000000000echo colorize 1 "WARNING" echo ": Pyston only runs on x86_64 platforms, and only has been tested on Ubuntu" echo "so, your mileage may vary with other Linux distributions." echo case "$(pyston_architecture 2>/dev/null || true)" in "linux64" ) install_package "pyston_2.3.1" "https://github.com/pyston/pyston/releases/download/pyston_2.3.1/pyston_2.3.1_portable_v2.tar.gz#4e16df1eaf5f226c0629f2db1e63033454c94cb9e29f50154177819662df5b15" "pyston" verify_py38 get_pip ;; * ) { echo colorize 1 "ERROR" echo ": A Pyston 2.3.1 binary is not available for $(pyston_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pyston-2.3.2000066400000000000000000000012031476513315000244220ustar00rootroot00000000000000echo colorize 1 "WARNING" echo ": Pyston only runs on x86_64 platforms, and only has been tested on Ubuntu" echo "so, your mileage may vary with other Linux distributions." echo case "$(pyston_architecture 2>/dev/null || true)" in "linux64" ) install_package "pyston_2.3.2" "https://github.com/pyston/pyston/releases/download/pyston_2.3.2/pyston_2.3.2_portable.tar.gz#80e71dd2db504e09951ee835e04c9e1183c79412da9aa11d98a6d3f44b95bec1" "pyston" verify_py38 get_pip ;; * ) { echo colorize 1 "ERROR" echo ": A Pyston 2.3.2 binary is not available for $(pyston_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pyston-2.3.3000066400000000000000000000013571476513315000244350ustar00rootroot00000000000000case "$(pyston_architecture 2>/dev/null || true)" in "linux64" ) install_package "pyston_2.3.3_portable_amd64" "https://github.com/pyston/pyston/releases/download/pyston_2.3.3/pyston_2.3.3_portable_amd64.tar.gz#7a38e2bd2fed38e6daba4d513bae32af0d5ba6185cadf37cb1af6bcc4de0cb57" "pyston" verify_py38 get_pip ;; "linux-aarch64" ) install_package "pyston_2.3.3_portable_arm64" "https://github.com/pyston/pyston/releases/download/pyston_2.3.3/pyston_2.3.3_portable_arm64.tar.gz#f93f55b59120f576e5755bd8f86fa38361a30ca5389dbadc68450051ee2dccb1" "pyston" verify_py38 get_pip ;; * ) { echo colorize 1 "ERROR" echo ": A Pyston 2.3.3 binary is not available for $(pyston_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pyston-2.3.4000066400000000000000000000015131476513315000244300ustar00rootroot00000000000000# sha256sum used for checksum values # version of pyston VER='2.3.4' # alias for download location DOWNLOAD='https://github.com/pyston/pyston/releases/download' case "$(pyston_architecture 2>/dev/null || true)" in "linux64" ) install_package "pyston_${VER}_portable_amd64" "${DOWNLOAD}/pyston_${VER}/pyston_${VER}_portable_amd64.tar.gz#f8274bdead746f839791d785a5edad8a0b8723016b38751321c8eaf16ebd22db" "pyston" verify_py38 get_pip ;; "linux-aarch64" ) install_package "pyston_${VER}_portable_arm64" "${DOWNLOAD}/pyston_${VER}/pyston_${VER}_portable_arm64.tar.gz#0733d120562c73f129af5633f8ea7faad3fdcab931f2234c02cd81f21eada2cd" "pyston" verify_py38 get_pip ;; * ) { echo colorize 1 "ERROR" echo ": A Pyston ${VER} binary is not available for $(pyston_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/pyston-2.3.5000066400000000000000000000015131476513315000244310ustar00rootroot00000000000000# sha256sum used for checksum values # version of pyston VER='2.3.5' # alias for download location DOWNLOAD='https://github.com/pyston/pyston/releases/download' case "$(pyston_architecture 2>/dev/null || true)" in "linux64" ) install_package "pyston_${VER}_portable_amd64" "${DOWNLOAD}/pyston_${VER}/pyston_${VER}_portable_amd64.tar.gz#c71c711d60a9c18f243a9e30fd35e0818674ae96f534c67c27b0cdfbc9132ef8" "pyston" verify_py38 get_pip ;; "linux-aarch64" ) install_package "pyston_${VER}_portable_arm64" "${DOWNLOAD}/pyston_${VER}/pyston_${VER}_portable_arm64.tar.gz#c578cb806c62d9dca8728f190a87e172305bd80887e206df42c4c5658ab469c1" "pyston" verify_py38 get_pip ;; * ) { echo colorize 1 "ERROR" echo ": A Pyston ${VER} binary is not available for $(pyston_architecture 2>/dev/null || true)." echo } >&2 exit 1 ;; esac pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7-dev000066400000000000000000000010261476513315000255050ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "stackless-2.7-dev" "https://github.com/stackless-dev/stackless/" "2.7-slp" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.10000066400000000000000000000011061476513315000251470ustar00rootroot00000000000000install_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 "stackless-dev-stackless-b6b4c928e880" "http://www.stackless.com/binaries/stackless-2710-export.tar.xz#8af1318f95965138de51e290a509dc3d" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.11000066400000000000000000000011061476513315000251500ustar00rootroot00000000000000install_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 "stackless-dev-stackless-456e93659e69" "http://www.stackless.com/binaries/stackless-2711-export.tar.xz#d5229693498a4ccc0b3245f7bf8e2b09" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.12000066400000000000000000000011061476513315000251510ustar00rootroot00000000000000install_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 "stackless-dev-stackless-82aaa252fbdc" "http://www.stackless.com/binaries/stackless-2712-export.tar.xz#c610611b39ee374ae36e891c5c739f39" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.14000066400000000000000000000011561476513315000251600ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" 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 "stackless-2.7.14-slp" "https://github.com/stackless-dev/stackless/archive/v2.7.14-slp.tar.gz#e67f60984d034bfd80fef58d26df9d5a1cdecb429c55ac7bc8d932cff6f88ab8" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.16000066400000000000000000000011341476513315000251560ustar00rootroot00000000000000install_package "openssl-1.0.2k" "https://www.openssl.org/source/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 "stackless-dev-stackless-43302de87df4" "http://www.stackless.com/binaries/stackless-2716-export.tar.xz#2db64fbd47567a1c0683fba7a54387892d2299915f9848b54c450b5eb95358dc" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.2000066400000000000000000000011261476513315000250720ustar00rootroot00000000000000install_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 "stackless-272-export" "http://www.stackless.com/binaries/stackless-272-export.tar.bz2#e2e2706b22839e3e3f45085d0ec8030dd7374d8a65d3297981b7189a7c613197" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.3000066400000000000000000000011261476513315000250730ustar00rootroot00000000000000install_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 "stackless-273-export" "http://www.stackless.com/binaries/stackless-273-export.tar.bz2#77bee863bfd16dc4eca7fc078b12db608db7dd6e2481981bb68250118e001dfc" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.4000066400000000000000000000011261476513315000250740ustar00rootroot00000000000000install_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 "stackless-274-export" "http://www.stackless.com/binaries/stackless-274-export.tar.bz2#ba566b18c66b095b65addbcfc4d814fc84f163c9fcffa1d0678755c581e64f45" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.5000066400000000000000000000011261476513315000250750ustar00rootroot00000000000000install_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 "stackless-275-export" "http://www.stackless.com/binaries/stackless-275-export.tar.bz2#5a389357762b32c590e1154a86b098cc379c71d10238b458a3e9b4fa4aac60d4" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.6000066400000000000000000000011261476513315000250760ustar00rootroot00000000000000install_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 "stackless-276-export" "http://www.stackless.com/binaries/stackless-276-export.tar.bz2#1e905deaf74e8922f49b99139aa48e6670e9456c55fec8e60c47501f78c38ff5" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.7000066400000000000000000000011061476513315000250750ustar00rootroot00000000000000install_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 "stackless-dev-stackless-a182f63395c3" "http://www.stackless.com/binaries/stackless-277-export.tar.bz2#4ac0a1e95bc12d6733d9e7f3c221ec4a" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.8000066400000000000000000000011061476513315000250760ustar00rootroot00000000000000install_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 "stackless-dev-stackless-ff29dd4f67de" "http://www.stackless.com/binaries/stackless-278-export.tar.bz2#2880f05e599020eb8f2624ce3796592b" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-2.7.9000066400000000000000000000011051476513315000250760ustar00rootroot00000000000000install_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 "stackless-dev-stackless-43302de87df4" "http://www.stackless.com/binaries/stackless-279-export.tar.xz#35307558796389aa51d96b0bc83f6f6f" standard verify_py27 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.2.2000066400000000000000000000016551476513315000250750ustar00rootroot00000000000000install_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 "stackless-322-export" "http://www.stackless.com/binaries/stackless-322-export.tar.bz2#779700f12b451a350fe7af4cd2849842adc7006dc83fe14712dd1a0999277b07" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.2.5000066400000000000000000000016551476513315000251000ustar00rootroot00000000000000install_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 "stackless-325-export" "http://www.stackless.com/binaries/stackless-325-export.tar.bz2#b021125e578ddd267d38feee9e1cbdb675f6aab247a2b88f4494abcf23babb05" standard verify_py32 install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python install_package "pip-7.1.2" "https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#ca047986f0528cfa975a14fb9f7f106271d4e0c3fe1ddced6c1db2e7ae57a477" python pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.3.5000066400000000000000000000011051476513315000250670ustar00rootroot00000000000000install_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 "stackless-dev-stackless-c856cc204b1c" "http://www.stackless.com/binaries/stackless-335-export.tar.xz#d839295b932eb10443f2ddfecf2c25e9" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.3.7000066400000000000000000000011331476513315000250720ustar00rootroot00000000000000install_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 "stackless-3.3.7-slp" "https://github.com/stackless-dev/stackless/archive/v3.3.7-slp.tar.gz#f05b8ff8a0e318aa5880dc995518ab4453894d068a26a171b89e21b98da5a5c1" standard verify_py33 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.4-dev000066400000000000000000000010261476513315000255030ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "stackless-3.4-dev" "https://github.com/stackless-dev/stackless/" "3.4-slp" standard verify_py34 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.4.2000066400000000000000000000011451476513315000250710ustar00rootroot00000000000000install_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 "stackless-dev-stackless-587417070fe4" "http://www.stackless.com/binaries/stackless-342-export.tar.xz#dd6ae57cc8a162690a24f21ce1f0c4d96e096c24e17137783bacc9182b96b6dc" standard verify_py34 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.4.7000066400000000000000000000011331476513315000250730ustar00rootroot00000000000000install_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 "stackless-3.4.7-slp" "https://github.com/stackless-dev/stackless/archive/v3.4.7-slp.tar.gz#e41959afcfc9381cbc9ac14c12110e3e748e65ceeec4fe61fb1c34cabcb9e6bf" standard verify_py34 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.5.4000066400000000000000000000011331476513315000250710ustar00rootroot00000000000000install_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 "stackless-3.5.4-slp" "https://github.com/stackless-dev/stackless/archive/v3.5.4-slp.tar.gz#ddb65a8118c754f66875f65c4d5d2a4937d67858ec8c361a6c5b386f5e4d9fce" standard verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-3.7.5000066400000000000000000000011331476513315000250740ustar00rootroot00000000000000install_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 "stackless-3.7.5-slp" "https://github.com/stackless-dev/stackless/archive/v3.7.5-slp.tar.gz#e2562a8d235adc19be5451c170837f53ef916aec4cd5cd17d9e0ab1f1b875d3f" standard verify_py37 ensurepip pyenv-2.5.4/plugins/python-build/share/python-build/stackless-dev000066400000000000000000000010251476513315000252000ustar00rootroot00000000000000prefer_openssl11 install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "stackless-dev" "https://github.com/stackless-dev/stackless/" "master-slp" standard verify_py35 ensurepip pyenv-2.5.4/plugins/python-build/test/000077500000000000000000000000001476513315000177465ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/test/arguments.bats000066400000000000000000000011471476513315000226310ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper @test "not enough arguments for python-build" { # use empty inline definition so nothing gets built anyway local definition="${TMP}/build-definition" echo '' > "$definition" run python-build "$definition" assert_failure assert_output_contains 'Usage: python-build' } @test "extra arguments for python-build" { # use empty inline definition so nothing gets built anyway local definition="${TMP}/build-definition" echo '' > "$definition" run python-build "$definition" "${TMP}/install" "" assert_failure assert_output_contains 'Usage: python-build' } pyenv-2.5.4/plugins/python-build/test/build.bats000066400000000000000000000660631476513315000217330ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper export PYTHON_BUILD_CACHE_PATH="$TMP/cache" export MAKE=make export MAKE_OPTS="-j 2" export CC=cc export -n PYTHON_CONFIGURE_OPTS setup() { mkdir -p "$INSTALL_ROOT" stub md5 false stub curl false } executable() { local file="$1" mkdir -p "${file%/*}" cat > "$file" chmod +x "$file" } cached_tarball() { mkdir -p "$PYTHON_BUILD_CACHE_PATH" pushd "$PYTHON_BUILD_CACHE_PATH" >/dev/null tarball "$@" popd >/dev/null } tarball() { local name="$1" local path="$PWD/$name" local configure="$path/${2:-configure}" shift 1 executable "$configure" <> build.log echo "$name: \$@" \${PYTHONOPT:+PYTHONOPT=\$PYTHONOPT} >> build.log OUT for file; do mkdir -p "$(dirname "${path}/${file}")" touch "${path}/${file}" done tar czf "${path}.tar.gz" -C "${path%/*}" "$name" } stub_make_install() { stub "$MAKE" \ " : echo \"$MAKE \$@\" >> build.log" \ "${1:-install} : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'" } assert_build_log() { run cat "$INSTALL_ROOT/build.log" assert_output } @test "yaml is installed for python" { cached_tarball "yaml-0.1.6" cached_tarball "Python-3.6.2" for i in {1..10}; do stub uname '-s : echo Linux'; done stub brew false stub_make_install stub_make_install install_fixture definitions/needs-yaml assert_success unstub uname unstub make assert_build_log <> build.log' TMPDIR="$TMP" install_fixture --patch definitions/needs-yaml <<<"" assert_success unstub uname unstub make unstub patch assert_build_log <> build.log' TMPDIR="$TMP" install_fixture --patch definitions/needs-yaml <<<"diff --git a/script.py" assert_success unstub uname unstub make unstub patch assert_build_log <>"$tcl_tk_libdir/lib/tclConfig.sh" for i in {1..9}; do stub uname '-s : echo Darwin'; done for i in {1..2}; do stub sw_vers '-productVersion : echo 1010'; done stub brew false stub brew "--prefix tcl-tk@8 : echo '$tcl_tk_libdir'" for i in {1..3}; do stub brew false; done stub_make_install run_inline_definition <> build.log' stub_make_install export PYTHON_CONFIGURE="${TMP}/custom-configure" run_inline_definition <&2; echo 4.2.1' run_inline_definition < ./configure < "${TMP}/definitions/2.7.8-test" mkdir -p "${TMP}/other" echo false > "${TMP}/other/2.7.8-test" run bin/python-build "2.7.8-test" "${TMP}/install" assert_success "" } @test "installing nonexistent definition" { run python-build "nonexistent" "${TMP}/install" assert [ "$status" -eq 2 ] assert_output "python-build: definition not found: nonexistent" } @test "sorting Python versions" { export PYTHON_BUILD_ROOT="$TMP" mkdir -p "${PYTHON_BUILD_ROOT}/share/python-build" expected="2.7-dev 2.7 2.7.1 2.7.2 2.7.3 3.4.0 3.4-dev 3.4.1 3.4.2 jython-dev jython-2.5.0 jython-2.5-dev jython-2.5.1 jython-2.5.2 jython-2.5.3 jython-2.5.4-rc1 jython-2.7-beta1 jython-2.7-beta2 jython-2.7-beta3" for ver in "$expected"; do touch "${PYTHON_BUILD_ROOT}/share/python-build/$ver" done run python-build --definitions assert_success "$expected" } @test "removing duplicate Python versions" { export PYTHON_BUILD_ROOT="$TMP" export PYTHON_BUILD_DEFINITIONS="${PYTHON_BUILD_ROOT}/share/python-build" mkdir -p "$PYTHON_BUILD_DEFINITIONS" touch "${PYTHON_BUILD_DEFINITIONS}/2.7.8" touch "${PYTHON_BUILD_DEFINITIONS}/3.4.2" run python-build --definitions assert_success assert_output < http://example.com/packages/package-1.0.0.tar.gz" assert_output_contains "error: failed to download package-1.0.0.tar.gz" } @test "using aria2c if available" { export PYTHON_BUILD_ARIA2_OPTS= export -n PYTHON_BUILD_HTTP_CLIENT stub aria2c "--allow-overwrite=true --no-conf=true -d * -o * http://example.com/* : cp $FIXTURE_ROOT/\${7##*/} \$6" install_fixture definitions/without-checksum assert_success assert_output < http://example.com/packages/package-1.0.0.tar.gz Installing package-1.0.0... Installed package-1.0.0 to ${TMP}/install OUT unstub aria2c } @test "fetching from git repository" { stub git "clone --depth 1 --branch master http://example.com/packages/package.git package-dev : mkdir package-dev" run_inline_definition <dQ:&Kiul+$:Fc(pyenv-2.5.4/plugins/python-build/test/hooks.bats000066400000000000000000000040561476513315000217510ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper setup() { export PYENV_ROOT="${TMP}/pyenv" export HOOK_PATH="${TMP}/i has hooks" mkdir -p "$HOOK_PATH" } @test "pyenv-install hooks" { cat > "${HOOK_PATH}/install.bash" < "$definition" <<<"echo python-build" run pyenv-install "$definition" assert_success assert_output <<-OUT before: ${PYENV_ROOT}/versions/3.6.2 python-build after: 0 rehashed OUT } @test "pyenv-uninstall hooks" { cat > "${HOOK_PATH}/uninstall.bash" < "${HOOK_PATH}/uninstall.bash" <&2 assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] unstub curl unstub shasum } @test "package URL with checksum but no shasum support bypasses mirror" { stub shasum false stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] unstub curl unstub shasum } @test "package URL with checksum hits mirror first" { local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" stub shasum true "echo $checksum" stub curl "-*I* $mirror_url : true" \ "-q -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] unstub curl unstub shasum } @test "package is fetched from original URL if mirror download fails" { local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" stub shasum true "echo $checksum" stub curl "-*I* $mirror_url : false" \ "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] unstub curl unstub shasum } @test "package is fetched from mirror when checksum is invalid if SKIP_CHECKSUM set" { export PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM=1 export PYTHON_BUILD_MIRROR_URL=https://custom.mirror.org export URL_BASE=example.com local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" stub shasum false stub curl "-*I* : true" \ "-q -o * -*S* https://custom.mirror.org/* : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \ install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] unstub curl unstub shasum unset PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM } @test "package is fetched from original URL if mirror download checksum is invalid" { local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" stub shasum true "echo invalid" "echo $checksum" stub curl "-*I* $mirror_url : true" \ "-q -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \ "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" install_fixture definitions/with-checksum echo "$output" >&2 assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] unstub curl unstub shasum } @test "default mirror URL" { export PYTHON_BUILD_MIRROR_URL= local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" stub shasum true "echo $checksum" stub curl "-*I* : true" \ "-q -o * -*S* https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \ install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] unstub curl unstub shasum } @test "package URL with ruby-lang CDN with default mirror URL will bypasses mirror" { export PYTHON_BUILD_MIRROR_URL= local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" stub shasum true "echo $checksum" stub curl "-q -o * -*S* https://www.python.org/* : cp $FIXTURE_ROOT/\${5##*/} \$3" run_inline_definition <&2 && exit 2' stub_python_build "--definitions : echo 2.6.9 2.7.9-rc1 2.7.9-rc2 3.4.2 | tr ' ' $'\\n'" run pyenv-install 2.7.9 assert_failure assert_output <&2 && exit 2' \ "--definitions : true" run pyenv-install 1.9.3 assert_failure assert_output < "$file" chmod +x "$file" } cached_tarball() { mkdir -p "$PYTHON_BUILD_CACHE_PATH" pushd "$PYTHON_BUILD_CACHE_PATH" >/dev/null tarball "$@" popd >/dev/null } tarball() { local name="$1" local path="$PWD/$name" local configure="$path/configure" shift 1 executable "$configure" <> build.log echo "$name: \$@" \${PYTHONOPT:+PYTHONOPT=\$PYTHONOPT} >> build.log OUT for file; do mkdir -p "$(dirname "${path}/${file}")" touch "${path}/${file}" done tar czf "${path}.tar.gz" -C "${path%/*}" "$name" } stub_make_install() { stub "$MAKE" \ " : echo \"$MAKE \$@\" >> build.log" \ "install : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'" } assert_build_log() { run cat "$INSTALL_ROOT/build.log" assert_output } install_patch() { local name="$1" local patch="$2" [ -n "$patch" ] || patch="python.patch" mkdir -p "${TMP_FIXTURES}/${name%/*}/patches/${name##*/}/${patch%/*}" cat > "${TMP_FIXTURES}/${name%/*}/patches/${name##*/}/${patch}" } install_tmp_fixture() { local args while [ "${1#-}" != "$1" ]; do args="$args $1" shift 1 done local name="$1" local destination="$2" [ -n "$destination" ] || destination="$INSTALL_ROOT" # Copy fixture to temporary path mkdir -p "${TMP_FIXTURES}/${name%/*}" cp "${FIXTURE_ROOT}/${name}" "${TMP_FIXTURES}/${name}" run python-build $args "$TMP_FIXTURES/$name" "$destination" } resolve_link() { $(type -P greadlink readlink | head -n1) "$1" } run_inline_definition_with_name() { local definition_name="build-definition" case "$1" in "--name="* ) local definition_name="${1#--name=}" shift 1 ;; esac local definition="${TMP}/${definition_name}" cat > "$definition" run python-build "$definition" "${1:-$INSTALL_ROOT}" } @test "apply built-in python patch before building" { cached_tarball "Python-3.6.2" stub brew false stub_make_install stub patch ' : echo patch "$@" | sed -E "s/\.[[:alnum:]]+$/.XXX/" >> build.log' echo | install_patch definitions/vanilla-python "Python-3.6.2/empty.patch" # yyuu/pyenv#257 stub uname '-s : echo Linux' stub uname '-s : echo Linux' TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null assert_success assert_build_log <> build.log' echo "foo" | install_patch definitions/vanilla-python "Python-3.6.2/foo.patch" echo "bar" | install_patch definitions/vanilla-python "Python-3.6.2/bar.patch" echo "baz" | install_patch definitions/vanilla-python "Python-3.6.2/baz.patch" for i in {1..2}; do stub uname '-s : echo Linux'; done TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null assert_success assert_build_log <> build.log" \ " : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'" for i in {1..4}; do stub uname '-s : echo Darwin'; done PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null assert_success assert_build_log < "${INSTALL_ROOT}/bin/python" #!$BASH echo "python \$@" >> "${INSTALL_ROOT}/build.log" OUT chmod +x "${INSTALL_ROOT}/bin/python" PYTHON_MAKE_INSTALL_TARGET="" TMPDIR="$TMP" run_inline_definition < "${INSTALL_ROOT}/bin/python" #!$BASH echo "python \$@" >> "${INSTALL_ROOT}/build.log" OUT chmod +x "${INSTALL_ROOT}/bin/python" PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$TMP" run_inline_definition <> build.log" \ " : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'" PYTHON_CONFIGURE_OPTS="--enable-unicode=ucs2" TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null assert_success assert_build_log <>"${!_STUB_LOG}"; fi [ -e "${!_STUB_PLAN}" ] || exit 1 [ -n "${!_STUB_RUN}" ] || eval "${_STUB_RUN}"="${TMPDIR}/${program}-stub-run" # Initialize or load the stub run information. eval "${_STUB_INDEX}"=1 eval "${_STUB_RESULT}"=0 if test -e "${!_STUB_RUN}"; then source "${!_STUB_RUN}"; fi # Loop over each line in the plan. index=0 while IFS= read -r line; do index=$(($index + 1)) if [ -z "${!_STUB_END}" ] && [ $index -eq "${!_STUB_INDEX}" ]; then # We found the plan line we're interested in. # Start off by assuming success. result=0 # Split the line into an array of arguments to # match and a command to run to produce output. command=" $line" if [ "$command" != "${command/ : }" ]; then patterns="${command%% : *}" command="${command#* : }" fi # Naively split patterns by whitespace for now. # In the future, use a sed script to split while # respecting quoting. set -f patterns=($patterns) set +f arguments=("$@") # Match the expected argument patterns to actual # arguments. for (( i=0; i<${#patterns[@]}; i++ )); do pattern="${patterns[$i]}" argument="${arguments[$i]}" case "$argument" in $pattern ) ;; * ) result=1 ;; esac done # If the arguments matched, evaluate the command # in a subshell. Otherwise, log the failure. if [ $result -eq 0 ] ; then set +e ( eval "$command" ) status="$?" set -e else eval "${_STUB_RESULT}"=1 fi fi done < "${!_STUB_PLAN}" if [ -n "${!_STUB_END}" ]; then # If the number of lines in the plan is larger than # the requested index, we failed. if [ $index -ge "${!_STUB_INDEX}" ]; then eval "${_STUB_RESULT}"=1 fi if [ "${!_STUB_RESULT}" -ne 0 ]; then { echo "index: $index; stub index: ${!_STUB_INDEX}" echo "plan:" cat "${!_STUB_PLAN}" || true echo "run:" cat "${!_STUB_RUN}" || true echo "log:" cat "${!_STUB_LOG}" || true } >&2 fi # Clean up the run file. rm -f "${!_STUB_RUN}" rm -f "${!_STUB_LOG}" # Return the result. exit "${!_STUB_RESULT}" else # If the requested index is larger than the number # of lines in the plan file, we failed. if [ "${!_STUB_INDEX}" -gt $index ]; then eval "${_STUB_RESULT}"=1 fi # Write out the run information. { echo "${_STUB_INDEX}=$((${!_STUB_INDEX} + 1))" echo "${_STUB_RESULT}=${!_STUB_RESULT}" } > "${!_STUB_RUN}" exit "$status" fi pyenv-2.5.4/plugins/python-build/test/test_helper.bash000066400000000000000000000072141476513315000231270ustar00rootroot00000000000000export TMP="$BATS_TEST_DIRNAME/tmp" export PYTHON_BUILD_CURL_OPTS= export PYTHON_BUILD_HTTP_CLIENT="curl" if [ "$FIXTURE_ROOT" != "$BATS_TEST_DIRNAME/fixtures" ]; then export FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures" export INSTALL_ROOT="$TMP/install" PATH="/usr/bin:/bin:/usr/sbin:/sbin" if [ "FreeBSD" = "$(uname -s)" ]; then PATH="/usr/local/bin:$PATH" fi PATH="$BATS_TEST_DIRNAME/../bin:$PATH" PATH="$TMP/bin:$PATH" export PATH fi teardown() { rm -fr "${TMP:?}"/* } stub() { local program="$1" local prefix="$(echo "$program" | tr a-z- A-Z_)" shift export "${prefix}_STUB_PLAN"="${TMP}/${program}-stub-plan" export "${prefix}_STUB_RUN"="${TMP}/${program}-stub-run" export "${prefix}_STUB_LOG"="${TMP}/${program}-stub-log" export "${prefix}_STUB_END"= mkdir -p "${TMP}/bin" ln -sf "${BATS_TEST_DIRNAME}/stubs/stub" "${TMP}/bin/${program}" touch "${TMP}/${program}-stub-plan" for arg in "$@"; do printf "%s\n" "$arg" >> "${TMP}/${program}-stub-plan"; done } unstub() { local program="$1" local prefix="$(echo "$program" | tr a-z- A-Z_)" local path="${TMP}/bin/${program}" export "${prefix}_STUB_END"=1 local STATUS=0 "$path" || STATUS="$?" rm -f "$path" rm -f "${TMP}/${program}-stub-plan" "${TMP}/${program}-stub-run" return "$STATUS" } run_inline_definition() { local definition="${TMP}/build-definition" cat > "$definition" run python-build "$definition" "${1:-$INSTALL_ROOT}" } install_fixture() { local args while [ "${1#-}" != "$1" ]; do args="$args $1" shift 1 done local name="$1" local destination="$2" [ -n "$destination" ] || destination="$INSTALL_ROOT" run python-build $args "$FIXTURE_ROOT/$name" "$destination" } assert() { if ! "$@"; then flunk "failed: $@" fi } refute() { if "$@"; then flunk "expected to fail: $@" fi } flunk() { { if [ "$#" -eq 0 ]; then cat - else echo "$@" fi } | sed "s:${TMP}:\${TMP}:g" >&2 return 1 } assert_success() { if [ "$status" -ne 0 ]; then { echo "command failed with exit status $status" echo "output: $output" } | flunk elif [ "$#" -gt 0 ]; then assert_output "$1" fi } assert_failure() { if [ "$status" -eq 0 ]; then flunk "expected failed exit status" elif [ "$#" -gt 0 ]; then assert_output "$1" fi } assert_equal() { if [ "$1" != "$2" ]; then { echo "expected:" echo "$1" echo "actual:" echo "$2" } | flunk fi } assert_output() { local expected if [ $# -eq 0 ]; then expected="$(cat -)" else expected="$1" fi assert_equal "$expected" "$output" } assert_output_contains() { local expected="$1" if [ -z "$expected" ]; then echo "assert_output_contains needs an argument" >&2 return 1 fi echo "$output" | $(type -P ggrep grep | head -n1) -F "$expected" >/dev/null || { { echo "expected output to contain $expected" echo "actual: $output" } | flunk } } # Output a modified PATH that ensures that the given executable is not present, # but in which system utils necessary for pyenv operation are still available. path_without() { local path=":${PATH}:" for exe; do local found alt util for found in $(PATH="$path" type -aP "$exe"); do found="${found%/*}" if [ "$found" != "${PYENV_ROOT}/shims" ]; then alt="${PYENV_TEST_DIR}/$(echo "${found#/}" | tr '/' '-')" mkdir -p "$alt" for util in bash head cut readlink greadlink; do if [ -x "${found}/$util" ]; then ln -s "${found}/$util" "${alt}/$util" fi done path="${path/:${found}:/:${alt}:}" fi done done path="${path#:}" path="${path%:}" echo "$path" } pyenv-2.5.4/plugins/python-build/test/tmp/000077500000000000000000000000001476513315000205465ustar00rootroot00000000000000pyenv-2.5.4/plugins/python-build/test/tmp/.gitignore000066400000000000000000000000021476513315000225260ustar00rootroot00000000000000* pyenv-2.5.4/plugins/python-build/test/version.bats000066400000000000000000000020311476513315000223020ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper bats_bin="${BATS_TEST_DIRNAME}/../bin/python-build" static_version="$(grep VERSION "$bats_bin" | head -n1 | cut -d'"' -f 2)" @test "python-build static version" { stub git 'echo "ASPLODE" >&2; exit 1' run python-build --version assert_success "python-build ${static_version}" unstub git } @test "python-build git version" { stub git \ 'remote -v : echo origin https://github.com/pyenv/pyenv.git' \ "describe --tags HEAD : echo v1984-12-gSHA" run python-build --version assert_success "python-build 1984-12-gSHA" unstub git } @test "git describe fails" { stub git \ 'remote -v : echo origin https://github.com/pyenv/pyenv.git' \ "describe --tags HEAD : echo ASPLODE >&2; exit 1" run python-build --version assert_success "python-build ${static_version}" unstub git } @test "git remote doesn't match" { stub git \ 'remote -v : echo origin https://github.com/Homebrew/homebrew.git' run python-build --version assert_success "python-build ${static_version}" } pyenv-2.5.4/pyenv.d/000077500000000000000000000000001476513315000142535ustar00rootroot00000000000000pyenv-2.5.4/pyenv.d/exec/000077500000000000000000000000001476513315000151775ustar00rootroot00000000000000pyenv-2.5.4/pyenv.d/exec/pip-rehash.bash000066400000000000000000000010251476513315000200740ustar00rootroot00000000000000PYENV_PIP_REHASH_ROOT="${BASH_SOURCE[0]%/*}/pip-rehash" PYENV_REHASH_COMMAND="${PYENV_COMMAND##*/}" # Remove any version information, from e.g. "pip2" or "pip3.4". if [[ $PYENV_REHASH_COMMAND =~ ^(pip|easy_install)[23](\.\d)?$ ]]; then PYENV_REHASH_COMMAND="${BASH_REMATCH[1]}" fi if [ -x "${PYENV_PIP_REHASH_ROOT}/${PYENV_REHASH_COMMAND}" ]; then PYENV_COMMAND_PATH="${PYENV_PIP_REHASH_ROOT}/${PYENV_REHASH_COMMAND##*/}" PYENV_BIN_PATH="${PYENV_PIP_REHASH_ROOT}" export PYENV_REHASH_REAL_COMMAND="${PYENV_COMMAND##*/}" fi pyenv-2.5.4/pyenv.d/exec/pip-rehash/000077500000000000000000000000001476513315000172375ustar00rootroot00000000000000pyenv-2.5.4/pyenv.d/exec/pip-rehash/conda000077500000000000000000000013071476513315000202520ustar00rootroot00000000000000#!/usr/bin/env bash set -e [ -n "$PYENV_DEBUG" ] && set -x # Remove pyenv-pip-rehash/libexec from PATH to avoid infinite loops in `pyenv-which` (yyuu/pyenv#146) _PATH=":${PATH}:" _HERE="$(dirname "${BASH_SOURCE[0]}")" # remove this from PATH _PATH="${_PATH//:${_HERE}:/:}" _PATH="${_PATH#:}" _PATH="${_PATH%:}" PATH="${_PATH}" PYENV_COMMAND_PATH="$(pyenv-which "${PYENV_REHASH_REAL_COMMAND}")" PYENV_BIN_PATH="${PYENV_COMMAND_PATH%/*}" export PATH="${PYENV_BIN_PATH}:${PATH}" STATUS=0 "$PYENV_COMMAND_PATH" "$@" || STATUS="$?" # Run `pyenv-rehash` after a successful installation. if [ "$STATUS" == "0" ]; then case "$1" in "install" | "remove" | "uninstall") pyenv-rehash;; esac fi exit "$STATUS" pyenv-2.5.4/pyenv.d/exec/pip-rehash/easy_install000077500000000000000000000012131476513315000216510ustar00rootroot00000000000000#!/usr/bin/env bash set -e [ -n "$PYENV_DEBUG" ] && set -x # Remove pyenv-pip-rehash/libexec from PATH to avoid infinite loops in `pyenv-which` (yyuu/pyenv#146) _PATH=":${PATH}:" _HERE="$(dirname "${BASH_SOURCE[0]}")" # remove this from PATH _PATH="${_PATH//:${_HERE}:/:}" _PATH="${_PATH#:}" _PATH="${_PATH%:}" PATH="${_PATH}" PYENV_COMMAND_PATH="$(pyenv-which "${PYENV_REHASH_REAL_COMMAND}")" PYENV_BIN_PATH="${PYENV_COMMAND_PATH%/*}" export PATH="${PYENV_BIN_PATH}:${PATH}" STATUS=0 "$PYENV_COMMAND_PATH" "$@" || STATUS="$?" # Run `pyenv-rehash` after a successful installation. if [ "$STATUS" == "0" ]; then pyenv-rehash fi exit "$STATUS" pyenv-2.5.4/pyenv.d/exec/pip-rehash/pip000077500000000000000000000013601476513315000177550ustar00rootroot00000000000000#!/usr/bin/env bash set -e [ -n "$PYENV_DEBUG" ] && set -x # Remove pyenv-pip-rehash/libexec from PATH to avoid infinite loops in `pyenv-which` (yyuu/pyenv#146) _PATH=":${PATH}:" _HERE="$(dirname "${BASH_SOURCE[0]}")" # remove this from PATH _PATH="${_PATH//:${_HERE}:/:}" _PATH="${_PATH#:}" _PATH="${_PATH%:}" PATH="${_PATH}" PYENV_COMMAND_PATH="$(pyenv-which "${PYENV_REHASH_REAL_COMMAND}")" PYENV_BIN_PATH="${PYENV_COMMAND_PATH%/*}" export PATH="${PYENV_BIN_PATH}:${PATH}" STATUS=0 "$PYENV_COMMAND_PATH" "$@" || STATUS="$?" # Run `pyenv-rehash` after a successful installation. if [ "$STATUS" == "0" ]; then for piparg in "$@"; do case ${piparg} in "install" | "uninstall" ) pyenv-rehash ; break;; esac done fi exit "$STATUS" pyenv-2.5.4/pyenv.d/install/000077500000000000000000000000001476513315000157215ustar00rootroot00000000000000pyenv-2.5.4/pyenv.d/install/latest.bash000066400000000000000000000014751476513315000200630ustar00rootroot00000000000000pyenv_install_resolve_latest() { local DEFINITION_PREFIX DEFINITION_TYPE local -a DEFINITION_CANDIDATES local DEFINITION="$1" DEFINITION_PREFIX="${DEFINITION%%:*}" DEFINITION_TYPE="${DEFINITION_PREFIX%%-*}" # TODO: support non-CPython versions if [[ "${DEFINITION}" != "${DEFINITION_PREFIX}" ]]; then DEFINITION_CANDIDATES=(\ $(python-build --definitions | \ grep -F "${DEFINITION_PREFIX}" | \ grep "^${DEFINITION_TYPE}" | \ sed -E -e '/-dev$/d' -e '/-src$/d' -e '/(b|rc)[0-9]+$/d' -e '/[0-9]+t$/d' | \ sort -t. -k1,1r -k 2,2nr -k 3,3nr \ || true)) DEFINITION="${DEFINITION_CANDIDATES}" fi echo "$DEFINITION" } for i in ${!DEFINITIONS[*]}; do DEFINITIONS[$i]="$(pyenv_install_resolve_latest "${DEFINITIONS[$i]}")" done unset pyenv_install_resolve_latest pyenv-2.5.4/pyenv.d/rehash/000077500000000000000000000000001476513315000155255ustar00rootroot00000000000000pyenv-2.5.4/pyenv.d/rehash/conda.bash000066400000000000000000000042431476513315000174530ustar00rootroot00000000000000# Anaconda comes with binaries of system packages (e.g. `openssl`, `curl`). # Creating shims for those binaries will prevent pyenv users to run those # commands normally when not using Anaconda. # # This hooks is intended to skip creating shims for those executables. conda_exists() { shopt -s dotglob nullglob local condas=($(echo "${PYENV_ROOT}/versions/"*"/bin/conda" "${PYENV_ROOT}/versions/"*"/envs/"*"/bin/conda")) shopt -u dotglob nullglob [ -n "${condas}" ] } if conda_exists; then # Reads the list of `blacklisted` conda binaries # from `conda.d/default.list` and creates a function # `conda_shim` to skip creating shims for those binaries. build_conda_exclusion_list() { shims=() for shim in $(sed 's/#.*$//; /^[[:space:]]*$/d' "${BASH_SOURCE%/*}/conda.d/default.list"); do if [ -n "${shim##*/}" ]; then shims[${#shims[*]}]="${shim})return 0;;" fi done eval \ "conda_shim() { case \"\${1##*/}\" in ${shims[@]} *) return 1;; esac }" } # override `make_shims` to avoid conflict between pyenv-virtualenv's `envs.bash` # https://github.com/pyenv/pyenv-virtualenv/blob/v20160716/etc/pyenv.d/rehash/envs.bash # The only difference between this `make_shims` and the `make_shims` defined # in `libexec/pyenv-rehash` is that this one calls `conda_shim` to check # if shim is blacklisted. If blacklisted -> skip creating shim. make_shims() { local file shim for file do shim="${file##*/}" if ! conda_shim "${shim}" 1>&2; then register_shim "$shim" fi done } deregister_conda_shims() { # adapted for Bash 4.x's associative array (#1749) if declare -p registered_shims 2> /dev/null | grep -Eq '^(declare|typeset) -A'; then for shim in ${!registered_shims[*]}; do if conda_shim "${shim}" 1>&2; then unset registered_shims[${shim}] fi done else local shim local shims=() for shim in ${registered_shims}; do if ! conda_shim "${shim}" 1>&2; then shims[${#shims[*]}]="${shim}" fi done registered_shims=" ${shims[@]} " fi } build_conda_exclusion_list deregister_conda_shims fi pyenv-2.5.4/pyenv.d/rehash/conda.d/000077500000000000000000000000001476513315000170335ustar00rootroot00000000000000pyenv-2.5.4/pyenv.d/rehash/conda.d/.gitignore000066400000000000000000000000361476513315000210220ustar00rootroot00000000000000* !/.gitignore !/default.list pyenv-2.5.4/pyenv.d/rehash/conda.d/default.list000066400000000000000000000030371476513315000213570ustar00rootroot00000000000000bunzip2 clear # curl curl curl-config # fontconfig fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan fc-validate # freetype freetype-config # libglib2.0-bin gapplication gdbus gresource gsettings gio-querymodules glib-compile-resources glib-compile-schemas infocmp # libpng libpng-config # libxml2 xml2-config # libxml2-utils xmlcatalog xmllint # ncurses tput # openssl openssl # qtchooser assistant designer lconvert linguist lrelease lupdate moc pixeltool qcollectiongenerator qdbus qdbuscpp2xml qdbusviewer qdbusxml2cpp qhelpconverter qhelpgenerator qmake qmlplugindump qmlviewer qtconfig rcc uic xmlpatterns xmlpatternsvalidator # redis redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server # sed sed # sqlite3 sqlite3 # xslt-config xslt-config # xsltproc xsltproc # xz unxz xz xzcat xzcmd xzdiff xzegrep xzfgrep xzgrep xzless xzmore reset # --- start exclusions from coreutils [ b2sum base32 base64 basename basenc cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false fmt fold greadlink groups head hostid id install join kill link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf sleep sort split stat stdbuf stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink uptime users vdir wc who whoami yes # --- end exclusions from coreutilspyenv-2.5.4/pyenv.d/rehash/source.bash000066400000000000000000000015461476513315000176720ustar00rootroot00000000000000PROTOTYPE_SOURCE_SHIM_PATH="${SHIM_PATH}/.pyenv-source-shim" shims=() shopt -s nullglob for shim in $(cat "${BASH_SOURCE%/*}/source.d/"*".list" | sort | uniq | sed -e 's/#.*$//' | sed -e '/^[[:space:]]*$/d'); do if [ -n "${shim##*/}" ]; then shims[${#shims[*]}]="${shim})return 0;;" fi done shopt -u nullglob eval "source_shim(){ case \"\${1##*/}\" in ${shims[@]} *)return 1;;esac;}" cat > "${PROTOTYPE_SOURCE_SHIM_PATH}" </dev/null; then CC=gcc else echo "warning: gcc not found; using CC=cc" >&2 CC=cc fi fi if ! type -p "$CC" >/dev/null; then echo "aborted: compiler not found: $CC" >&2 exit 1 fi case "$(uname -s)" in Darwin* ) host_os="darwin$(uname -r)" ;; FreeBSD* ) host_os="freebsd$(uname -r)" ;; OpenBSD* ) host_os="openbsd$(uname -r)" ;; * ) host_os="linux-gnu" esac eval "$("$src_dir"/shobj-conf -C "$CC" -o "$host_os")" sed " s#@CC@#${CC}# s#@CFLAGS@#${CFLAGS}# s#@LOCAL_CFLAGS@#${LOCAL_CFLAGS}# s#@DEFS@#${DEFS}# s#@LOCAL_DEFS@#${LOCAL_DEFS}# s#@SHOBJ_CC@#${SHOBJ_CC}# s#@SHOBJ_CFLAGS@#${SHOBJ_CFLAGS}# s#@SHOBJ_LD@#${SHOBJ_LD}# s#@SHOBJ_LDFLAGS@#${SHOBJ_LDFLAGS}# s#@SHOBJ_XLDFLAGS@#${SHOBJ_XLDFLAGS}# s#@SHOBJ_LIBS@#${SHOBJ_LIBS}# s#@SHOBJ_STATUS@#${SHOBJ_STATUS}# " "$src_dir"/Makefile.in > "$src_dir"/Makefile pyenv-2.5.4/src/realpath.c000066400000000000000000000015001476513315000154170ustar00rootroot00000000000000#include "bash.h" #include #include int realpath_builtin(list) WORD_LIST *list; { int es; char *realbuf, *p; if (list == 0) { // builtin_usage(); return (EX_USAGE); } for (es = EXECUTION_SUCCESS; list; list = list->next) { p = list->word->word; realbuf = realpath(p, NULL); if (realbuf == NULL) { es = EXECUTION_FAILURE; // builtin_error("%s: cannot resolve: %s", p, strerror(errno)); } else { printf("%s\n", realbuf); free(realbuf); } } return es; } char *realpath_doc[] = { "Display each PATHNAME argument, resolving symbolic links. The exit status", "is 0 if each PATHNAME was resolved; non-zero otherwise.", (char *)NULL }; struct builtin realpath_struct = { "realpath", realpath_builtin, BUILTIN_ENABLED, realpath_doc, "realpath pathname [pathname...]", 0 }; pyenv-2.5.4/src/shobj-conf000077500000000000000000000345501476513315000154440ustar00rootroot00000000000000#! /bin/sh # # shobj-conf -- output a series of variable assignments to be substituted # into a Makefile by configure which specify system-dependent # information for creating shared objects that may be loaded # into bash with `enable -f' # # usage: shobj-conf [-C compiler] -c host_cpu -o host_os -v host_vendor # # Chet Ramey # chet@po.cwru.edu # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is part of GNU Bash, the Bourne Again SHell. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # # defaults # SHOBJ_STATUS=supported SHLIB_STATUS=supported SHOBJ_CC=cc SHOBJ_CFLAGS= SHOBJ_LD= SHOBJ_LDFLAGS= SHOBJ_XLDFLAGS= SHOBJ_LIBS= SHLIB_XLDFLAGS= SHLIB_LIBS= SHLIB_DOT='.' SHLIB_LIBPREF='lib' SHLIB_LIBSUFF='so' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)' SHLIB_DLLVERSION='$(SHLIB_MAJOR)' PROGNAME=`basename $0` USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor" while [ $# -gt 0 ]; do case "$1" in -C) shift; SHOBJ_CC="$1"; shift ;; -c) shift; host_cpu="$1"; shift ;; -o) shift; host_os="$1"; shift ;; -v) shift; host_vendor="$1"; shift ;; *) echo "$USAGE" >&2 ; exit 2;; esac done case "${host_os}-${SHOBJ_CC}-${host_vendor}" in nsk-cc-tandem) SHOBJ_CFLAGS=-Wglobalized case `uname -m` in NSR*) SHOBJ_CFLAGS="${SHOBJ_CFLAGS} -Wcall_shared" # default on TNS/E, needed on TNS/R SHOBJ_LD=/usr/bin/ld # for TNS/R ;; NSE*|NEO*) SHOBJ_LD=/usr/bin/eld ;; esac SHOBJ_LDFLAGS='-shared -bglobalized -unres_symbols ignore' ;; sunos4*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD=/usr/bin/ld SHOBJ_LDFLAGS='-assert pure-text' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; sunos4*) SHOBJ_CFLAGS=-pic SHOBJ_LD=/usr/bin/ld SHOBJ_LDFLAGS='-assert pure-text' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; sunos5*-*gcc*|solaris2*-*gcc*) SHOBJ_LD='${CC}' ld_used=`gcc -print-prog-name=ld` if ${ld_used} -V 2>&1 | grep GNU >/dev/null 2>&1; then # This line works for the GNU ld SHOBJ_LDFLAGS='-shared -Wl,-h,$@' # http://sourceware.org/ml/binutils/2001-08/msg00361.html SHOBJ_CFLAGS=-fPIC else # This line works for the Solaris linker in /usr/ccs/bin/ld SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' SHOBJ_CFLAGS=-fpic fi # SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sunos5*|solaris2*) SHOBJ_CFLAGS='-K pic' SHOBJ_LD=/usr/ccs/bin/ld SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' # SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # All versions of Linux (including Gentoo/FreeBSD) or the semi-mythical GNU Hurd. linux*-*|gnu*-*|k*bsd*-gnu-*|freebsd*-gentoo) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; freebsd2*) SHOBJ_CFLAGS=-fpic SHOBJ_LD=ld SHOBJ_LDFLAGS='-x -Bshareable' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; # FreeBSD-3.x ELF freebsd3*|freebsdaout*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' else SHOBJ_LDFLAGS='-shared' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' fi ;; # FreeBSD-4.x and later have only ELF freebsd[4-9]*|freebsd1[0-9]*|freebsdelf*|dragonfly*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # Darwin/MacOS X darwin*) # Common definitions for all darwin/mac os x versions SHOBJ_CFLAGS='-fno-common' SHOBJ_LD='${CC}' SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)' SHLIB_LIBSUFF='dylib' # unused at this time SHLIB_SONAME='$(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF)' case "${host_os}" in # Darwin versions 1, 5, 6, 7 correspond to Mac OS X 10.0, 10.1, 10.2, # and 10.3, respectively. darwin[1-7].*) SHOBJ_STATUS=unsupported SHOBJ_LDFLAGS='-dynamic' SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' ;; # Darwin 8 == Mac OS X 10.4; Mac OS X 10.N == Darwin N+4 *) case "${host_os}" in darwin[89]*|darwin1[012]*) SHOBJ_ARCHFLAGS='-arch_only `/usr/bin/arch`' ;; *) # Mac OS X 10.9 (Mavericks) and later SHOBJ_ARCHFLAGS= # for 32 and 64bit universal library #SHOBJ_ARCHFLAGS='-arch i386 -arch x86_64' #SHOBJ_CFLAGS=${SHOBJ_CFLAGS}' -arch i386 -arch x86_64' ;; esac SHOBJ_LDFLAGS="-dynamiclib -dynamic -undefined dynamic_lookup ${SHOBJ_ARCHFLAGS}" SHLIB_XLDFLAGS="-dynamiclib ${SHOBJ_ARCHFLAGS}"' -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' ;; esac SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 ;; openbsd*|netbsd*|mirbsd*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; bsdi2*) SHOBJ_CC=shlicc2 SHOBJ_CFLAGS= SHOBJ_LD=ld SHOBJ_LDFLAGS=-r SHOBJ_LIBS=-lc_s.2.1.0 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in # the ass -- they require changing {/usr/lib,etc}/shlib.map on # each system, and the library creation process is byzantine SHLIB_STATUS=unsupported ;; bsdi3*) SHOBJ_CC=shlicc2 SHOBJ_CFLAGS= SHOBJ_LD=ld SHOBJ_LDFLAGS=-r SHOBJ_LIBS=-lc_s.3.0.0 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in # the ass -- they require changing {/usr/lib,etc}/shlib.map on # each system, and the library creation process is byzantine SHLIB_STATUS=unsupported ;; bsdi4*) # BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked # shared libraries. gcc 2.x is the standard compiler, and the # `normal' gcc options should work as they do in Linux. SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; osf*-*gcc*) # Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; osf*) SHOBJ_LD=ld SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com SHOBJ_CFLAGS=-fpic SHOBJ_LD='ld' SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' SHOBJ_XLDFLAGS='-G' SHLIB_XLDFLAGS='-bM:SRE' SHLIB_LIBS='-lcurses -lc' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; aix4.[2-9]*|aix[5-9].*) SHOBJ_CFLAGS=-K SHOBJ_LD='ld' SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' SHOBJ_XLDFLAGS='-G' SHLIB_XLDFLAGS='-bM:SRE' SHLIB_LIBS='-lcurses -lc' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # # THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface # irix[56]*-*gcc*) SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; irix[56]*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld # SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' # Change from David Kaelbling . If you have problems, # remove the `-no_unresolved' SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux9*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux9*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux10*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' # if you have problems linking here, moving the `-Wl,+h,$@' from # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux10*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s +h $@' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux11*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' # SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@' SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@' SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux11*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s +h $@' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv4*-*gcc*) SHOBJ_CFLAGS=-shared SHOBJ_LDFLAGS='-shared -h $@' SHOBJ_LD='${CC}' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv4*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-dy -z text -G -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sco3.2v5*-*gcc*) SHOBJ_CFLAGS='-fpic' # DEFAULTS TO ELF SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sco3.2v5*) SHOBJ_CFLAGS='-K pic -b elf' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5uw7*-*gcc*) SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5uw7*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5UnixWare*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5UnixWare*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5OpenUNIX*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5OpenUNIX*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; dgux*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; dgux*) SHOBJ_CFLAGS='-K pic' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; msdos*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported ;; cygwin*) SHOBJ_LD='$(CC)' SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' SHLIB_LIBPREF='cyg' SHLIB_LIBSUFF='dll' SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' SHLIB_LIBS='$(TERMCAP_LIB)' SHLIB_DOT= # For official cygwin releases, DLLVERSION will be defined in the # environment of configure, and will be incremented any time the API # changes in a non-backwards compatible manner. Otherwise, it is just # SHLIB_MAJOR. if [ -n "$DLLVERSION" ] ; then SHLIB_DLLVERSION="$DLLVERSION" fi ;; mingw*) SHOBJ_LD='$(CC)' SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' SHLIB_LIBSUFF='dll' SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' SHLIB_LIBS='$(TERMCAP_LIB)' SHLIB_DOT= # For official cygwin releases, DLLVERSION will be defined in the # environment of configure, and will be incremented any time the API # changes in a non-backwards compatible manner. Otherwise, it is just # SHLIB_MAJOR. if [ -n "$DLLVERSION" ] ; then SHLIB_DLLVERSION="$DLLVERSION" fi ;; # # Rely on correct gcc configuration for everything else # *-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; *) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported ;; esac echo SHOBJ_CC=\'"$SHOBJ_CC"\' echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\' echo SHOBJ_LD=\'"$SHOBJ_LD"\' echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\' echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\' echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\' echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\' echo SHLIB_LIBS=\'"$SHLIB_LIBS"\' echo SHLIB_DOT=\'"$SHLIB_DOT"\' echo SHLIB_LIBPREF=\'"$SHLIB_LIBPREF"\' echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\' echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\' echo SHLIB_DLLVERSION=\'"$SHLIB_DLLVERSION"\' echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\' echo SHLIB_STATUS=\'"$SHLIB_STATUS"\' exit 0 pyenv-2.5.4/terminal_output.png000066400000000000000000003144741476513315000166460ustar00rootroot00000000000000PNG  IHDRTP?I IDATxs]}{_D\+|dٱ̖L4 -)85Y. rMthLRFif0 )i Q$C2X2-ٖdm"7NZ5Ϲ zυG2 9$&ud GyNޏ.M{= *ma$K:~izT4|Q *k~@Y@{~_[6?k/{}_PPr@{=^TD."&=.den-iPMNHr_^Wz0'Ŕ5uy'׷j\)tPMO6?^,B\)dP O?彮*nX)LPPDkbŕ܃JoV (y{Z`ɻgTP׋9}PS@_彞/^_wA%%o<^BKoƕ*y^ (y "@{]tD+oX/D j$' !ymv/ĕoP#J`K!/u^.y9.}CQ)J0zD{Aa (JH#h!@RRlV+_N< h1+J/2$"GBV +_V(‰[QE -JJӠ UI@{3q%UP*!E<I!u^,[%TBH)r@W,g,WV6~)E(I:~_{]_cV+E*Rz@E:zecKKbJ/?, oyYW1?s觐R$DnZҫq%뾑YPŐR"$OJ?ԃJh"VzdbKށEX(((y#@^*+TJ/"Jœ?(?'[@P[AE~+U *Rz!& l%yJp闸JbA!%k$)!{}2Ru\)jT:)G~ 'yBKV+]^ )E(NL/K2^RU\)jX<qWJVQPr0 о .E ,kU*R-c4C:CLKĕԂV )E(NU_Y+VZ *E)i~(E%y8E\&dU!%݈RxUCk^+5WBX8)D^ &y :b~XTS )Q'PTE-E,W +iFMA%,JH3!ڍ-/u","KqHaUcJQBJI .iG^+E +IG!Rҋ$pz1-+݅~)Q(B߅?DxE/E ,E+U*[%dQz) @%YWz5Tؕ!(WIE^*^-Wz)[R])E )IFJǒ@?{/Rv\)ZX)nJ޻R )iFIzJDҫ%4wV*m!%U@)r87;y)Yڽ"UZ *+!bI?x~_@n^+B)Jh"CX*MV)E(y^ #yBL^_J?J^1%nn#JJBI?!S`&k%UTTSz5P 'I~M低M|3X=- *IŔ^ؕ%xR`}E .YG~+EܭTTTʮCJ%xG0C?WI+X+Vح0dSz)$%t+o7|3zAޯQ_9+RT) &FTyFZdSPI먯VdS~@/я~kTIcJ;G dqWQc=;fPz1% *IŔׯ@/~zQzTj꥘"@ku^*I4dyWF:+ z}=R pMA)FL*Ĕ?a h]ۨRޟdTivw4 *inbJS'|{q=a_ܯ+O+؝O _{Ws]_;ܱpo?LPD$JRC8릠Q_MI;?=x^׿t_Ŏ/^}7! wwuKX>Ѱ緆ao >^-[w\;_\2_>O~{ Dw>~/nO~1(7xQy*IQPI먯cJr)R审BP#_ }c|_!pc_z~ĢJ/U7qWsScJ<4)?Y~k(C R#NoMt?gHăG* ]*ֳRT>+UҚ_5JS,9z==$Trxw[|O;vw @^{Jy*JG%KeSPiuwJ?Ĕ_L-b`<؝g *??sk?c]{gzAo w<h]_JY*yNitWC;)j`-P4jQ!."NIbnJR䠒_;ˑ_FQ%y*yRTN_@(ăJG}Ջ)RSTMJËJ|&|(š'§v}& KѺzwUUK^TTj ou@vrWsSjŔW^y%y=)|9r_1%n _x1 +ߺ='S~n+4t:OݣإR3;%R/9//w %T{`{V὿-_fG ܝ?d@֢uJ+T<]*YNIꨯncJ }xPYB)lⸯ\x۷$T^=~Kؾs]_gSK<=|v?YWGn'qWT6폇_3]ǔ_3Cx7@QEDzC:+]*EܝQ_Doz/R..ʯ#\½]ߥ𫿾GSO~&|Xs]zY|m=y*.A(S:9՘تg+w;8g;OegJ+_~TvT?_L(JWQۣޥrPIs};G}u27%>('S]؎cRx C/׍(|9PXB)i3SoVx-὿=u#>/o %o$73ۿS ~F߸c̮Ȯ]vSTdH}_I o+d;%:Ŕ^ *R)=Rx{K_,/b`ŎXwOV?f'+ߺ%8Ѱ緆ao /~4|0;qGؾs_gp}2|`|"|;o'‡mG>>;̯uZQ%y*I.JVSܔ*q_-~ IDAT~=O~{Oj}~xg?3ۯO~]OLkw;Wkwܯ AQTdJGuK0vtsWܔM~]*JGKpMAޝ쨯FsS"@kuFG5*͎zJ~ iwJ۝ &aNI:k 1xLT5Ѻz+) VP).$T9+شJS^իRI+4ڥ_YU)W^TEѺzRدJ};Q_ .TEvvڱ_J}EiPjwʳ>gtJA]*VP)q_INrJ +W$K~5 *E>+) ʕ+R)_MJ}u3>) &ZWObJ7:aPivW;A%㾚NJShM.f飨_Qhد"0zSlw3<giiJcp*TǔVJZ;ٝ"@kA%]* o%zWAq_Ob}ShM.,j4G%UZ *VPv}'Ss,..vK%izTZ *IPIj}ShMTݥpNJ7~ *xWShM.^?릠츯JwDA%;EPăJUJUNfPiدJS8zwJT._5JnDQ+$}Ww*К(4ۥpNTZ=A%)IAZwK~5yP港$ *кxPb8}c2*YOVGoKr\t.VӧyWsTZ*iޝ"@kJ]*inv4 *$4:_NZ/]$@unӷzW9*QT"ģʦKP4 *U+4;9*͂JsT4?zS8駟/^^pƱ_A%ڥR9*$$yܗ4*A%IOa/^TEѺzIFkNҧ1?ZAhMı_Aޱ_IQIj0}ӠRS,ZXX^۱_IQ7VӷT:HN껠R Wp`dp_]VWPz cQPد4樤=g?Yk }RS9KPZU=VVիau0\k,ŃJ~%1G%IOs~J|wJq_TahPYVWυ=adx{?G QP pMh]cA^H}J * >VPig~J|wJuPN鋠RgNm,nr9,?Q)Cajr -(TcڝRTQIc0}A%Sng=?z*+Brcvбzc`fAޱ_ JZS$wTvP) dqPٿ>Ce|0w49*KH @J_R}WsT O{J.AYORN@ ;K%CHM O%d9?z: \@5,1%-8v-{BT 坣aĩ; Sr)ѹhͅ0=-<ܾ3bwca~VcЖ/pdt{206}4/=.ot.̟8v-sa*{t||0,^ #C_sbxҹ0?w4L4u5`;u{z9,/>OO=ag }ٿzgg=;I>)h]=cR蠒@wtP['Wޣ뱧0TGfw7Y.׬ٽGJkq\:  ٫axp:fFm~]rgMjr/ad&z] DՍ4f=TH9pz޽fϵ4[q  g뼦ʶ0:}f#2T '$[N<4:+9* O4ħwTHF}=䓹?&6Pn+FPYWn,?q4 3'blvaV0״|,6Z|/ 'H 92=/#hW/E0~`|(^-B/l. ÍeywkiZ}^T.É?pvn&N'auTg|hFX:NLcaȃafTXXn#XadgR#ӱxr.=&Caj6}q9Qk$u2|ɎfJ; *QT;YPi6?_Y oe~Jz;Naɵ9y!<|(̯f01k yx=P( 3т01\ca;LU멵x_ȾTT&ogǪv487Kg.N%x=5AjX]Y۵qdwSllqxrU?2th}UA<aVgXg44֣arkM9LR}WsTL(ģJRkJݠRԁ㾪JSz=J0Q{S?zAcAد^LxP7?^Pr }q_T GfO +HUAe!̍68&hEkpڱ48N7.GCJP*Z3aok/do JC7ƜybGq؝$ug#TVW9ވsjաvJ9mh>^{ag5Gz0};A%nǏ*O雠 0^+L$&TG) sˍ7RV* }/ *iQiw0}0\~;l~Ro~JTze V*C-ŃJA| gvohSog4BM;lEmA͎LKX7ד}^ZPP 3֣A<5WEFPI*IT]*xTHr };AJx≞*ȁAAep_Y B}<\܎mN_~ӂvXȎ]lr1fzѳ~P)JT^s+vJ>. af5eT?h]=J+sT: *RI4TOJQtPZΟӓѵJ8;w3).PT;'ϵ1W"60~<չ`O9K'u)YfNbe}.ʩ07s(LknײT~~!T掆#cիaapֆG\_}* Sԃazf&?v03Bv]߹t<^bƞwew=5Ih&L%T΄CaX ə{*MwIů/TN'l| g_Tj4}/TR/TvW(TjO&T4vPPlĂL{Ejs옉t5ZPߚpvwLo:F,{7xjHu{=5N4x~ZU9Tȑj[^sATPi4G%Tj &DQPA@VJkOT *+'XCaĩ|y}x0}`W щr|J%,?NL 5w8'.Ǯ%f f cjXY:玆Mv9%T֞㝣aPYÁM|&rؒRد7 *&Ԛ)J|~JZA@J"Sa,01GroVVTLmPvZKA%ڥR+\~=Ro };A@l~J@ *a|h>3fP&־Lk@6@.*J[kVǃJ+ *.o4H,秴TZ *O鿠Jy  A%QP5QPJA%*JU:RT *[IJA'L/l|v^ *QTiTZ٥iPi4:4R/H*JR *{p`l,9N/l ˮLٝxPU+ďTQT ?+TSZ *y TDP)z@[>}05lmѺzރ(T(*JΒ١2GVPi4E\JR=>ˠR=ҥK *НVŋ7`JU(tT $DbRo }+Aʕ+/AZ*9*+WTj JU*QTT1% *gT)踯xP7^PDG9*hJA%*voTOTSA%>>* Tsf`JUJUZ *ջT T)TT =I9*T"M *рxPyGs<裛J|JAڵkT^y啺A套^< *iF '>/իaurXZ8`P斯mX# Uyw< ; 3'CekX^<,_%ăJR,LOS\|(SHHuPQ*/^T飠LnP\P6 AK%Dsw#ʙ0s`W(o;ٍ&wͥR=׎%;{`[޶wLXYKmr;[Y=Uz[9qvr_Z*QT:AA%:+,'T\VPy'wv ?Lv4=oMy7FX]aHAep4Z{x=A%ڥRؠ=A%mPYXXT(T^Ow<# wAe#,{뇒ޙrǫՠR=ӠQ:BTsA%(ˉh~J<\|裏 *Y:>}w4?:k>6I+A<&Ź@_; *QThJA%*JUR **KKK]'xBP)y!Y or-g֯X~^P&*khd/p6R)¼ *(TsAoTy晎JRT2//Ϥ>]azqch{i/ Spb(ǫ:T*JU(}Py Tz)A0)sLZ *6BPyw03VJ|0}A%*~ *|M;ņ#^Q+ *QTI:\vEJ */zPY^^N$\xiPyGQLY9&L0‰QCW *Ճk/&Tu,JjPyW *W^T"y0vH>G}anX`Ta{𸲡8BmI(ăJU *QTT:*O>p"߱z!̎mJ04~j횮ʑ_OnP)ZaS;^d1^+ۚ(*Mjà o5gz-/ *QTiTRԠEAEPX9l,<N '=b|gItlAd`8+.^k"IP) Kװ4? GÉƵ- c9 }JA%HuP|rӠO*G͏6=Pt#d#Z\ tIzj_[AT Cr{|*L$QPJEJ4~g}RTԤTJSkB*a~zO{3K3GѮwlty=U: *R)w㡲ty,=N #v T*JWAgAW_T *(m(dTRT]A套^T%DQEP <ӂJ/իaujֶٞ-8u{T+}=Pհ'wrӠO *Y+W*M Y*gʹ_lm T++k`.5K#\rEP&&{P{/=:ŏSuw *Eu?[Nsa*TEA% /T*JҶ02: G&,g܉03`<&jQy4op!l .<ΜGԅE"#L/?ܩz9,/>OO=ag+Qapw>*aey*gÑ ޷#GS<իauLOmR,΄ca:[Ի[xb.4N&~ZA%p(R> m|͉sa~hhJ9,ᅥˣ׶:?ZumI}dl|n,( 'Nskyn}h_82{gze\?q8-8r*Ö>:?W:ٿzgg=;I>M~Ae!GЗJZPyA%Y X*@8?r,DݟoH*CB8R;^2:vw06{BIf ZGo5,pv-(, Lo,԰4W{OydYmvH9-W DskJA- g}X{J9쭠INs0Μ?7_ax!޵ 3x9aј?E ӗ?l^PFlD*Dؘsփf{ AEP}Rp2&~.5w]afև?&;-caقō301>&<fN @J?q4c'L8ȱ47Z3 nCCkm˳caP쟭ۖ= kkrM!ta0catyO8-1D9~l].JR[мN'֏{8 ap~rh4)sCAζ aqes#E ӓabpza.l6 W޽FKӭ'|=}Sv_jad:wV΅ӳ0>~(Lƿ/͂K9l"ml zAPYYYI<\|#QP&ܹ0K'\9 GōgpBy_9/Ūc*Na$aD%Z8da+ˢ?Y&U]?mՕ 5ahdWggckd;LEśǩjrszo߸>CL6tg-oK'o07>;cǾܸGjX&xJ=Tڽ?ɨs#uZC~XunG-4g]Sy93-FCyNT`VM\,@*= TB̂;i;lһZY*~Y߱AU=ɻ:W2kծW*P5'AvDkWf~w,J,͑IyݓZϯY9P92*}YZE4g_;0yi@*^om&ZFg.[T{9 nGxf^ƭkU*WTo4MUc٫\'cOڎ-A֪YM6x]݈'ZJ}9R)8Xzc.Špj7*c$sĬ6ZxxEg,4xއI|d Tڟ$L l}FRٽ3z-ԩVֺI}RMkV|Iއ8`^@@Y'{3?Uc"$`)[,TU**W>InUjjxƚpL5칪+ڳݫj_X\V;bQ*PuzCקӥZmw{)1IPٻ<@eٔS~/ݽ2*I~mVF67}R+*V>if06[}%gZk}`@UTTSWJ\xn4}$2S{g^&o귮UXt0T* ;}F Le=cflA&ӢȰ@%Oqz?WBkotD>!$?ٳ~/NT:i] Rꁊ2G95X_gaK50[_%#P^ofGVGz,oч>gC*T)_QMUvxԿN*g$*TRSCǝ&Scqʼ[Ox/;`ä4\I]Uy@%u?^߽H"lsfj _k>Eʖ*T`v`,/m?*ۛ;VDx[wJfJ+g=6f3ث@e*k~<:NrFW]^O Ԏ~zXec/Wi-4W\I]4QI6g{*l#cz\˴&%?^ *V!_4j1C? v([5Zlm1X.%`T-϶V1diyvrp`í]2FԶ#Tk5irr+}hVEWp`@%o߾7A6޷.Zβ7|V T} n3Ek]bVdD@TT&V*?}ي#ð7yEr}t/$1>*7: 9`NU -`5l&t&|Gr`]43؊?x1L̼<`GM9V88Dɔv|@sz%uZ71?PIu?/{#ߋdKw=`m/@}=_1PԈ-| @Ŭ~YLvm+P?@e2K#gn?r--̶@O"/'[jd?[aQsC5דJ0G*8 mVǸ&O}S٥mYЛ &}ujgOl;~SwOdF끚VwD~R/3K t_nn NOOG`J}āfR+5kpbw=7`Δ°wсfRY{Ŗ慊~ȶC ^MÿުJjz&=jʼz*P1*wVh= l{PjJʕk8plge)Y%/4^VrJFN^x͡+{>'J)P؇aQzJvznl|z{agjy:%[]T|{/o~f/)j+'>Ljܪ^QG}<9]ҥ*[ !fF?ɼ֭e[ҥԁkY2u9֩tpo帎Z|qj>އIh&^I݇EX7y׸'zRVG50@3 {y}:6*j0cə_czjr8r Uv+ۼg3_&ݸa!P!P2WX'9s]GO,稴JšYkuFQZOF lIB/}7VMVF2dۏxuq,8^X{ f Z2۟k2yyNھZu6){}=s%vӅ3T/ 4{mZ07Fl;{cߋd3>D2moٿǜ,zYWfY}uk>.ֲBBXsUڽ gѫʅ+^<~S9_IFZnQޠ?U^QtSǐ>SŽ7 jWK[ՂT*L i4xnV ֱj^_o{PӹR1Bdܩ704?ӸIx:)(<NW>2cCC#*ju_4|wtٻ0|W2-|Td|^mިI)T&#47m:0l+%+STm}ڿ[<ȶ՘:]ԖIb?O}-|:"JAA IDAT [@3L!P~/7hO1;C`-a̖_ztrFu$@UT&uv=+:Qoe6rUZ2 apmT聻HNUOV>ˉbag?@a{ +w#FB>S?ً:\w=HR܇[@lVǟ1ݪ-!P!P`T+UƏQ҅KUʶJrVP]^̱܇Lvߨ7S_@@| BM߾>܇Dl \Qñq Tz $Sl  T_@ ABb**  ABb**w 5LNec՝k2yפg+29x?9<*#P!P5㻗ʰó@%STޠ_ޣu[n?guZղN:zc3kl8j4zRzJ>h4<kjJ?೪ek[GdN+*W?ÂQNNJҥ*jôGq-^oz^dQQƭ?;' R1Z6_nܨRT|z!<;8YU=m?RU\i=ɻuíSz{z@b@*^ N0dd2gU2?kW?84**؈y8}jT|,5;s|ϾUz>KFUɳ{ṥLvZ|Ly[a>_ܟ̕I׀,m;Fȳ8PIY*öNƲΜXUg`Tu׾g@%hy.ܨ՟Nk^v`Ǫx~ռp`@g~//A0TApooA**T**~v__Sl*GBpQqxja:89QS*ws°1'THd=)R}5 oO{jD6*F5&?EؑqؾPLdGV7yKv:|3m@Rjy&05SyAmۑ=l:[CB-gXATp_̈ ^T%ФS^Q#Rv*֙\JK8#ӶQvb3O*GV>0{9Eei3m@H%M5=QP.m)Uo3qֽa{;te ~LᒿC@@1gm՚8RFʫ\õ'*i1X<sī깙?Kb}t%3P P +#KbQRVr#q^2=Qeo뙶Zb@)͝[rRۿ^7B3**؈q8]M$T TbT[ŝ*fk!+XBm]/8n?KdyqpJ58:ޫc@e#O>jQ!Ʊ캣F#F,Uֳ=* Ps B[ꭌ_BB,+PyR)}GJx`Nq'-!tgBcYOs p|MC6l@%TXz1"P{bظal*s嚕I+g~P7}X**aWl,_bG*Cը^(e]P.=-q=v,Yu(UL7swü/b*@m0@@!PYjJɘRߧ**<]t%cϾ^SZ  @ejm]UlgZXFj nP`#*K# YI}Bm]Q\UY 9Vſ1V.l5{\'uodaŐW9^uY-P#֛ fZ[Y6( ?gtTTpL<5:̵Tlz 0ř=NnVflK\d5(<{Vl7Š]Yg=G*ϟƛW"3yװ^Rvfר- l$@%{3$I#wreY|||kP1nmSIN*ȵtz!u.Nj<>/P u=).ӂj\}Oj>ۛzC ?VgϏͩrTTOGy銕U^ǕSP6-|zYJۨ౔+ݪ{ Ϗ=y*珔JY*4TJ)Dz~'cO^Qo?39W{p`}*{&e{9RSŽ{v2`#**  ABb**  ABb**  ABb**  ABb**  AB#tZRc-;ٻTI_=~QyZRRQҥkw(\˨w'~ZZ^?\ TK#P!PujMҩ/~J'lqկ`]*l~[Pax辄k~:CBD٨Jܟw̖c\ ?o,*{.*?/ر_U*TT#zꍏ+[TAzANyUR)KŖߎU6 Ժ0^wֳcօZF+b*آkPh\ݟ⩱Y3"P!PcһTp+/b`eϭNX8 $,Nk׳cfҿQv݇SՌV .ڢ@@3^VʥJ+܇a}g^@q?|tbT+&\MdwӾg2A4no7䰊wWtYXܩ,`~̳*=? 6fwM&/rTXkuʉL1g_h42X|ֳ[ˮ9 ٚ?UNRpV^Z;V󃴇>osf@@0FO f\muwR%쾯gjGnt1K`̳eg[ݛSg6oVm-C`cfW1?${ޛW`_NjG]qyS|+ujIʅriKLz5 U-֩?P:m׬35ipܷ]3p`cfj \Q9 ~|m.=s;VugJi^W԰[EBƣJ2LsaCguQ1~X^߱캣F#Fr.w0T@1%'X߰q!@@0?ViٕT`~.*}QV7&Uv6ŬPy☕@˘}J`= ۴y٦ 8**ؘ`<%P?|D}[O^*+b,'vZsY;~q`[ly[ 0,o^TZeAŖ*f@@3}K,`R9TȿoْtQM?rk+, UzJJRUp5 TpTT13xSێި? ֣*a^XuPU0o8g rVeZݾ'{?UЖl:ZEȲAIT DBƻFųD e*a+Z/i= NUQr@@qs/"Ig(hMWꖖYs=f%vz3Ve**t1Qzhne'O3.>ûV֓cgT{dJRͶ_4V*?^zR9z/sh7~l 0-ZmJS}gɃlc|"T[z2^Lj7]5c4lgk,;:+>&{wrW*TkpmϵoGBm)]~ 6L.\RUmjŻ* 8|**X|  Ө}A 6LEH.jVϕ>#P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT~]ɓJ=Xdw5aO/k2[;"P!P9TF*k<ۃ5`?2ywM&/rssJurV @?t/ك5`?6Te1<Mޝncj8y׸}>7U]*=**+}!(H6ؿZ%[{X ʁTldкV1P)g+Uu _=Xw9RN P!P9Lօ~ZT􋤋^zTTSsGHmʑJ ƹTJVZQH5ݩ^Z4RWܼſ?e2yרe%Dzj *hO*33Py̅oa;ዺ媀K9ǩ iĽFQcXp$?3g*;w=e*Z<ԟk2yV5fŽ7uۺU%,SrL&o m;ϕ"֓[0j~=Ô?ÓwŽ T&K A3ϰe+3upg1 5=5 aUTge@e|Rzx[<ܧ]Y:o*i?}5 [y{A2:OnޒVgԶDz/KQQi@ڗ: IDAT!P!P9P'ÃFpU!uyjRjhߙѝQֹ3?N+qV6cYhz skԻSRtJ}w.Xc_nܨRT|zܟ7u's_#\ϫ2r?{п/O*U|\q?WWaVQE*oj/ YFQMA%ԜɔbsJVtJ֣hzɜ(o g߈@@`Mg7*A@]ޯyj=mzWs[}[ e|=T(g̀k#3ɾΨ9֤ssQ%XhFI}̌; T@e.׎l"'fU+* ˜xx+^b*}톲7rrN`b_jdž.$"SpnL8zhETF|i{z~S9-V^SG*k]v0@%]ԽCVi^ 5p?Z**?1~^*ʳQ1ֹZos84̒$̯dݙm8"-Ws[XFVOss5{tt}bqZ`V{fҵWkel5yװfkUg_@@0W E;^p:ٜ<џ:Uݯ <Ȟ1~ɬ'yDzbL5QBcTA}m?g{VunԂ`2ւkb*Q-93;zQ۽R1 *?~"**?| Ǫt=@e~H3fADl8~6s^,Y1+@eA܊9ǯxSgIf+J\{^DUXleť{,@%֩JνMֵ [5P3!P!P9*)05d#fs0TJjj8IT1 {w*[y-PO=LX8#mJ?ʮ5U*t?`cN)@ T ?C98<39P #MU2{~d vhMg_>[dkJr{tW0C$+wjif l<7df-&YpzrMm(fʏ}:l^p̱@%eTĵ3p?Z**)Tbkؑ T&W5_쵺up'5Vk1 %<ͅ꓁+{2:'/f9^1~ԼP9cvP{&S;haI*֩Yq6]%ުJ"P!P9PGr[^0$:reg57ez-a|"/ujVt{Nwۼ]n.L:)8:3j}V:$ܿQvwvEݣFد,\yj{@@ -N ìN g1$A+%ObJŘŨG*:OGSr񮔋tj௩k/h Uջ{ ſV @@@ -_rhlVJTj}dW ~iN+ZN;GsB B`l ]\TWb붔w=_nܨRT|z! &o=T7FT[~3ݸJ{mdwʡgU2?kE[-{#?e{l4䝹\ 0>s*gfBuVo \3Z~4yV-ltLʭ:p}[ʍ^50ZM&or.gTT@R:{bZQ-0tU[%`_jdž.^T*eӤS~sA֙\JK۳ֳq^NiLoܫոUvJJꍜƽW59c2d|iK7ga+{R)= a*F"4kK v_j&G"ʫ\Ϧ2;`Cߜzn KbQRV`pInUj6 `TTrʫ%WL#Pa20 Tb[ŅUy{]=j}XnP >qM,QxZ'*uG%+\O*eVü˫ͼߑ N?w,BBr}[F5˩ڲҥ*sB$ KS0~2~Q۽QlTRͽ:zz``zjT\\Trz^y^.lJeK^ iUvJJꍜƽCWR)'J)P؇aQzJVͮq_^= ױ@e]G+L }@|Ɨy%la)_}9WJa`6Mѓ Ú*T/Kg9*rVg?}H@@ m/P=Yus h4?ӸryE՚oYJ{R2]{/Wy;9 eW r>y:K^wK9ZnQޠVM58N׸]!}{康+LVFB7< P!Pكp*\TT` 0sUBBu.'$0zDBk ml[pW:"P!P,^F+e}}}BBkj f\=X`**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**  ABbgM8:dC")Y2(ԡB]:dP"E(R8ԡ...>5T$^J''x>@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@0L~d6{r&!(ُW,˹&IU!P!P;Tp {L5PIK!P!P# ĝl)u#d^.? d/Py J w.ʣz2|淌oұ-1Jhe0T Ts,KFN[W]:vI{ i3hÖBٷ/bW8vY_0 TRX?8LAMܤ-qزe )ח4)Qxܸzk6DBr2 #{Up*iQ|^ 7i9RIaKO Z&/bjwSz'WKR.R.VXҝe ^nTTN!ftu,3T* M9?9,hTZ?8JjoM)4./P )wٴ$wgĐb7+ut.闕 P!P9Mƭt[;;PzB:6 ˸\X?W JMg S(y[CzMugW131r4:[ÕMڎ/3H|ttzn/2:'XJU iXG]35lP| {;Vlluyܼ4mJ<ؖ1č F҆o@eI>٧8R )85ֆϥq)ծZ7 TŴ++2(p"-ZV'nߤwB,4*xNVSVmhkQC9?( ㌢/ClK{ ]SZ T~ ƕ}YV`v ٺ(*흨{0n<ƧWm%00 +h5kI >V hgZ._o -V"PIsV2됫//d~ڷf ZRLB~wڎL-& FBr W_fp/]b_F'ͳ*3 h\3T޼ӯ\l,`L{TVw:PznĐbk v02c=|&Vgklb\퐖@is@[i-UmZR IDATΙZP_h\IcEIob!P!P9}5u'g/o1CV3mA3C7 zfLK BWAH0nM3뙁ًAM[y- >&zHz6[%3 v]{@1DVm虜o0.ߥ9KG4U9}ZN{acُ&ҬJ>cٙ!ق)rfPHx7#F_Q}8C9xxyk3Ձ1n6 - 8ȔyAƍ4c*5VLs^vm3TBWu TԃWa\v_5bfiP? boցZ&/i,F@3O-PIsFcҵ([lWBE{?,~/*4C9Z4sA4>Rԁш!v/IR+Fv,EZ= Y T"O~sβ__nG!#RW *m"V{600WoycJ=E^]ՠès31rR_2S TR𜦮< b5li6#4̭Ðl5z>y%];Ilul)#P!P;@wBMuZ ?KB=wbؼ2h-[Ͱz\o*qK`suoGdHϥwʟqv&FJ̺r60MTW8+sbϷ6*s)6C=22qjџԕgAYAfFm uʛXhP' s(_tMX P!P;3Xٷ[e+C=V߽Ӎ[d,r݁rߌ=Ek{jo@%iʓ)ߞa[n%X}VM+*vKF9عR dVZZ T2`ytF9Gd6(΀Vꅜe+Υҏ9P*@E-brɴNR㎾ñ \f3fkj -ϥԆ~8@%iʓ̍^qsgu뇕!{9O3(7AP6TTNk%-vN*է+N[!#'dy`G&͡?39ΌceN ޶=d+onw )T$S^l'ea݆ヌou U4f@Yڡz/=x9M[y43a-ꥆ>\Lc|3DF~9N_cyԕ0 g43$/P-nS`ٗ48#w/}/72.pc͆ҫ_ K޲pFF:9i݊t2h񶃋8`۶K`W ʓ>_ ^4Cu]jA+2 տuzӴG t MvNn`\n#za৯]3~yܵ9hN P!P9Q璷鼉;r78bM:0: yZŒr$5uimh S'1 ޤ|FAGGyy݀2 TWJr[֏l.xZՔm(.>!rtV,)W~`Wۡoٸ-N˼\-tV:*;_|NV]ËC-GZ趠qފܫ%~d꾈]JNͶwl-jJ*OVcߎ4jwR?Iל wA20:qIJWf-/mu^ԏfo1 o.:;^(@e%X D )wu#C 31/+#ڴyC z@үoTWa$fm-hrdp$8P[?9M[ym7r!+B,kJsVo4nogy&!噼I}m%8&# ʴ-q&F֔zMC ^.o?#_ v:ݸ,LYSW;1Wa$7TR8ƅX nmˤ$#gJwZR\ۡ;_)ȫ-ڡq)Ƌ FgK8ߚ*cyI*xNVYwrv.Emҷ?<blɗ R-l{d꼮=]N L uTT4*74y1Kɛؕe0.$_SfPoh4m@?R*'q;rCR_ O)sMu>3}(͆՞e`9M[y@@{Kn`tox]xgR@=i+`o 7bP-W3̄ro%<BBKRXR,Ԟ `6qð?(U\B 寥h;i{NVD!P!Pt Rh@jҽ?ߒx["EJq+Hs gy&ceEd&  1rRs^?t/q/ҬIDڞӴQTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@@@D P!PTT@0?]ʙbdF/Js#P+1] A >|lGOAN**!⃸>Ŷn˕ƥTO(_nTg-~I)(҉@@WRq52]1 2ȴ{E=`H޺F$8B̭8MAʲiWꟿ@;!P!P9Q:bJ*܅䋦ԜWqǟXΥ2!P=&V`{/3$czuE!P!P9Mٻ?2vC*R7o8;#gJ&"h"\ 1;7_b\G&5($#OwՙiVjͶ vjO[)-]c2^3~y&zQ\>WY"+E{|۳f^DtG~d6Zֿfyw |J$ՈdZ;e2~זFFrFHy2 6m Vg iXG]35lP| {;dclo{ܼ5ttYT[ SzB-體GLî)yZOr[:yq$_ط<ad^*7,PZ$nhȨS 0@`dkm .j~j) i@ !P!P9QRv<KFAAIjՒ+wRw2RGvP`r%g6HmHk1(=~\H6;iϒ\V<QW#;KR?Kw N 6`+O6Z)Ir/Z?ү]^/ϗ *ѓCki^k?gggbA+f;2<@[!#ͦ-n[oVB\'[yËV,)KR=y$< Zsf/`={m/~B{ȟ;ekWx1P]#/}oT>+ojlTv>CנWRg(ֳ#Vg?Z?K<!EeՒuQTVC9Aux#^LR\˸ T~d6ڨ]0FfӽZ<߆d WÝ Y%pОO**'̐|eibpo4ș@eҺ8(ڇYߎhp5y+y+t*6j]ٹXEyW'[]gZ-](Aɼz27O f T@e#n=j; ʊcmmОW**/{#[`j5PJ n(.Jz8$cJ72tQGO2X?忡7VTʈm4O{+x+És){y kvH1敏JVvamrZ;6P=TT%WD؋|H-leq#Iz8^͟)$Vx*+뾿2Ϩ2K_'i.Ujֽ֭t7l*}krl~dk^͂o}G 4fj"MQVAo?n!PHmGl;]O:wbbD|l MTT%P .4;\@%8$YP΂oWa%xȆ3+Vi T6>X@j{߁+"V om޽<)lJu.8,~u8e6;Prq%eU[{)n߶ʟo؄@@X T$cyݰM*V-N?$e^ 9 {ɱDfi:mr;Q0cbTVvTkm'Ķ EBrV^/tmwR>n]uKg,rt6V}r8N 6N۝2b澶_u+͐B VmdT[M˼nklkm&3CLoN{m3@@$yJoqVJ-*ٗ4k#w/?x pwi-K[/q7FXAeZZs)@5[QnlX=~SVw W]ђ͇T+qR{bKm33@@DK޺&Voq%unrY@e8>$%rIjΫ?;s`Y9~aPpF?2]IJL%(4:| 4 Պ%ʝWmQVR_;^+7(dXJs!ƫ2(_ޔzUj1Kܞ#v͒Bp ıLi-]C˓H}߯=_zYWsg?'JZ~֏鬟G|uJꙘG}=oMn>AٹXބ;%**') i.~MWM+VC\H6;,es0 2TL/bR.I,]8ʽrSVJRKVtZ/Uާg?yuIh?m*vBukoFf$3kZyP;rPOR\`?_歪/T=ćҡ :C+wRwK\7in/Z_q|Jr񑟯: V__޲nu^ʞCh-iXR ;1 #>QPR |8l#tOh_YuֶZ|gB TWwTiʀݴ1CYBl>S~UfmmqdH6(OXυPgd0X=:^d Ttgq-]ƾ]W{=AKj:ߣtԳYUNq;X?@w}~y~!쵘')aƴiK$ۡϥ~m[?-6O I\JΎX~mR! TveJr=ujYu2ZtG_-2Iݯs|k-Zu뤹\G=7ԇ47,'l:7h6G~oq;Oht.dmy@an$h/[CUVW_?m?W=ΥmF=>J#NmPZ Tvw/]ھ6OQW*yugm=AO$ӞSϺg]KW=\h&0@9T?zϾdRoqh^-nޒt;s_O+ֶ_**'isbH&w%fQ:r¥NQgo ]A2:e ڒmV)s0b\Pl[LWO~.T7 Jx_f݊in`+U+?u]'ZaSבeJRFϘIҏW?(`~u@ev@%c)3CZJB[~i+7֖XWgg@l=As{P[=zOT\XgwnJ;Lϧ98/Cr)%%o5yfeCp_*{O FVvI`#P!P9I/7b[l07`DrhŬt>:sSgrԃ3Wb(.N_dX? tS?#8Al++ϢhlY9wi.@xK#0dS׳X+JMك=tמ¶tHҞg]ټ՗Wo*}aRѺrPss?ttG݇;Gy*/t?{w]9p Gz?k\ls*i-v~0{?6$K AAP9NĐWθ>DlTTNZRIbYB[ @eDj{ug]^tš,LR= !kOҐlJ+er{'rKM,==Qxm> ~%liÖW[0-AK7 ԙR^_٩=kg= *M0!Yq1aO m<;1G߮*/t?:im`z?k\9ϕ~ZЕ%is+MJdg~>trqvVVϼ|'uI=GO a+O Iw(=V߷$B% /rwV*sʦtibzϓ ﻮ 73Cbx]X?>K=l֭L蚡r3v9L~c{S|oj '}g?K=AP1 |UjWW\h5/]jٻ?oʡO[$DޏAm|*%K}s@%XRu?RZI2e*^?1B@@*KӿK%{&K[l/dPIË抌)-/ims@يwS@8 T g$~Տ[]4Vﵮhs߈ 0f+u!΄X!e*Y_=}uFvqQP9[ tPg޻RVΜy @eBc~i}'/thO#4ObOAgD 7~?7Osaws@%Xb)~?NkD䷞O I,oGV/~nu6aGTQɿ:#{Gq^4=H;Y>,{΁j;2Km3pu֏^wm&Tk]U?RY L_·tå%ꪽ~Xy}/x[ڳz:*z=aV~b5P>+Gs?stB1X%V w?|ӳ}X'hjg=K_qϕ.oORWXmӣ*)ǒ|_?'9;[g }Ķ( S^@BrT IseFZwȞƕfXrn_gĤEo]Ix^ur|_unwHWC^{)OPսiþʮ'X?jXa&:Kg뺎QBG 祵` ?2l٬v/f>J~6gu]'ڮgWY٣vh\gNL"v 0wh,ƦM< OQK$5z?k\z9u!fN_V.E;uùw^GoT~N@?Hפ9ݷ~_K!{ \ nPJyQ?߹['@@$%ӿKk2nҪ|84ة{ʐ%ȯͳ t޽4v__a!xۧ)~\Kݴkn&[Ɗ!+?J !`\JjMZ^՗PzAs[C]T?+n)܈e^ZP;i\{O~*x׏7F?dx==g}׉[_'Pٯ]Rw]`dMޤ^|_<;GS??rt'w&w31 v_>5G_]K{T?4O"{PK=ퟵ|.-R>>* )/7g#'_qH\Zy2̖zO;7xic֏~>ўӤڏyC }1sVB ug(&w\Jl?#P!P9II*K.^ʦ#ѫ5K,\jA:_ tV,)W. د.˃t["4k}vHܕf^ṶR)bYb0f?2>y/0uؗ۬}5ԏ5^YDNkћtOҨ?H(H9Q_]~keĬmi6R\TG^6 .nIjKVOF"vN*;7~5d=kg٢_hW Tl[,ُ4jwR?I7L^z{mu)UuGƃWiڏR?Höi`-ةQ` 0>H ӟ) ]C0um)?ƒq>Wx:O֒VX]~Kb8cU֔fheи ۻ~4YuB~u[*ڡ$'oRX}yfq)V>-@E~USٮҫgoTGg?j֏ Y{~n ?2Ꙩ[1ĤkWq~ۻ4WR]zN'PIi?~tT9M}l]?je.vUKJ~֩CXk;\<#`ۼom$J Fj@-w PQ>OΔz-؟7H N>m/ *gR;]k_Ksaɖ;^jsчZR)RVuԏ!y^ΛKܞ-ՖmBt2QWM]ҲČ~.X}NSjY&_28.S(}:Er*4Lf͖m%T|'~lzN:Tv T̵T׵s}o2)z[*o9bWo%ؙ. }Wu/-1$_~˟:u> e@E_y봴G{BBo{s=ku9v~ϥPyVCFrV{0r4Zo2T7|J fx'~6+Jz'߃9M$>W:|I'f@cdop;j2]7vdHr^o҄@@+$ -⳷smlJޖ2gS5Rduva)EB%R_,8ؒ!Eoom}>e,ŀM@*V ssU~BBQ$.ɸZۛuco: # Pɫ IDAT)oܿNBFl -s#@7O e&ڍdRP6@**  @B"**  @B"**p8[id6J~%!VGfޥIA]Lg`c(m@@Aosn#ɗ=Gk೤yy{Eo{~ʵ/q-)dw.3gt?d41-fԇ!ߣX`_**/@eEy#ϒ)>Hw&m2R~KÔ(<`R?Æ;0$oK^ŽQxG- Ksr.z[1MZV=7f?.MIu-pʅX͈~zhuI_J@**O TFRLfb`ZR?=8 (N^Jp 6m(*f?2IyZNj [z#}̭8 Sz'WKR.R.VXҝe ^nKʣq%̦fR[\ l崫 )wٴ$wCCM?,s훕:Zt6N'\*?d+me+7}Zvs15VĶ6mv.TVNb&=G TrzӋVRh+}sF/ӗprvv&E& N[y2.%6g[noenn˘ҝ4pi\*N>PJG9_5H<?u-p@e2j6]H?1ɯK_%P` ;@rf!f'v< ftV2n ɆDR^ܞ>n(Y,|cq֋+MgV/33nϼϔ߼\xX2Xٞۢ(V{$auֽKe힪=Jٖ؟?J V.U٪a6=DTWN̾޵mNRrV_#Z2JX|bSܐ>(:[p~@U**ٕ#V7 ҡŋ!ok'W忙:7|\+cyG d({p ROZ[](?2sW! w?)PQ"體Gl(ׯOq$/P:{ ~1Juq)[?0PXky{UVPbgWXl>y3lɸd\sPYvv[9m0_s+ee 6s! Y s>R.:2X䮬XZIg5Y\\K)XAVI&s!\^i'=KrY?u+ d"vN*T*s??0nmަ+){3 /区Wg7ݫ_%P` ;D{园}̯-=ukQi+!-Y_b 3}Z ZRL|;0evڎ?g&[3Z[+ Q2/h%.@e>Xe\IDƳ2{}cSW ,2;u孾L]w-x > eZ8y`*"P!P9}*Rà!cm< Χs/dnXq䪀Vb>V $Z7W=yuEQۢRS3߳>&-S*s$jp⭜qws}Z uP";%B*ᇋ]:dqP"E(R8ԡ...y.k&G^7_{<9z$+jmގ}l߶*\կQrG i&W[})Jzg [u%*{_W TDBrR TL.R'}GY0H%m|H8Yka[qa=fWS&76n30Lɗ*|JJ=ح NnPƹ{0lH2gjimdVmA]f>L_2{4+4daݡ/qwR)l/g.\Ǻ긮@@i Tb_Y(L"^![Yk!^;j({Υ6XMFKo_~UǑn(޶BI&3|]Y;:@e)PTVͨ[}y}x@0,"踬8ҫvGVI蹮@@|ʨ{+ؚJ1u*bړ\Enkxz%ƹ4ۃ!nz[?ei/0Z։&pa[Zo(DY0+*q[~n~~~o*Jݷ{ #*aYHx.w-|~7Ղࣨ6xB%*Jqe*g"ղH X kTN9P1=QF=Γ~N8P1VnTv]%P` XV ~|+%o{iGhe^JsK;J}|ӹIvs^C& ѾeTKQWLc^I+^Uٞ}kܸ 6F˭Bi,k], k,%f:{عa|t]׷,RةM~a^Ce4y)-89[{'.*j17&ɬGsmM yMDEme=in:{ǐ?gR1j%t3ahre0tbW֬7PQ,^%; T6ơ;V9( T 1ˏ~{[ א܅s;*{p%͡[ 5vnOJUe@@e0PY+joÒ1ixA#f=nB浿$vV[iu_I/5{'w#ݙog#[[i7rId-іcf+12R>DI/ܭ@~e)gXVEZU{iaaC RssH ( ǟujL)4_W( vǖUϱ{ҷkyjIV˪Hq'vu-r'Rݭ=]W}*l"P!P9}Y T֊&z>kC}~ I&4W;jǗԞ1w2Gg*m4Z_2 (pzK- .܍tes ap j2^$ DI>+Tv>O "lp/mϝړuU*#P!P9} T <'/ߙ太##{s.-Cʟx(6u4'w%γ83b.Rkkol)M'O Kf7vjd8PY`Kw. Kfwmi7*RL2 4?zF@}3zn*PUI>5Tv>OU̾֎|.?o}ا=* #PI+ǩ1@M**/ʅV[;R>DT66 *fߊfjoS@@@J}@=4s-W0O=QV1"P0TT20v@%WJnIͲ|2)$kd IgRTIJBS L)u +c2@/G|V2&FB=[2[(UzM>e=**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**  ABb**Y-&\s-ܱؒs d స&gud~;f`W** Q@Քby6?”|^[\ClZJ;!?Fe[FU+-_&f+1rݨ~g0%RY*1~ͅҮ11 u]=yQ_2d)w/**ͼzg+@_2?]L8"2Ds2^s DJ:{z0,2#P9ze~bpkב0w9OטRkV;7ӕ$,HY[2\HYc(%sKc:.&? o&T8~Z?5HSq!P!P9QTzEN*WC^8b"γ8vx62ްuoqZۖo!?*?7K,*dv&eHD$:u5yѲTTNy#UAqN AQ;Jjo͕ZPVI@}%?rg"Z㺚yh?0**),@;Pb+>xB2}3ݴZ5cJOOPb!޽Tzt@%_& siqߣCw\]6r\*vU&/oE|.XW$mb'r̩W%)FZϟ13~s93)e2Ȗzg]I~: miVO˷ud>}vZ l3(m&Q'XlbJgq҇҈[ݦsŊ4 O/1gԑv291Ϻ/Y%yô^c?r3-W̺bz2~D'ijJ)v-+<: )M, *buޕ%̗ kgұ*[M )PYNjq=||9sgRbؑA#l,qoo1[RhZʃ8id[MǏYaDŽ5w2/XmۿGJocVw{ T?uU:u=ӥ,**o¬_ݲV1]/TTN5ԇ *R;kɫnmKo&ŷ'%^IOvQJq/*qI*tf˿Oԩ+OFՐߥYH?~'_Q3~T٧omV~EŷGҬJ{[ߓ[fq9A3NFi6RJxY:vW?IϾFݒZ*?_+f&+o9ɶ%_*ci1W,|ӛ@A*U;f2w۵?xK\56:2bn^޸poq"+@% ﺪxϺOq:k-W~T?߻DiuoA^#{{՞k?uw]])L}d ;N=+&ŶVX/NQ델o*Y$1\QĊ߅4m^OZ&֊Y'iGgqh3Aȁ%]%SW,.J4 ŋ4Əa^I;a^dwLɗNhߪ?Ko[dy\y 1KՂal\&a:WZJYuU8uG Toy" .h-)Q+K 18O@@儙RlDO[$ +{cɎVYMG TޥbռWU06s/K=ڮ]gTT(}\PARCuːQq#Wk2PO۫~Z]{>p#j `ɫ@xٛ,$P c 0 C 5[?dйJaBƏaZm?~6 7Ұ;2t>ek';^*Gc^:sYu5xN=Mi*p=P֙ Y8F$s:y C**ǯ@E݊K&~u@Et>nOyxU3Dݒg^PW`*7&i:R^z#g}n,@F12|&]Ky#_h[/9c<3~4R TơmdV~1G} 3X:O[#P!P;|}jJ DASt7s@E-4w/RYV&"kSRb^K/.fђxyur1*YBN)d5Y@ecY&qPV7aaQK?ߺpﯚ'P=^:st]Mx:htq*2\ʠ񭔼::O[#P!P9I^K㊑J*R1R*/^Y=d)d TWuRdoޢ˴#VyKz^!>PxCz|'ŀUz5r݉ [WcL\ܼv}-eZ Z꣗[:&uZ&͠7s7ҙ(c'lB\~@w,vmV*潴Ո7L ϦzB^ӴĪ܈UO(&YVJsbb'Jqq|>:w Pmzcm%XXbaKDۉ 7~!ܔ 0dX _u]?)ww u/'@7h ZbN6)ۛ˗X0,psԭǙW2~~y! Ľټۉw?8}qxh?h:^Ƴr TC:9eEi⺯ۯdF9Ə!y)5ISubKf7voS_ Bjϱp\m[suU{wZړyeb=E,3_t$v-DmeN0Yqu^TT *`i@e?_bi:*_]m TT cgPr!&W{Yhyq^bz5iejo]ü+Ht-R T>ˎ'@@`wƯ>Hy+%ZUm[F3Xbt+IO+WQfYRo>`?"P!P]Β &b&)Y[)GAB;RqW+Dg42eE bUf %HJy-c7hTT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ @@ P!P1TT@ ì}Z.܍t'.{a7lTTNSZ'߲T2^dַ${̒MϺW1֦w:-O"*,]Z5dbݟv[)8w}HrsUd[˘4Y}B>>h~*tJ;~ߗ 9Pt@Tag.P9L4F ʉğ@gT2]L{lTVVEʤ L.L'DM[Mfq9A3a=RӴ;2!OEr2~d9=?ݺz*֣ &dj[RKJvϵ7ٿ@K.~G][Ou_Cx7Ҩ[RU'L[VR1K{鍔[gGؔ**8# P{SB^kPӿ-'QV-70f5)R2M}ڣR T|fђx5úB  I2Ҭm Tr7V9Q*_2"n;FnmwkoIݛ x"1m͖ymlc}ڣWc#@0 1K9ɿ6PQѝ>H1g3 k @@$2bnxXNH;2쿬ՎvR^ Te/>+J۞#LYfǐ"\eNfI^uۧ=zyPaJ[Eb@em#݈bf@**Z)9_T\SfNF b808VIPüRVLdغ\iQ")Md+t36 >K:RUx[ʶsɷ*:P1(ɝv yKz) @@DIѺNUV8܉UHnz[@e|~"NAuKj4;IJ-;ᄹR~eHV,&&_}v^Zbw:2},HtleYUq} ڳ?/Tr08ÎtwRYbYoyGON*)}J2Hǔb??2KnyQ  T **G@QPyG,qmxӴ͊uۤoqedҽ gmQWؿKo",[<%*mg~^ě"ơZ').RjxMd *# E,3_VU&/ox:~v$:ٿSv\*G?dvY82HϾJJ'kΕlT*cGC{v%M5T媴28pe1QAUNZ8.T{g]{@ ߑ@}Ks0Q~x8@@zA:!@BZ;1Wq ^bm~0**[Jy-EB Tr4,KLN)pL**؛@ŔR|p+F#P!PP)^ePɫג;**  ABb**  ABb**ؔ[\w"֥-=Nܙk*y ? 6Lۗo1cޤ;v{'0EB fY?)Ҟ3TNRN K"5*Џy.l0K2]ݸ=rUڽO'M;*%?Te=k+i '6}Hɕn~oYL_IZqf_^7U)faݼhߋ7iώߦ?˅Ү]F|U·'M)wߍ)Sr )՟eNrx'|ǟu@._"P~i W2e9 @B_L)ZwnUᬵ,XOd_Z{~*ږܕ4S}ҿз][aÝM整_^*k~-<*~h2~ec2ޞ|Hy%?Tj 2#P9zy:Rr yx k,{Ng94CGiѸVۖ,^R4Z{-[_ÖJF:3|Ȱ FUjjUir%ߖIڏwPk(<,\HcsW,Z?`*v!-g>Q3[l1I{ZⴂRQ*q#BrhIo>g%Px*k1Ϗ3W+^Ô IDATWom /5'\)G;cf~]RUge؍Lg; z_b7wsXݑ)sSQGڵ[0+2/k>t{rϾe>]miHcq1u3 8WaHam׹b\jC:z{Gu.V] Q|ɰ֦3o1ÑA#GkRE%U,L~U0:j#_uh~P2^9,w@ne{t{.V#ٹs,rq"oj؁j`ַuB֍#݈\u7?C܉~S=K=s/ c0}b̸*>뺎i>ktƏi1<%~:H[9{#Qr#ucT\mc2{h%|c՞RŶ&Mb8w+h8oIGݧ}V iβBt0/V ߤnk,Sr+4d8۱k)sڳ}=)vє\^ͷv`FxG~-.!lk>fJyO,^p整-<\6ص˿QfNF +9Vn6~9' _/Ӑr2aV|-/M绶=a 7s!똖 +@%}sj{; > }/-~ֳNP5^u\>aƏ.^ĢBBrbUt͊ O@pD/Oߵ=N&~v3fhl'֣Է#cP_=]}ӫJog= TL){ߥYߘ4{uCm{շNtymԫQ/%w(c~o@G 9*^xש;d;!bJy۹W7?(cMԺwB[_z`@} u,T +@C Yw{<{;@e=颮F J.h>k}<xBBrbԭ3֗l7i3$5# TWr!{pշK~=CD9KY);6Cp<ZP3MYkϺ3)g~;nF9S~H{1ҷ!?lYӊ75Ùk[klu~G)Ne*P>RV&tC:I"3LC'=>'{};z}Ky Tv(N:17ts5gߞַgTSN枿tJp2RP8uli}n;p'WkQ**'Fr|+= jô7ir}k]Y$yױL:gI7?^)*LjϺ۳7{;SOߥUߧZ=w zB]8ui|1˶Rfp**'Frw62n 6oNw{֗zV$}?mmzqӹv17 7Ұ;2t>eo⍿5gRny8nEbmvc+{M{ҳmT@FS=DeAV2~oѯ 5[a!έT 1APkCISenl87Ƒ"Ir7Vhqpwf${'}[R8:S?ah TvIuow TY?~Uy34f1O*?dˣ9E 5_7B>}c ߧ<@vOjN**'&DXԽۣNX0$SOhMMɿigۯ~Oϗf?m!vT 1s{oFܐF=Q!i{ҳ bꛌ&,Jzڼ^iggINaA񠻒@5fzu?n<>\ vɰ7y`S]ADNO3P }CS}KZ׮{gy Tv ׵s ;/9ýs:ZӝeTKN枿{t'wVd*PѱBX+ש|cu~82y5}._ Y.`IPQ'yR TR:12t7=^:s9{tƏtg>=v/XzNQfQh߃e}YXr '@@$RSj$4 *)g5)Z~ʶo 6P)uV?v/*j`n;[飧JhIg<Ǝ:iQA\md*PٿFc$uKV\ۺyU'>Bћطv4n\(c3Nx+r&yZJZWhǝ)}'47b~9hb=*al}-Np;'dCH@@$7 үb+wG0nL)wQQ [{*H=gR/'Wc@emO?)v+?v!=tONPH-~cų1WV'e_N>*o o:#W>' Vc|_ZwBJd[3yoyn~oI:1G|0A~wt ]sy.Q>y'{_iVϵȬad`EkbuAw-ip[\=:PY[Of/x.^s[}|;:1/Ū]Eh[!{a;a*Mâe\{eXrOV~_Su#Β_LMzQ#*}h}v_Il@eM]`=N1Pv~:?:&t k~6l)Gu>*ߧ;_4>d+ RލTVagtgj>]wTqJGd ʉ9@R[;7o8nʅ47 okV^ڶ-__2|#ĔbM)!ν4<=HX?jAN5Kj;i^ɲfÔ2^ӴĪ܈U|ŷ8ce?v+73EzlJ^zNgϾIsۣۧNBvT 1k[Γ[o}sdH\|ϕlwe6ݼFa)YVqJiͅ#ΰ#ϹeY|wgv"5q5}~Aڭ{i`s"Wێүg?mjUi4ݮBlN<;i-ժܸNJ1ݕSk s}XҦzl獿"IfUj5K.gO:fx?{8޿5o<^{,3rmվ]Nh۔ҫ i P!P91'&ԽyUD Qޅ{ ~OXJ͗k&2j݄!;z߉l˰y kϓ&߂^Goif{^N>ۗo\fN~~7@oV5j14Yҽ gI~_כٓzkȨ*֫`ڏ=÷Wgo˖;{lJHh1 >grǘ7i/^I9P1t_T>-\g^9lCYc{R9OwRoXVxfZ 2ۜX3zJԷמ3)۫;[vT C \*M[Oh?eʗ?&7\>dFy=s4e0X} G&ٷR)l:R7[Kf7voBY+U3xwMd:~m+;?>\X,PaFdrnkaCy@U(RGq*'2'ጥ&#/,~y5o緰yyu_=w4S M]Isih|HHp]V-Q*T,7ײ+~_}iν.@AeחPό׻;]yϗ\?Y>^^OSG%?VcFsM{kf]q[bc8~}sZ??OW@d `4 ϟ/f'bBN4K^+-ϿtS`\5f'.*TiRh8Pدz ݐ uH#Khz! ?OI0txIGoo A6~~빴#EmM ?Ok,>^u~pO&AFeOed"hܖvo4Xz= Ty ^c3݇e$AP!Ul*绲Ifem%+?T6-` *<&Kc\Ĕ}Yd GP!|{we> 4A . AT`acWޮlߖ6sB & A T@ A T@ TTTw;TTTQs^'~0ɉ|ùׯQET~ ;BYTQ]BdTIUTPA%+~BP!BP%*PBP%*PBP%*PBP%*PBP%*PBP%*PBP%*PBP%*PBP%*STTT!IPQz A+BP%*PBP%*PBP%**Q*5x; A T@ A x*?OS  * *?O*AP! (AP!DPQQZPQ݄BP@A  舠BPE*7ox**U*QAEm *CT*DGP!O>$XPy%AyA˗'|BP"BPMYPQsy A+TTT **Tjє deg5up*SL;;'7%ΑTT',BPA3 _DYk@=MBPQ}UL*W34dnt2v,.\诫&7dul0#`5ɉ *2Wz2 *jnoTT' Xׯ_T4njgw4XNK{j_X|$gS9߻c>Tp4du|} IDATO67egBׯ_T *^Aetzy!e~JVx} ۠ AEC۽a09ٹ'벰Ԕ鞽b9kzxJPu *3LmP9?? **TTTTҸ#{=a)}"dPQ r~~NPQAEEJ݋rֹ.D *dmiHc)ۻrWA''es%oKC;͑j/`p*d(.+ݓޥϲ=KY2{OSS;{!5w hvqY;c\>w޽>^t&=M'eA+yIw-n2<\<3BvZiX'`-eQzf[rw5` p *LlPQQRCxr*{,,=ƞ,g;-8p}udېŭRbhʾVD1*Od@ϋ> 4OP>SWt¢.c+6o Y'KCǧr\0A+ņ4~?^+/\ 85e?dTxi*TTTT TTTAelFҵz#997>~(k˲zW6:O$1MTci e[ b꟝.ss ~Kеד<ҽsJ7ʲm<^b,u_Veuln%ߟc9X1FHzNg %Pޒ3/=?333XztB}z#gl)yaP9e{NGڲTOex*̭3nߗՖ,J_߃k27wC[Ϟ~Py|5TT U7lk^T@pOL.?JoF[*nfM8}[_wcq4tgkpH\6ýԐĩNYiN{x[:sqT2>Vlv\1AT6oel꺬哂-̏;YQ3<\M:AE *i㱓j{^!gA};w(;1Fo϶FͼݾѾ˃_A{_sd|]5iכ ?N;Z}܋J.ǥ}=`z/fsN$TeבeIH=(>}c8<\U䛻-[a}WVI4 ?..grX2۔|Âޘ#z5t홧3nJD]}`q⚬ +};m#KYdP)ʮYE+,g+TTTCP裏wWEcΞj)'ɠ\֋N4nNx\NҾ+O$N y *'2whGE鿿#\zQiSR۲Yoݑf3G \ *-븒;yT;2+iPy\$|G *kT4*STKז_{K蟹)ੴ2[?zb;_.a DbG}ҧ}Kk-[[%6%<})%{.'rdI"]c~-ԿB:w9>,L <頢DPjTTT) *| *BuY;pƃJv$Q rvnYq$ggEs{TZO) muXsǿ5[EʮqnȺZfJ纸3;xѸ)+'KvɒAeg *j_TpBN3TTT/ *GT*z2ܪE0 *9䇯|;.G' S"0;'@;ɤkW%֛ƭ- V2xAqSZ+Z\gTfxAEtPQ!+NqeSPyTwC{ٕIw$zxJ+;{Қ7eJ7{y(-YYYΓvp*`9^9\Y&+T'OޒV)eY[/! F׹/k-YY+068IqDT\~4 CûfWv}| NG^\<],|*ںt;ټ'+at_'_wolǐig(+|) *o߾TTT) **L_PɐHhlvcrb&yЩ 'LfHwN6dqp/Ll @j,ҹ}?+|NeT ;tu|Π7oUAZ TKᎆua?|ׯ__ *ZHOP) **TB T}\e/ʂT,*AEEdPQQR~ҲdՒ-nr:bT|?TTp *K *?O%+**0(BPGPiVwP{we>dPQһTL"cOSIPQ}U|@P ]9;Oޮlߖ>@VPQZHoTTTTTGj>A%ﺯ AEEAEE t*WL}PQQ%/bT *K?49^PQ`₊**.A%.AEXA%?%XPQQ(TNOO/UL*@&)6AEAE]EAE **?F~/~KPI.'N79kPQ@TTgmPjT^zEP Ӡu*)^:TTTTݠ\LOPNQPQxݠ*OBʂ۷oG?0*@&Ar!}@rkPI.렢J2 *Tj!S Ne0x&+_x2{Gz2`4b\ 7P?Wǝlތ| **jTdPQsdPQC*頢 **b^7G2 *SD0,5 'T5O/w *uW:&TTT2$LrP_9 QG-7dul0#[Zrx =9fKjݐ3yzg..9u'h\iX#9QrԐܙ !O_W]g^rМ:AE]UePQ]!+$OMPQ{T*yc?ʂʘDzШ5TLQ2t{l.U0̯펽*$?Sclw5=fX,Ʋ,wd~ёF ^Ŷ$Uw*j AG?F[LJr1U*'dctd05?VCw YO7/dlnܓٖ~TVc+aK2Aϔh,ܕ~jv\w:y$p'7a5:StRV$hH12<3ɠ:)TTT ***!饠\LJr1V.v~]>MgN7)z *j> *j *j"N*Ʌ:A%N~ӟ{?$JʫW.TTT *3332|ָ-i.,N_ *|}M$ ɠɠAEA%t~⠢ **?FݠܣbT>+T*@!5=BSwnД\Cە`z)$2wGַJl lߗּo..K{gwcϞVo'{x=5}=oxI.<. %33#s/ޓ#YX7R#i/?N}}0ےÜs%\]wi>Ʊ523{[6⊾[5Yx"-}Mk2qW s?/f~H`G=JIJu_AEEJܣ>A=*W>ܔh8%+g[J YRW%ue+y|r@$?9{XSo.6e?u?u *ۼ#kǩ?COvZe~?ɣ N$={cipp)95ii=F_'T___Iץy^=Tc_] ?W2ԁKP(/.t+TWTSAEEӠ?FKAl1'~mP-[jyʌ eY4J\28<ؚ.ssF~ߒ6t-cuD]XweueY6^r,Íu_Veuln= r~#c^ϑ^OE7e0誯щo+"D|ISk|}e7]~^_~k27wC[gPIL֗emtOHW^wsz44nIGR[ ϞvdeeYHggUO&ԄSP(?/nSAEg!}:)*)A%>zP&:d-*;,7mR:[ Jw\foĦ˯8 N:0גR1Րٹ[\{(!N-RQrx/Id@3J?ӮZZxqPqs4 eoZ&O̶'Naw~$p2R~]{9lܔ[f[hWP|}}]+O'K27:eU}Nϟ|m4dn:q *_~>_\-RKPQT۷oKʛ7oƂJbzJ9rCGWa7rQE@3WPא\ϝv ?N;Z}R'Kw{Y*!/D *uz2pK;>'>E5:>kPٕV hP:NnFB[]97 Qe|?Z1{Bdz *ɫ{mEAT.|}:-OtP[H_iPQT*yUPIQ:A!7@v:% AfW:LITc;Z%_oUH+^.] {Ok"Գ,-xѩaݿN|}jTRWB%O J~?ΣKM?Gsx5bTjgThЯFqxgE IT.}* *j. *UBAEEkʂJbիKA%o1}V2?NX2~vv7vNx *EWl+X:^o$~KH6 2lJKVVZv_[Op8t~&[{ 'N *5yQ26vݿN|}jTT 쌝V&+* * cE?/4J̃lKrNnvd5{eqݡuB?BtP)[H_Tu_*$җ Ae[wetВF-Kc}MV ?ۗ%<} J/bGݟ^T,m>7BFzPLwb:>iPN1 Jjg#tRv{o#1GpoQA>O5#An]+m?O׹+]DTܾ.|#8UAEEݠ^L_TOTV~~m%}Y_wᮬxh@1Z:V΍%5Y^zZ27cԺ "v]VͿ[B|t8AeꠒG!s ,mKߕwF˹*u{E IDATYqSVOw)Ko,i~-}]|+T$J^'ҫ^H_ **d~m-7X:{?Zͭ=P FT$] =&grIٮloe+9t.dq%$?S-9|J''io285 * Z{VGg ΟYܡ>u{'}>?;':?fP PU. *+ܟRiP)*eAEEJ5.wмOf7d7f<wҎ{Vg5di\^ޝ_uSϠ2yuS# _Z`ِWIP>NB_c%d41JU/&1d- *E1e,R1 **GE=*˒б?"D'f7nIG-*?"F8 2A%3KuDOv&XNjTɈ A(\zRfg{o{ .nzo& y<$ϧg>|j,fPP:dOI)A%?E'$)VA>s*o޼ *1~m*c{xWxHFxM`ߢM/8h×~Ԡ2~%Ӗ֕Lפy~1=n玗0! dq_=<;%_NTKK&+S@>N J_㚬FA%sW˅]ePϣnPIڒAƯhӏץzWiE^n5|0감O?۟bTL*JVPyVPZL;$ */_ TKgɶbu K~}>1qIGZYa%8! fAeln.by]Z[gcpP {'eҎsA|ib{^8|n~[xp*þ0uj},G:1rxO2KЃ|תavut6_A%94~}otAڠ wec)hݔqSZ+OL̵d9{dp5D8;b_@YBdPZH;tPٟ,S*ɠnPAPAelxHGr NH{%VSZ+˲~_673/>û! }_^羬delttw3k ]uv灬ݕeY]'[O,;op&l>On'qE)*qѐĀ=l=v;mەq_rQ|fci/JKV4dA>N݂uY;ZCë?EswT:-i5Hke =L3 *KAgUԿ'RnZDTVllܗv[wɱ Dzu2kV]_֕~G:duݟE}&ޯޮ/R/~fܟJz!}-*Jz1}2ZL,]s*o^ ڔ;}wCןC9'y_?vDHwc?bzB?H,>AUY>?GrxgF|N ңL6nZ7ǩYPIz ;W"v[ݢ0dR괐}S+~ߐ,mvN_5Y=4xs~gץ)iz!}:$*y + ***ɠ^a˂JbpAe7"/и)+rxܳ3ڹf0ژoS鞍~oߗK=N۲ّrO G=x,;2o|5Yj^ rо} 3bp|$;׷8^4nHs<{߷6cשZonJx/`4;Ԡ<ǩWPK\]?501{0jܐswޕ~[5G=$UOuln}~[Z~w ו~*0d~3z-=-~4x|!L36AE]TҫޟJB+T\~hUpS6W;rj@}.'dQIEA%b_<7dC]Ru*1kՎecd >+$|cS\NL *T۷o3bdPI/'ָ-X%`: w9VBu_YAEg!`0\H *6S~{?ϭ:T)ӠRb`LK˲ڒVKV^oԳop@Z&A%?%TlTTT1 *uZL![`$wW棿>O\VeAuנJ:bT{TAb}{6v<1 mkq@Zu_6 At! *)*ZH_iPb `ODPQQE7,G%$?u!}YP[H$E̠r1 p!}2ŔҠb{J%/-O.{Tb?LS\*؞N * *ޣ?$HN ?BzT|\=- *ӧ0 \. *> *Q:`\U?eRG *!Q)+$йӅQJYT) *>Ӈ+$꺯 A,hS*eA%_ɠ+Tz^I<^*)UOI)A*6A͛7A% O?4snPq+3q1kb?LBO?_"hPyb{T~~y}ޟ2 _AEER>oiP+$p%d]e^dTZLG_@&ABOYHoT|]T|Qq+$qW)*0Tkb?LX}Ob!}eAvJ޵_ɠzWI뺯GZ}ڟTtEݠbG׵_YTb?L)?KcBzR=*!0 +R=*zUIP庯O *]*0 B\?躯SƂA~`OA%PJ=*!:BPLu_)U^U_/ܠJQPQQ%T|\wJ%$9/T Nd_)=*JR0 чK*2 *{T~,0 \ч+TbBKA%UʂJٵ_*=`8JTPq:EgvPkLӟD:S/{_!~U-w+ GeR:==ͼ+$Ⱥ+tJݟTأbsS*@&eU]?E;Lҵ_Tb?LS&̠rzA:QE7ZN_vJ%$9c}QPщ)A//Tb?LN:WTT}rzS*_? SlKwʯ~uJvNTl9*YA%"u/~Qt *ySLgcJh2]NJ޵_eT>@YNQAtJUmkԿktӛRWAξ/{;cu_yA%//]ND/~G?k뾴JJF&T^~-_W?׿K1tʧ~Z뾜Jk|R%uNu_A_JYP)*ET~HӉpPy1%TbNP S|_T~헯S**@eaa! @ }m87WA誯NqW_)^Ut)Ύ0!\vMNAvvv?SBNQA%TuׯگI<*|rrr"'''r||,+y|Gʇ~(^Oz|ߗ}O| ||Rݮt]w+wߗ_w9::C9</}MɳgٳgC_W?chwwWvww+_Θ/CO>|K_/}K2=y$ӿ뿖-[[[?~??W. 8s)tfsys9`Pfdrfg&gj&gjrj۪9nr{pp09 9 jj\ZͩZͱ\>λ[|\'t J~U}JlAbTlJ2J2/bVy2DVhŠi\ ,yTnd1 -n!&WI{Rv;o+MD) )*e1%9cMdLIj1EwmbIPq).CNy0TqWS*ɨbzJ,>bUҧU\Ja6\BBŞaFc:7әřRUHS3P1E'ƔbS|N }WfPӵ_TlRQʫ|D+|\n`),6Ĉ0UYK9&3\l,F|+\cJW})*cJ-}A%rT)Qdiװsj4bZBj.31[N'F(!ǩ})u):A%DLq9R2zT>QP蔊XNUBR2^eUlO؆bXt"nh]%ʄ| sӹ,.=3 (&JSB]/ݠS|,/ *g^T\]N_S*ULV +.Vm`,%FPW/uLi@ѹK7S)&JL q:uu_àRŵ_>w*JJWlNd -%DxbetfsE=RQ )RbĔPA%tL u:u_Jٵ_!_S*`Jю;])΄~b=ÌhF;gәٹӈb#4^;p:2 _:xJʫtJzYiT9VtN"*#Lt*% S7! :=t3+ND )RttJu_eS|\T|^J]:d]vtt۸rz,RU @Ş};gәS(6DS)Y1%9*tN?~߈S*E~>QE *U׸,eE7Ėv>;+~Pt#Jbr*d_J몯S|-7]Pʤ\{Qɲ+LNPq(D\1̄~/b=Ӭt3Ӎ'ywD1 )6Rt*Z>{\U)FAd9S* /_TBF++.q(Fb\b|7u{R癎Ɍ-kFgOiDRt S|M q՗d;q:EwXPuWS* }^+^fsZ$,- l4׀QtBJS)+bW}.}: c9}S*WSU/*UahJVXWNd -EGxPS{CK2E32Yh7/t(e!%= )1%9ۗ;M) rXTlݧ#]VUX+E;WKYd -E7Ď1~LXs9lW4 ̛RuHѹ⫊b7S|- *>:E*EU\J֎bWlNd1 ->K@K@L/utftesQtCJz>jRLNKSL }WN]UT\:K]^+lO脕qE7 -%fb_<1ن݀;S)&W|eK"M}WSLg:R/QׅQ%V|FX|D2UqLi@(CAgŔ%1t:70TqJvA_Ttԇ*WٜV +qW` -gxp=-3lN7(.4؜J+TL]B7/E1OTbR]PsKT)++U}Z(X +JQ`,Wxs`RĞq~c3[˚Ɠ#5JۗbSt/E1N )R)Ċ*Y{UJ`EUBPq(EВ[lKUN|Ou{2)9ΌlW4#̛+(!CJ٩+bJr\uLٛs)ɠs:*#JRt*E犯1%o }QL7S~{rJS*>2YR_RtXŠn\XBnl.# P%,.kW6P"J]B_1czW}t~A)2YRUaE=>8V|E'-KhEѤ,(>#NHy*v_J2$g>czW}^Dor:eTpJ_&TQE=(1J*ŠM\ ,e4eL sYLNgW4#4 (b{*ꘒ(M}W)A%)WMZT)洊;ȢZLcI|:d>Lv\fi󺲹_&(!B+&-ľtXPq9Ut*ɰU؜V)(X1 +&qE7F+3u-γY&݈bRּbs})阒i){S\ *y1tJaPuJ/_KmJ2EeEW,OGװ",e4DX1psf:әmψRLcJTJ_e1%9v).Kc\es:RP1=sA_>*.W8"_4:tf~:5E!ET_>b%.W}\D_t:w>7ᔊ_!J2*WUV+E$;LS>{R9\dvē: )2)j:\tAS*UL8RuX+,d#LRt 9㲝e~esCbQ )R\SOhS*Y //T*E{Ul=V+6E'脖]1u=Itw:YbY@ QLBS)EW|,SBM1++锱RS*ɨRvJ%VT)ګRU|V:RYtCIl /" P7:32ٛ\l>X4[, (!抯dLۗRT1%锱bK%JW-Ut$+.5bbL z 153tk@QLB|-",}՗dC *Nܧ*YTtJ2DU +q(Fb\B\h&3;n< (.RũƔdPIǔP{S8r)R/}*UG۽*N脕YaW\) ,e6eZM*/uϸty&(,-R\bJz_J̘b7NXWاUa(<;+E5d+5B|hNlI^@Q|ЧRbJ_1{S|- *.'Q%`1Êi\1 ,.E7#ԑb_&yS4ӝmIY@(U*SLU_yP9z״G*aǩ۸Xt"il /! 0)tfg639y_4D(Bɩi)r=2 *>OkiXaE7ȢZLbKtq1k>sff:әf6E'){L/)AI*u9Rt mX+&Wҁ52uf2ә Ɠ{ 4BJ{}aP?U\bsZwX19Wid -6g| &{PILf|eBxbr E7FR>R㪯?A%_eK꫊*>+;bz +ߑ&F:F@W͌Nw#%DHѽޫT+)eKc^T|RѹWTIQ^UlJَPq6Eb[\K!_s4] lnX6w4 (!"ΎT})1l KL u՗(A%_T|FXWeV VtN#*Al96ӈbzwHy*1׫ JS*W5V*RYtBIl).U 5*g]es79llX4, (.r*tJnP}˒Q% 0*Š#Db\LL {0ib_Ї0kJU|S+&q5Db[|ǗPzb=9lNw3K,E݈b{GHTU)yS2J".uZEgϰ2KYd -&Wxc|lfwsbzY4QB=)R|-Sb^5 *sJJͬKT1=z +ߑ$*" 0I|L{:3C$/(B^RS7%+*!ST }5`Š"*L{{2)y$(>"J!+-NӨاUabsZfJVX WlKYd -6g|8$(E7I9RULI}_{SLRE+TuWQ%`*VVtN߁E'膖]bI:~Lf:3Ųm@q(:QBSB+SB_TrKTQagT19bs V\JQ`щ,4膗6:36|PgX4,qDߧQ\J9S:)U*WٜVq=Rթ+->m!.|ͳ|lf|G@1(>O؞Hq*׾i)A%>QdY}*US+>KYdZ\K=8k8I_4J]BS):S\ *!NLjT90bzj&ȢZlb2u{23ٝ|Pg֨OkDq++T$ŔSr$EtXщ*.WĊ驕"F3!U 1SMπRQtN؜H y+bJz?i1?) O%TTIRiװbzjW\) ,:%+RE9/k3{,_>}E(!CJRbJѩ1)ʟwA%/TO :۸RX,y&/W1|{2׹]g3̛3Ɠ+)&{ٜJ1ٗ2i1bUlNJ*O-+eE'߱%T|&PiDpRORTJ̘k }2hF+tN^fVBZэ+E731Ib_"{\63#uf6E':3\TJ_u)A_6Q%+Ċ*U+'W|bZlbi|"Nw:3-+!J^DR\OTSϘs:RP[T +EQ 0*.a:Pq,DPgtq 1W5~&39pRO%tD1+TH=bzWVL9+dI*{U|VV+6E7RE{Йu{2 _<9|Rg֩PBD:R|KSJݣ`>*+e%td-4@WUs5w<) (!"JȐz*TSʴDbzZ%DX W|b[|E!!ftBdL3D@ QBݘbR1I*O +1JY`щ,>Bkp _r{2m3>٢M8)'eʈRuH y*ebʟgy/K?PǨRia4}E7;LbBb:̛7+ufE7\QR\O=/yTbD^fsZ%tX }j%W,&,.1" pUߕ M珺sM_&8:؜Jq+/$C1e,F3>bVq$_Wtih-%T|!քP7/<ѝMfsϲk@u%RӺ!%1(RuT uXi*JN`1,5:lfn}6FYl)T_UƔ 2)Q*u +q,Fb[|GQ&I 0Ij2+4K;MIY@(u)UJKL *UlOدVb+y$؄%f2s= 3k3; (UGӐb{S)SrKTq]T I+kd1 -.%dx!*=W14G5]I2!%_U.ϋ)ARi׀ +Uwh]cIrv2St 'J:+ԩcJiPQ%TXWtnd1 -E5T`zȉ{2s3YRw3[-ƈ(!BU)ZA%TTqݫRbsjW\XL"Mh .4D*U愶G%(6QRBKS{_iÊS+&qG` Y\cnta3mfi@ QlNTRBJ"}T&=<2؞ZW|+0?&MKl>>٣G@Q|Fq )1N!I*UV +s+!mhq-KP{J\n8 P\"k )R&!\ *UDUb:bYlCKRL=׹Sw~5{[DcHTJ׿a(+9F7v+pIZ/^Ŏ6^oy &Ӏ0KaUc-l+ p28\*n -z|]_ SelvUK4]ՄC=YrVm[5qjվ!~a@|ۉ+jr*1JʨǰbX,XRFԡe 0}1u6PQRbƔ!%R|l'+G)GIENDB`pyenv-2.5.4/test/000077500000000000000000000000001476513315000136475ustar00rootroot00000000000000pyenv-2.5.4/test/--version.bats000066400000000000000000000021251476513315000163410ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper export GIT_DIR="${PYENV_TEST_DIR}/.git" setup() { mkdir -p "$HOME" git config --global user.name "Tester" git config --global user.email "tester@test.local" cd "$PYENV_TEST_DIR" } git_commit() { git commit --quiet --allow-empty -m "empty" } @test "default version" { assert [ ! -e "$PYENV_ROOT" ] run pyenv---version assert_success [[ $output == "pyenv "?.?.* ]] } @test "doesn't read version from non-pyenv repo" { git init git remote add origin https://github.com/homebrew/homebrew.git git_commit git tag v1.0 run pyenv---version assert_success [[ $output == "pyenv "?.?.* ]] } @test "reads version from git repo" { git init git remote add origin https://github.com/pyenv/pyenv.git git_commit git tag v0.4.1 git_commit git_commit run pyenv---version assert_success "pyenv 0.4.1-2-g$(git rev-parse --short HEAD)" } @test "prints default version if no tags in git repo" { git init git remote add origin https://github.com/pyenv/pyenv.git git_commit run pyenv---version [[ $output == "pyenv "?.?.* ]] } pyenv-2.5.4/test/commands.bats000066400000000000000000000012651476513315000163270ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper @test "commands" { run pyenv-commands assert_success assert_line "init" assert_line "rehash" assert_line "shell" refute_line "sh-shell" assert_line "echo" } @test "commands --sh" { run pyenv-commands --sh assert_success refute_line "init" assert_line "shell" } @test "commands in path with spaces" { path="${PYENV_TEST_DIR}/my commands" cmd="${path}/pyenv-sh-hello" mkdir -p "$path" touch "$cmd" chmod +x "$cmd" PATH="${path}:$PATH" run pyenv-commands --sh assert_success assert_line "hello" } @test "commands --no-sh" { run pyenv-commands --no-sh assert_success assert_line "init" refute_line "shell" } pyenv-2.5.4/test/completions.bats000066400000000000000000000015601476513315000170600ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper create_command() { bin="${PYENV_TEST_DIR}/bin" mkdir -p "$bin" echo "$2" > "${bin}/$1" chmod +x "${bin}/$1" } @test "command with no completion support" { create_command "pyenv-hello" "#!$BASH echo hello" run pyenv-completions hello assert_success "--help" } @test "command with completion support" { create_command "pyenv-hello" "#!$BASH # Provide pyenv completions if [[ \$1 = --complete ]]; then echo hello else exit 1 fi" run pyenv-completions hello assert_success assert_output < "${bin}/$name" chmod +x "${bin}/$name" } @test "fails with invalid version" { export PYENV_VERSION="3.4" run pyenv-exec nonexistent assert_failure < .python-version run pyenv-exec nonexistent assert_failure < "$PYENV_ROOT/version" run pyenv-global assert_success assert_output "1.2.3" } @test "set PYENV_ROOT/version" { mkdir -p "$PYENV_ROOT/versions/1.2.3" run pyenv-global "1.2.3" assert_success run pyenv-global assert_success "1.2.3" } @test "fail setting invalid PYENV_ROOT/version" { mkdir -p "$PYENV_ROOT" run pyenv-global "1.2.3" assert_failure "pyenv: version \`1.2.3' not installed" } pyenv-2.5.4/test/help.bats000066400000000000000000000044711476513315000154600ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper @test "without args shows summary of common commands" { run pyenv-help assert_success assert_line "Usage: pyenv []" assert_line "Some useful pyenv commands are:" } @test "invalid command" { run pyenv-help hello assert_failure "pyenv: no such command \`hello'" } @test "shows help for a specific command" { mkdir -p "${PYENV_TEST_DIR}/bin" cat > "${PYENV_TEST_DIR}/bin/pyenv-hello" < # Summary: Says "hello" to you, from pyenv # This command is useful for saying hello. echo hello SH run pyenv-help hello assert_success assert_output < This command is useful for saying hello. SH } @test "replaces missing extended help with summary text" { mkdir -p "${PYENV_TEST_DIR}/bin" cat > "${PYENV_TEST_DIR}/bin/pyenv-hello" < # Summary: Says "hello" to you, from pyenv echo hello SH run pyenv-help hello assert_success assert_output < Says "hello" to you, from pyenv SH } @test "extracts only usage" { mkdir -p "${PYENV_TEST_DIR}/bin" cat > "${PYENV_TEST_DIR}/bin/pyenv-hello" < # Summary: Says "hello" to you, from pyenv # This extended help won't be shown. echo hello SH run pyenv-help --usage hello assert_success "Usage: pyenv hello " } @test "multiline usage section" { mkdir -p "${PYENV_TEST_DIR}/bin" cat > "${PYENV_TEST_DIR}/bin/pyenv-hello" < # pyenv hi [everybody] # pyenv hola --translate # Summary: Says "hello" to you, from pyenv # Help text. echo hello SH run pyenv-help hello assert_success assert_output < pyenv hi [everybody] pyenv hola --translate Help text. SH } @test "multiline extended help section" { mkdir -p "${PYENV_TEST_DIR}/bin" cat > "${PYENV_TEST_DIR}/bin/pyenv-hello" < # Summary: Says "hello" to you, from pyenv # This is extended help text. # It can contain multiple lines. # # And paragraphs. echo hello SH run pyenv-help hello assert_success assert_output < This is extended help text. It can contain multiple lines. And paragraphs. SH } pyenv-2.5.4/test/hooks.bats000066400000000000000000000034631476513315000156530ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper @test "prints usage help given no argument" { run pyenv-hooks assert_failure "Usage: pyenv hooks " } @test "prints list of hooks" { path1="${PYENV_TEST_DIR}/pyenv.d" path2="${PYENV_TEST_DIR}/etc/pyenv_hooks" PYENV_HOOK_PATH="$path1" create_hook exec "hello.bash" create_hook exec "ahoy.bash" create_hook exec "invalid.sh" create_hook which "boom.bash" PYENV_HOOK_PATH="$path2" create_hook exec "bueno.bash" PYENV_HOOK_PATH="$path1:$path2" run pyenv-hooks exec assert_success assert_output < "${bin}/$name" chmod +x "${bin}/$name" } @test "creates shims and versions directories" { assert [ ! -d "${PYENV_ROOT}/shims" ] assert [ ! -d "${PYENV_ROOT}/versions" ] run pyenv-init - assert_success assert [ -d "${PYENV_ROOT}/shims" ] assert [ -d "${PYENV_ROOT}/versions" ] } @test "auto rehash" { run pyenv-init - assert_success assert_line "command pyenv rehash 2>/dev/null" } @test "auto rehash for --path" { run pyenv-init --path assert_success assert_line "command pyenv rehash 2>/dev/null" } @test "setup shell completions" { exec_root="$(cd $BATS_TEST_DIRNAME/.. && pwd)" run pyenv-init - bash assert_success assert_line "source '${exec_root}/completions/pyenv.bash'" } @test "detect parent shell" { SHELL=/bin/false run pyenv-init - assert_success assert_line "export PYENV_SHELL=bash" } @test "detect parent shell from script" { mkdir -p "$PYENV_TEST_DIR" cd "$PYENV_TEST_DIR" cat > myscript.sh </dev/null" } @test "adds shims to PATH" { export PATH="${BATS_TEST_DIRNAME}/../libexec:/usr/bin:/bin:/usr/local/bin" run pyenv-init - bash assert_success assert_line 'export PATH="'${PYENV_ROOT}'/shims:${PATH}"' } @test "adds shims to PATH (fish)" { export PATH="${BATS_TEST_DIRNAME}/../libexec:/usr/bin:/bin:/usr/local/bin" run pyenv-init - fish assert_success assert_line "set -gx PATH '${PYENV_ROOT}/shims' \$PATH" } @test "removes existing shims from PATH" { OLDPATH="$PATH" export PATH="${BATS_TEST_DIRNAME}/nonexistent:${PYENV_ROOT}/shims:$PATH" run bash -e </dev/null || skip "-- fish not installed" OLDPATH="$PATH" export PATH="${BATS_TEST_DIRNAME}/nonexistent:${PYENV_ROOT}/shims:$PATH" run fish </dev/null || skip "-- fish not installed" export PATH="${BATS_TEST_DIRNAME}/../libexec:/usr/bin:/bin:/usr/local/bin" run fish </dev/null || skip "-- fish not installed" export PATH="${BATS_TEST_DIRNAME}/../libexec:/usr/bin:${PYENV_ROOT}/shims:/bin:/usr/local/bin" run fish < "${bin}/$name" chmod +x "${bin}/$name" } @test "read from installed" { create_executable pyenv-versions <] VAR if [[ $1 == -F* ]]; then sep="${1:2}" echo "${!2}" | tr "${sep:-:}" $'\n' else echo "${!1}" fi pyenv-2.5.4/test/local.bats000066400000000000000000000031251476513315000156150ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper setup() { mkdir -p "${PYENV_TEST_DIR}/myproject" cd "${PYENV_TEST_DIR}/myproject" } @test "no version" { assert [ ! -e "${PWD}/.python-version" ] run pyenv-local assert_failure "pyenv: no local version configured for this directory" } @test "local version" { echo "1.2.3" > .python-version run pyenv-local assert_success "1.2.3" } @test "discovers version file in parent directory" { echo "1.2.3" > .python-version mkdir -p "subdir" && cd "subdir" run pyenv-local assert_success "1.2.3" } @test "ignores PYENV_DIR" { echo "1.2.3" > .python-version mkdir -p "$HOME" echo "3.4-home" > "${HOME}/.python-version" PYENV_DIR="$HOME" run pyenv-local assert_success "1.2.3" } @test "sets local version" { mkdir -p "${PYENV_ROOT}/versions/1.2.3" run pyenv-local 1.2.3 assert_success "" assert [ "$(cat .python-version)" = "1.2.3" ] } @test "fails to set a nonexistent local version" { run pyenv-local 1.2.3 assert_failure "pyenv: version \`1.2.3' not installed" assert [ ! -e .python-version ] } @test "sets a nonexistent local version with --force" { run pyenv-local -f 1.2.3 assert_success "" assert [ "$(cat .python-version)" = "1.2.3" ] } @test "changes local version" { echo "1.0-pre" > .python-version mkdir -p "${PYENV_ROOT}/versions/1.2.3" run pyenv-local assert_success "1.0-pre" run pyenv-local 1.2.3 assert_success "" assert [ "$(cat .python-version)" = "1.2.3" ] } @test "unsets local version" { touch .python-version run pyenv-local --unset assert_success "" assert [ ! -e .python-version ] } pyenv-2.5.4/test/prefix.bats000066400000000000000000000026541476513315000160260ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper @test "prefix" { mkdir -p "${PYENV_TEST_DIR}/myproject" cd "${PYENV_TEST_DIR}/myproject" echo "1.2.3" > .python-version mkdir -p "${PYENV_ROOT}/versions/1.2.3" run pyenv-prefix assert_success "${PYENV_ROOT}/versions/1.2.3" } @test "prefix for invalid version" { PYENV_VERSION="1.2.3" run pyenv-prefix assert_failure "pyenv: version \`1.2.3' not installed" } @test "prefix for system" { mkdir -p "${PYENV_TEST_DIR}/bin" touch "${PYENV_TEST_DIR}/bin/python" chmod +x "${PYENV_TEST_DIR}/bin/python" PYENV_VERSION="system" run pyenv-prefix assert_success "$PYENV_TEST_DIR" } #Arch has Python at sbin as well as bin @test "prefix for system in sbin" { mkdir -p "${PYENV_TEST_DIR}/sbin" touch "${PYENV_TEST_DIR}/sbin/python" chmod +x "${PYENV_TEST_DIR}/sbin/python" PATH="${PYENV_TEST_DIR}/sbin:$PATH" PYENV_VERSION="system" run pyenv-prefix assert_success "$PYENV_TEST_DIR" } @test "prefix for system in /" { mkdir -p "${BATS_TEST_DIRNAME}/libexec" cat >"${BATS_TEST_DIRNAME}/libexec/pyenv-which" </dev/null || true" assert [ -x "${PYENV_ROOT}/shims/python" ] } @test "sh-rehash in fish" { create_executable "3.4" "python" PYENV_SHELL=fish run pyenv-sh-rehash assert_success "" assert [ -x "${PYENV_ROOT}/shims/python" ] } pyenv-2.5.4/test/run000077500000000000000000000001761476513315000144050ustar00rootroot00000000000000#!/usr/bin/env bash set -e if [ -n "$PYENV_NATIVE_EXT" ]; then src/configure make -C src fi exec bats ${CI:+--tap} test pyenv-2.5.4/test/shell.bats000066400000000000000000000040671476513315000156400ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper @test "shell integration disabled" { run pyenv shell assert_failure "pyenv: shell integration not enabled. Run \`pyenv init' for instructions." } @test "shell integration enabled" { eval "$(pyenv init -)" run pyenv shell assert_success "pyenv: no shell-specific version configured" } @test "no shell version" { mkdir -p "${PYENV_TEST_DIR}/myproject" cd "${PYENV_TEST_DIR}/myproject" echo "1.2.3" > .python-version PYENV_VERSION="" run pyenv-sh-shell assert_failure "pyenv: no shell-specific version configured" } @test "shell version" { PYENV_SHELL=bash PYENV_VERSION="1.2.3" run pyenv-sh-shell assert_success 'echo "$PYENV_VERSION"' } @test "shell version (fish)" { PYENV_SHELL=fish PYENV_VERSION="1.2.3" run pyenv-sh-shell assert_success 'echo "$PYENV_VERSION"' } @test "shell revert" { PYENV_SHELL=bash run pyenv-sh-shell - assert_success assert_line 0 'if [ -n "${PYENV_VERSION_OLD+x}" ]; then' } @test "shell revert (fish)" { PYENV_SHELL=fish run pyenv-sh-shell - assert_success assert_line 0 'if set -q PYENV_VERSION_OLD' } @test "shell unset" { PYENV_SHELL=bash run pyenv-sh-shell --unset assert_success assert_output </dev/null || echo "$PYENV_TEST_DIR")" if enable -f "${BATS_TEST_DIRNAME}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then export PYENV_TEST_DIR="$(realpath "$PYENV_TEST_DIR")" else if [ -n "$PYENV_NATIVE_EXT" ]; then echo "pyenv: failed to load \`realpath' builtin" >&2 exit 1 fi fi export PYENV_ROOT="${PYENV_TEST_DIR}/root" export HOME="${PYENV_TEST_DIR}/home" export PYENV_HOOK_PATH="${PYENV_ROOT}/pyenv.d" PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin PATH="${PYENV_TEST_DIR}/bin:$PATH" PATH="${BATS_TEST_DIRNAME%/*}/libexec:$PATH" PATH="${BATS_TEST_DIRNAME}/libexec:$PATH" PATH="${PYENV_ROOT}/shims:$PATH" export PATH for xdg_var in `env 2>/dev/null | grep ^XDG_ | cut -d= -f1`; do unset "$xdg_var"; done unset xdg_var fi teardown() { rm -rf "$PYENV_TEST_DIR" } flunk() { { if [ "$#" -eq 0 ]; then cat - else echo "$@" fi } | sed "s:${PYENV_TEST_DIR}:TEST_DIR:g" >&2 return 1 } assert_success() { if [ "$status" -ne 0 ]; then flunk "command failed with exit status $status" $'\n'\ "output: $output" elif [ "$#" -gt 0 ]; then assert_output "$1" fi } assert_failure() { if [ "$status" -eq 0 ]; then flunk "expected failed exit status" $'\n'\ "output: $output" elif [ "$#" -gt 0 ]; then assert_output "$1" fi } assert_equal() { if [ "$1" != "$2" ]; then { echo "expected: $1" echo "actual: $2" } | flunk fi } assert_output() { local expected if [ $# -eq 0 ]; then expected="$(cat -)" else expected="$1" fi assert_equal "$expected" "$output" } assert_line() { if [ "$1" -ge 0 ] 2>/dev/null; then assert_equal "$2" "${lines[$1]}" else local line for line in "${lines[@]}"; do if [ "$line" = "$1" ]; then return 0; fi done flunk "expected line \`$1'" $'\n'\ "output: $output" fi } refute_line() { if [ "$1" -ge 0 ] 2>/dev/null; then local num_lines="${#lines[@]}" if [ "$1" -lt "$num_lines" ]; then flunk "output has $num_lines lines" fi else local line for line in "${lines[@]}"; do if [ "$line" = "$1" ]; then flunk "expected to not find line \`$line'" $'\n'\ "output: $output" fi done fi } assert() { if ! "$@"; then flunk "failed: $@" fi } # Output a modified PATH that ensures that the given executable is not present, # but in which system utils necessary for pyenv operation are still available. path_without() { local path=":${PATH}:" for exe; do local found alt util for found in $(PATH="$path" type -aP "$exe"); do found="${found%/*}" if [ "$found" != "${PYENV_ROOT}/shims" ]; then alt="${PYENV_TEST_DIR}/$(echo "${found#/}" | tr '/' '-')" mkdir -p "$alt" for util in bash head cut readlink greadlink; do if [ -x "${found}/$util" ]; then ln -s "${found}/$util" "${alt}/$util" fi done path="${path/:${found}:/:${alt}:}" fi done done path="${path#:}" path="${path%:}" echo "$path" } create_hook() { mkdir -p "${PYENV_HOOK_PATH}/$1" touch "${PYENV_HOOK_PATH}/$1/$2" if [ ! -t 0 ]; then cat > "${PYENV_HOOK_PATH}/$1/$2" fi } pyenv-2.5.4/test/version-file-read.bats000066400000000000000000000047001476513315000200360ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper setup() { mkdir -p "${PYENV_TEST_DIR}/myproject" cd "${PYENV_TEST_DIR}/myproject" } @test "fails without arguments" { run pyenv-version-file-read assert_failure "" } @test "fails for invalid file" { run pyenv-version-file-read "non-existent" assert_failure "" } @test "fails for blank file" { echo > my-version run pyenv-version-file-read my-version assert_failure "" } @test "reads simple version file" { cat > my-version <<<"3.3.5" run pyenv-version-file-read my-version assert_success "3.3.5" } @test "ignores leading spaces" { cat > my-version <<<" 3.3.5" run pyenv-version-file-read my-version assert_success "3.3.5" } @test "reads only the first word from file" { cat > my-version <<<"3.3.5 2.7.6 hi" run pyenv-version-file-read my-version assert_success "3.3.5" } @test "loads *not* only the first line in file" { cat > my-version < my-version < my-version run pyenv-version-file-read my-version assert_success "2.7.6" } @test "ignores carriage returns" { cat > my-version <<< $'3.3.5\r' run pyenv-version-file-read my-version assert_success "3.3.5" } @test "skips comment lines" { cat > my-version < my-version run pyenv-version-file-read my-version assert_failure "pyenv: invalid version \`..' ignored in \`my-version'" } @test "skips glob path traversal" { cat > my-version < my-version run pyenv-version-file-read my-version assert_success "${venv}" } @test "skips relative paths that lead outside of versions" { venv=../3.10.3/envs/test mkdir -p "${PYENV_ROOT}/versions/${venv}" echo -n "${venv}" > my-version run pyenv-version-file-read my-version assert_failure } pyenv-2.5.4/test/version-file-write.bats000066400000000000000000000017741476513315000202650ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper setup() { mkdir -p "$PYENV_TEST_DIR" cd "$PYENV_TEST_DIR" } @test "invocation without 2 arguments prints usage" { run pyenv-version-file-write assert_failure "Usage: pyenv version-file-write [-f|--force] [...]" run pyenv-version-file-write "one" "" assert_failure } @test "setting nonexistent version fails" { assert [ ! -e ".python-version" ] run pyenv-version-file-write ".python-version" "2.7.6" assert_failure "pyenv: version \`2.7.6' not installed" assert [ ! -e ".python-version" ] } @test "setting nonexistent version succeeds with force" { assert [ ! -e ".python-version" ] run pyenv-version-file-write --force ".python-version" "2.7.6" assert_success assert [ -e ".python-version" ] } @test "writes value to arbitrary file" { mkdir -p "${PYENV_ROOT}/versions/2.7.6" assert [ ! -e "my-version" ] run pyenv-version-file-write "${PWD}/my-version" "2.7.6" assert_success "" assert [ "$(cat my-version)" = "2.7.6" ] } pyenv-2.5.4/test/version-file.bats000066400000000000000000000035421476513315000171300ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper setup() { mkdir -p "$PYENV_TEST_DIR" cd "$PYENV_TEST_DIR" } create_file() { mkdir -p "$(dirname "$1")" echo "system" > "$1" } @test "detects global 'version' file" { create_file "${PYENV_ROOT}/version" run pyenv-version-file assert_success "${PYENV_ROOT}/version" } @test "prints global file if no version files exist" { assert [ ! -e "${PYENV_ROOT}/version" ] assert [ ! -e ".python-version" ] run pyenv-version-file assert_success "${PYENV_ROOT}/version" } @test "in current directory" { create_file ".python-version" run pyenv-version-file assert_success "${PYENV_TEST_DIR}/.python-version" } @test "in parent directory" { create_file ".python-version" mkdir -p project cd project run pyenv-version-file assert_success "${PYENV_TEST_DIR}/.python-version" } @test "topmost file has precedence" { create_file ".python-version" create_file "project/.python-version" cd project run pyenv-version-file assert_success "${PYENV_TEST_DIR}/project/.python-version" } @test "PYENV_DIR has precedence over PWD" { create_file "widget/.python-version" create_file "project/.python-version" cd project PYENV_DIR="${PYENV_TEST_DIR}/widget" run pyenv-version-file assert_success "${PYENV_TEST_DIR}/widget/.python-version" } @test "PWD is searched if PYENV_DIR yields no results" { mkdir -p "widget/blank" create_file "project/.python-version" cd project PYENV_DIR="${PYENV_TEST_DIR}/widget/blank" run pyenv-version-file assert_success "${PYENV_TEST_DIR}/project/.python-version" } @test "finds version file in target directory" { create_file "project/.python-version" run pyenv-version-file "${PWD}/project" assert_success "${PYENV_TEST_DIR}/project/.python-version" } @test "fails when no version file in target directory" { run pyenv-version-file "$PWD" assert_failure "" } pyenv-2.5.4/test/version-name.bats000066400000000000000000000063301476513315000171270ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper create_version() { mkdir -p "${PYENV_ROOT}/versions/$1" } setup() { mkdir -p "$PYENV_TEST_DIR" cd "$PYENV_TEST_DIR" } @test "no version selected" { assert [ ! -d "${PYENV_ROOT}/versions" ] run pyenv-version-name assert_success "system" } @test "system version is not checked for existence" { PYENV_VERSION=system run pyenv-version-name assert_success "system" } @test "PYENV_VERSION can be overridden by hook" { create_version "2.7.11" create_version "3.5.1" create_hook version-name test.bash <<<"PYENV_VERSION=3.5.1" PYENV_VERSION=2.7.11 run pyenv-version-name assert_success "3.5.1" } @test "carries original IFS within hooks" { create_hook version-name hello.bash < ".python-version" <<<"2.7.11" run pyenv-version-name assert_success "2.7.11" PYENV_VERSION=3.5.1 run pyenv-version-name assert_success "3.5.1" } @test "local file has precedence over global" { create_version "2.7.11" create_version "3.5.1" cat > "${PYENV_ROOT}/version" <<<"2.7.11" run pyenv-version-name assert_success "2.7.11" cat > ".python-version" <<<"3.5.1" run pyenv-version-name assert_success "3.5.1" } @test "missing version" { PYENV_VERSION=1.2 run pyenv-version-name assert_failure "pyenv: version \`1.2' is not installed (set by PYENV_VERSION environment variable)" } @test "missing version with --force" { PYENV_VERSION=1.2 run pyenv-version-name -f assert_success "1.2" } @test "one missing version (second missing)" { create_version "3.5.1" PYENV_VERSION="3.5.1:1.2" run pyenv-version-name assert_failure assert_output </dev/null } @test "one missing version (without stderr)" { create_version "3.5.1" PYENV_VERSION="1.2:3.5.1" run pyenv-version-name-without-stderr assert_failure assert_output < ".python-version" <<<"python-2.7.11" run pyenv-version-name assert_success assert_output "2.7.11" } @test "falls back to pyenv-latest" { create_version "2.7.11" PYENV_VERSION="2.7" run pyenv-version-name assert_success assert_output "2.7.11" } @test "pyenv-latest fallback with prefix in name" { create_version "3.12.6" PYENV_VERSION="python-3.12" run pyenv-version-name assert_success assert_output "3.12.6" } @test "pyenv version started by python-" { create_version "python-3.12.6" PYENV_VERSION="python-3.12.6" run pyenv-version-name assert_success assert_output "python-3.12.6" } pyenv-2.5.4/test/version-origin.bats000066400000000000000000000025211476513315000174740ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper setup() { mkdir -p "$PYENV_TEST_DIR" cd "$PYENV_TEST_DIR" } @test "reports global file even if it doesn't exist" { assert [ ! -e "${PYENV_ROOT}/version" ] run pyenv-version-origin assert_success "${PYENV_ROOT}/version" } @test "detects global file" { mkdir -p "$PYENV_ROOT" touch "${PYENV_ROOT}/version" run pyenv-version-origin assert_success "${PYENV_ROOT}/version" } @test "detects PYENV_VERSION" { PYENV_VERSION=1 run pyenv-version-origin assert_success "PYENV_VERSION environment variable" } @test "detects local file" { echo "system" > .python-version run pyenv-version-origin assert_success "${PWD}/.python-version" } @test "reports from hook" { create_hook version-origin test.bash <<<"PYENV_VERSION_ORIGIN=plugin" PYENV_VERSION=1 run pyenv-version-origin assert_success "plugin" } @test "carries original IFS within hooks" { create_hook version-origin hello.bash < ".python-version" <<<"3.3.3" run pyenv-version assert_success "3.3.3 (set by ${PWD}/.python-version)" } @test "set by global file" { create_version "3.3.3" cat > "${PYENV_ROOT}/version" <<<"3.3.3" run pyenv-version assert_success "3.3.3 (set by ${PYENV_ROOT}/version)" } @test "set by PYENV_VERSION, one missing" { create_version "3.3.3" PYENV_VERSION=3.3.3:1.2 run pyenv-version assert_failure assert_output </dev/null } @test "set by PYENV_VERSION, one missing (stderr filtered)" { create_version "3.3.3" PYENV_VERSION=3.4.2:3.3.3 run pyenv-version-without-stderr assert_failure assert_output < "${bin}/$name" chmod +x "${bin}/$name" } @test "no versions installed" { stub_system_python assert [ ! -d "${PYENV_ROOT}/versions" ] run pyenv-versions assert_success "* system (set by ${PYENV_ROOT}/version)" } @test "not even system python available" { PATH="$(path_without python python2 python3)" run pyenv-versions assert_failure assert_output "Warning: no Python detected on the system" } @test "bare output no versions installed" { assert [ ! -d "${PYENV_ROOT}/versions" ] run pyenv-versions --bare assert_success "" } @test "single version installed" { stub_system_python create_version "3.3" run pyenv-versions assert_success assert_output < "${PYENV_ROOT}/version" <<<"3.3.3" run pyenv-versions assert_success assert_output < ".python-version" <<<"3.3.3" run pyenv-versions assert_success assert_output </dev/null if [ "\$1" == "--version-sort" ]; then echo "${PYENV_ROOT}/versions/1.9.0" echo "${PYENV_ROOT}/versions/1.53.0" echo "${PYENV_ROOT}/versions/1.218.0" else exit 1 fi SH run pyenv-versions --bare assert_success assert_output < 1.9.0 OUT } pyenv-2.5.4/test/whence.bats000066400000000000000000000010161476513315000157710ustar00rootroot00000000000000#!/usr/bin/env bats load test_helper create_executable() { local bin="${PYENV_ROOT}/versions/${1}/bin" mkdir -p "$bin" touch "${bin}/$2" chmod +x "${bin}/$2" } @test "finds versions where present" { create_executable "2.7" "python" create_executable "2.7" "fab" create_executable "3.4" "python" create_executable "3.4" "py.test" run pyenv-whence python assert_success assert_output < "${PYENV_ROOT}/version" <<<"3.4" create_executable "3.4" "python" mkdir -p "$PYENV_TEST_DIR" cd "$PYENV_TEST_DIR" PYENV_VERSION= run pyenv-which python assert_success "${PYENV_ROOT}/versions/3.4/bin/python" } @test "tolerates nonexistent versions from pyenv-version-name" { mkdir -p "$PYENV_ROOT" cat > "${PYENV_ROOT}/version" <