#!not for running standalone, see .travis.yml cache_dir=$HOME/.cache install_dir=$cache_dir/py3-openssl11 python_version="3.7.3" openssl_version="1.1.1f" cpucount=$(nproc --all) export PYTHONDONTWRITEBYTECODE=1 #rm -rf $cache_dir/* # uncomment to rebuild if [[ $($install_dir/bin/python -V) != "Python $python_version" ]] ; then ( mkdir -p /tmp/source cd /tmp/source # Compile OpenSSL curl -fLOsS "https://www.openssl.org/source/openssl-$openssl_version.tar.gz" echo "Extracting OpenSSL..." tar xf openssl-$openssl_version.tar.gz cd ./openssl-$openssl_version echo "Compiling OpenSSL $openssl_version..." ./config shared --prefix=$install_dir echo "Running make for OpenSSL..." make -j$cpucount -s echo "Running make install for OpenSSL..." make install_sw >/dev/null export LD_LIBRARY_PATH=$install_dir/lib cd /tmp/source sudo apt install -qq --yes libffi-dev # Compile latest Python curl -fLOsS "https://www.python.org/ftp/python/$python_version/Python-$python_version.tar.xz" echo "Extracting Python..." tar xf Python-$python_version.tar.xz cd ./Python-$python_version echo "Compiling Python $python_version..." # Note we are purposefully NOT using optimization flags as they increase compile time 10x conf_flags="--with-openssl=$install_dir --prefix=$install_dir --with-ensurepip=upgrade" CFLAGS=-O1 ./configure $conf_flags > /dev/null make -j$cpucount -s echo "Installing Python..." make altinstall bininstall >/dev/null ln -fs pip3.7 $install_dir/bin/pip3 ln -fs pip3 $install_dir/bin/pip ln -fs python3 $install_dir/bin/python # care for CI cache size find $install_dir -type d -name __pycache__ -print0 |xargs -0 rm -rf ) fi export LD_LIBRARY_PATH=$install_dir/lib export PATH=$install_dir/bin:$PATH if [[ $(python -V) != "Python $python_version" ]] ; then echo "Required Python version was not installed into PATH" >&2 exit 1 fi if [[ $(python -c 'import ssl; print(ssl.OPENSSL_VERSION)') != OpenSSL\ ${openssl_version}* ]] ; then echo "Required OpenSSL version was not installed into Python" >&2 exit 1 fi