text: #!/bin/bash
  
  set -e
  set -x
  
  SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}")
  
  shlib_sed() {
      # modify the shlib version to a unique one to make sure the dynamic
      # linker doesn't load the system one.
      sed -i "s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=100/" Makefile
      sed -i "s/^SHLIB_MINOR=.*/SHLIB_MINOR=0.0/" Makefile
      sed -i "s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=100.0.0/" Makefile
  }
  
  # download, compile, and install if it's not already present via travis
  # cache
  if [ -n "${OPENSSL}" ]; then
      . "$SCRIPT_DIR/openssl_config.sh"
      if [[ ! -f "$HOME/$OPENSSL_DIR/bin/openssl" ]]; then
          curl -O "https://www.openssl.org/source/openssl-${OPENSSL}.tar.gz"
          tar zxf "openssl-${OPENSSL}.tar.gz"
          pushd "openssl-${OPENSSL}"
          ./config $OPENSSL_CONFIG_FLAGS -fPIC --prefix="$HOME/$OPENSSL_DIR"
          shlib_sed
          make depend
          make -j"$(nproc)"
          # CRYPTOGRAPHY_OPENSSL_LESS_THAN_110
          if [ "${OPENSSL}" == "1.0.2u" ]; then
              make install
          else
              # avoid installing the docs on versions of OpenSSL that aren't ancient.
              # https://github.com/openssl/openssl/issues/6685#issuecomment-403838728
              make install_sw install_ssldirs
          fi
          popd
      fi
  elif [ -n "${LIBRESSL}" ]; then
      LIBRESSL_DIR="ossl-2/${LIBRESSL}"
      if [[ ! -f "$HOME/$LIBRESSL_DIR/bin/openssl" ]]; then
          curl -O "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL}.tar.gz"
          tar zxf "libressl-${LIBRESSL}.tar.gz"
          pushd "libressl-${LIBRESSL}"
          ./config -Wl -Wl,-Bsymbolic-functions -fPIC shared --prefix="$HOME/$LIBRESSL_DIR"
          shlib_sed
          make -j"$(nproc)" install
          popd
      fi
  fi
  
  if [ -n "${DOCKER}" ]; then
      if [ -n "${OPENSSL}" ] || [ -n "${LIBRESSL}" ]; then
          echo "OPENSSL and LIBRESSL are not allowed when DOCKER is set."
          exit 1
      fi
      docker pull "$DOCKER" || docker pull "$DOCKER" || docker pull "$DOCKER"
  fi
  
  if [ -z "${DOWNSTREAM}" ]; then
      git clone --depth=1 https://github.com/google/wycheproof "$HOME/wycheproof"
  fi
  
  pip install -U pip
  pip install virtualenv
  
  python -m virtualenv ~/.venv
  source ~/.venv/bin/activate
  # If we pin coverage it must be kept in sync with tox.ini and .github/workflows/ci.yml
  pip install tox coverage
  