mirror of
https://github.com/ivabus/pantry
synced 2024-11-26 18:25:08 +03:00
221 lines
6.7 KiB
YAML
221 lines
6.7 KiB
YAML
distributable:
|
||
url: https://www.python.org/ftp/python/{{ version.raw }}/Python-{{ version.raw }}.tar.xz
|
||
strip-components: 1
|
||
|
||
versions:
|
||
github: python/cpython/tags
|
||
|
||
companions:
|
||
pip.pypa.io: '*'
|
||
|
||
unpackaged:
|
||
- version: ^2
|
||
platform: darwin
|
||
arch: aarc64
|
||
reason: help-wanted
|
||
|
||
provides:
|
||
- bin/python
|
||
- bin/python{{ version.major }}
|
||
- bin/python{{ version.marketing }}
|
||
|
||
interprets:
|
||
extensions: py
|
||
args: python
|
||
|
||
dependencies:
|
||
# recommended (but none are actually required)
|
||
zlib.net: 1
|
||
sourceware.org/bzip2: 1
|
||
openssl.org: ^1.1
|
||
sourceware.org/libffi: 3
|
||
libexpat.github.io: 2
|
||
bytereef.org/mpdecimal: 2
|
||
tukaani.org/xz: 5
|
||
sqlite.org: 3
|
||
gnu.org/readline: 8
|
||
invisible-island.net/ncurses: 6
|
||
# linux:
|
||
# oracle.com/berkeley-db: 18
|
||
|
||
build:
|
||
dependencies:
|
||
tea.xyz/gx/cc: c99
|
||
tea.xyz/gx/make: '*'
|
||
freedesktop.org/pkg-config: ^0.29
|
||
crates.io/semverator: '*'
|
||
|
||
script:
|
||
# fixes the build scripts so they use the standard environment variables we set
|
||
- |
|
||
sed -i.bak -e 's|system_lib_dirs = .*|system_lib_dirs = os.getenv("LIBRARY_PATH").split(":")|' ./setup.py
|
||
sed -i.bak -e 's|system_include_dirs = .*|system_include_dirs = os.getenv("CPATH").split(":")|' ./setup.py
|
||
|
||
# older versions use a different config dir
|
||
- |
|
||
if semverator satisfies '<3.8' {{ version }}; then
|
||
# older versions use a different config dir
|
||
confdir=$(echo $confdir | sed -e 's/\(config-{{ version.marketing }}\)/\1m/')
|
||
|
||
# 3.7 and older use `python3.7m` for include dir
|
||
SUFFIX=m
|
||
|
||
# 3.7 aborts on linux+aarch64 with this
|
||
ARGS=${ARGS/--with-ensurepip/--without-ensurepip}
|
||
fi
|
||
|
||
- ./configure $ARGS
|
||
- make --jobs {{ hw.concurrency }}
|
||
- make install
|
||
|
||
# customize `pip install` locations to tea defaults
|
||
- cp props/sitecustomize.py {{prefix}}/lib/python{{version.marketing}}
|
||
|
||
# provide unversioned symlinks
|
||
- run: |
|
||
for x in python idle pydoc; do
|
||
ln -sf ${x}{{ version.marketing }} $x
|
||
done
|
||
ln -sf python{{ version.marketing }}-config python-config
|
||
working-directory: ${{prefix}}/bin
|
||
|
||
# we provide the binaries in a separate package
|
||
# but we don’t use --without-ensurepip because stuff expects python to
|
||
# come bundled with setuptools
|
||
- run: find . -mindepth 1 -maxdepth 1 -type f -name 'pip*' -exec rm {} \;
|
||
working-directory: ${{prefix}}/bin
|
||
|
||
# make relocatable
|
||
- run: |
|
||
for binfile in $shebangs $confdir/python-config.py; do
|
||
if ! test -f $binfile; then
|
||
binfile=${binfile/{{version.marketing}}/{{version.marketing}}$SUFFIX}
|
||
fi
|
||
if ! test -f $binfile; then
|
||
continue
|
||
fi
|
||
binfile=$(readlink -f $binfile)
|
||
sed -i.bak -e 's|#!{{ prefix }}/bin/|#!/usr/bin/env |g' $binfile
|
||
rm $binfile.bak
|
||
done
|
||
|
||
sed -i.bak -e 's|{{ prefix }}|\\$(shell tea --prefix)/python.org/v{{version.major}}|g' $confdir/Makefile
|
||
rm $confdir/Makefile.bak
|
||
working-directory: ${{prefix}}
|
||
|
||
- run:
|
||
cat $PROP >> _sysconfigdata__*.py
|
||
working-directory:
|
||
${{prefix}}/lib/python{{version.marketing}}
|
||
prop: |
|
||
import os
|
||
import re
|
||
|
||
tea_prefix = os.path.normpath(os.path.join(os.path.dirname(__file__), '../../../../'))
|
||
for key in build_time_vars:
|
||
if isinstance(build_time_vars[key], str):
|
||
build_time_vars[key] = re.sub(r'(\s|^)/opt/', r'\g<1>{}/'.format(tea_prefix), build_time_vars[key])
|
||
|
||
# force pip to user-install mode without sudo
|
||
- ln -s /dev {{prefix}}/lib/python{{version.marketing}}/site-packages
|
||
# ^^ probs nuts lol, but the below has repurcussions
|
||
# chmod -w {{prefix}}/lib/python{{version.marketing}}
|
||
# ^^ makes rm -rf ~/.tea/python.org on macOS fail
|
||
|
||
# some stuff expects python includes to be accessible without the prefix
|
||
- run: |
|
||
mv python{{version.marketing}}$SUFFIX/* .
|
||
rmdir python{{version.marketing}}$SUFFIX
|
||
ln -s . python{{version.marketing}}
|
||
# Keep the suffixed version if we started with one
|
||
if test -n "$SUFFIX"; then
|
||
ln -s . python{{version.marketing}}$SUFFIX
|
||
fi
|
||
working-directory: ${{prefix}}/include
|
||
|
||
env:
|
||
ARGS:
|
||
- --prefix="{{ prefix }}"
|
||
- --with-ensurepip
|
||
- --enable-ipv6
|
||
- --disable-loadable-sqlite-extensions
|
||
- --with-system-expat
|
||
- --with-system-ffi
|
||
- --with-system-libmpdec
|
||
# - --enable-optimizations # fails due to clang/llvm pkging bug on Linux
|
||
# - --with-lto # fails on linux/aarch64
|
||
- --enable-shared
|
||
libdir:
|
||
lib/python{{version.marketing}}
|
||
darwin:
|
||
confdir:
|
||
$libdir/config-{{version.marketing}}-darwin
|
||
linux:
|
||
# ARGS:
|
||
# - --with-dbmliborder=bdb
|
||
ARCH: ${{hw.arch}}
|
||
confdir:
|
||
$libdir/config-{{version.marketing}}-${ARCH/-/_}-linux-gnu
|
||
shebangs:
|
||
- bin/2to3-{{version.marketing}}
|
||
- bin/idle{{version.marketing}}
|
||
- bin/pydoc{{version.marketing}}
|
||
- bin/python{{version.marketing}}-config
|
||
|
||
OPENSSL_INCLUDES: ${{ deps.openssl.org.prefix }}/include
|
||
OPENSSL_LDFLAGS: -L{{ deps.openssl.org.prefix }}/lib
|
||
|
||
test:
|
||
dependencies:
|
||
tea.xyz/gx/cc: c99
|
||
crates.io/semverator: '*'
|
||
script:
|
||
# Check if sqlite is ok, because we build with --enable-loadable-sqlite-extensions
|
||
# and it can occur that building sqlite silently fails if OSX's sqlite is used.
|
||
- python -c "import sqlite3"
|
||
|
||
# check to see if we can create a venv
|
||
# we can't ensurepip on 3.7 so, this won't work
|
||
- |
|
||
if semverator satisfies '^3.8' {{ version }}; then
|
||
python -m venv myvenv
|
||
fi
|
||
|
||
# Check if some other modules import. Then the linked libs are working.
|
||
- |
|
||
python -c "import _ctypes"
|
||
# python -c "import _decimal" #FIXME
|
||
python -c "import pyexpat"
|
||
python -c "import zlib"
|
||
|
||
# Verify that the selected DBM interface works
|
||
# FIXME: doen't work
|
||
# - run:
|
||
# python $FIXTURE
|
||
# fixture: |
|
||
# import dbm
|
||
# with dbm.ndbm.open("test", "c") as db:
|
||
# db[b"foo \\xbd"] = b"bar \\xbd"
|
||
# with dbm.ndbm.open("test", "r") as db:
|
||
# assert list(db.keys()) == [b"foo \\xbd"]
|
||
# assert b"foo \\xbd" in db
|
||
# assert db[b"foo \\xbd"] == b"bar \\xbd"
|
||
|
||
- |
|
||
if which -a pip | grep '{{ prefix }}'; then
|
||
exit 1
|
||
fi
|
||
|
||
- run: |
|
||
mv $FIXTURE b.c
|
||
cc -c b.c
|
||
fixture: |
|
||
#include <Python.h>
|
||
#include <python{{version.major}}.{{version.minor}}/Python.h>
|
||
|
||
- run:
|
||
test $(python $FIXTURE) = {{prefix}}/include/python{{version.marketing}}
|
||
fixture: |
|
||
import sysconfig
|
||
include_path = sysconfig.get_paths()['include']
|
||
print(include_path)
|