101 lines
2.3 KiB
Bash
Executable file
101 lines
2.3 KiB
Bash
Executable file
#!/bin/sh -eux
|
|
|
|
# set python version
|
|
VERSION=${VERSION:-3.7}
|
|
PYTHON=${PYTHON:-python$VERSION}
|
|
METHOD=${METHOD:-venv}
|
|
TOX=${TOX:-true}
|
|
|
|
# clean from possible older runs
|
|
rm -rf venv .tox __pycache__ .pytest* test_*.py *.pyx *.c *.so || :
|
|
|
|
# check the we can create the venv
|
|
if [ "$METHOD" == "venv" ]; then
|
|
$PYTHON -m venv venv
|
|
elif [ "$METHOD" == "virtualenv" ]; then
|
|
virtualenv --python=$PYTHON venv
|
|
elif [ "$METHOD" == "virtualenv-no-download" ]; then
|
|
virtualenv --no-download --python=$PYTHON venv
|
|
else
|
|
echo 'Unsupported $METHOD' $METHOD >&2
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# and activate it
|
|
# unset variables on 3.5, it's known
|
|
set +u
|
|
source venv/bin/activate
|
|
set -u
|
|
|
|
# run python in it
|
|
python -c 'import sys; print(sys.version)' | head -n1 | grep $VERSION
|
|
|
|
# install packages with pip
|
|
if [ "$VERSION" == "2.6" ]; then
|
|
pip install pytest
|
|
pip install Cython --install-option="--no-cython-compile"
|
|
else
|
|
python -m pip install pytest
|
|
if [ "$VERSION" == "3.9" ]; then
|
|
# Cython support for 3.9.0a1+ is not yet released
|
|
python -m pip install https://github.com/cython/cython/archive/master.tar.gz --install-option="--no-cython-compile"
|
|
elif [ "$PYTHON" != "jython" ]; then
|
|
# We try to fetch a wheel only and if that fails, we disable compilation
|
|
# Useful for fresh CPythons, where wheels are not yet ready, but Cython defaults to compiling
|
|
python -m pip install Cython --only-binary :all: || python -m pip install Cython --install-option="--no-cython-compile"
|
|
fi
|
|
fi
|
|
|
|
# run tests
|
|
cat > test_foo.py << EOF
|
|
def test_foo():
|
|
assert True
|
|
EOF
|
|
|
|
python -m pytest -v test_foo.py
|
|
|
|
# check that we can do extension modules
|
|
if [ "$PYTHON" != "jython" ]; then
|
|
cat > module.pyx << EOF
|
|
cdef int add(int a, int b):
|
|
return a + b
|
|
|
|
def two():
|
|
cdef int a = 1
|
|
cdef int b = 1
|
|
return add(a, b)
|
|
EOF
|
|
|
|
cat > setup.py << EOF
|
|
from setuptools import setup
|
|
from Cython.Build import cythonize
|
|
|
|
setup(ext_modules = cythonize('module.pyx'))
|
|
EOF
|
|
|
|
python setup.py build_ext --inplace
|
|
|
|
python -c 'import module; print(module.two())' | grep '^2$'
|
|
fi
|
|
|
|
# deactivate has unset variable, it's known
|
|
set +u
|
|
deactivate
|
|
set -u
|
|
|
|
# use it with tox
|
|
[[ "$TOX" != "true" ]] && exit 0
|
|
cat > tox.ini << EOF
|
|
[tox]
|
|
skipsdist = True
|
|
[testenv]
|
|
deps = pytest
|
|
commands = python -m pytest -v test_foo.py
|
|
EOF
|
|
|
|
if [[ $PYTHON == python* ]]; then
|
|
tox -e py${VERSION/./}
|
|
else
|
|
tox -e $PYTHON
|
|
fi
|