| #!/usr/bin/env bash |
| # |
| # **tools/build_wheels.sh** - Build a cache of Python wheels |
| # |
| # build_wheels.sh [package [...]] |
| # |
| # System package prerequisites listed in ``files/*/devlibs`` will be installed |
| # |
| # Builds wheels for all virtual env requirements listed in |
| # ``venv-requirements.txt`` plus any supplied on the command line. |
| # |
| # Assumes: |
| # - ``tools/install_pip.sh`` has been run and a suitable ``pip/setuptools`` is available. |
| |
| # If ``TOP_DIR`` is set we're being sourced rather than running stand-alone |
| # or in a sub-shell |
| if [[ -z "$TOP_DIR" ]]; then |
| |
| set -o errexit |
| set -o nounset |
| |
| # Keep track of the DevStack directory |
| TOP_DIR=$(cd $(dirname "$0")/.. && pwd) |
| FILES=$TOP_DIR/files |
| |
| # Import common functions |
| source $TOP_DIR/functions |
| |
| GetDistro |
| |
| source $TOP_DIR/stackrc |
| |
| trap err_trap ERR |
| |
| fi |
| |
| # Get additional packages to build |
| MORE_PACKAGES="$@" |
| |
| # Exit on any errors so that errors don't compound |
| function err_trap { |
| local r=$? |
| set +o xtrace |
| |
| rm -rf $TMP_VENV_PATH |
| |
| exit $r |
| } |
| |
| # Get system prereqs |
| install_package $(get_packages devlibs) |
| |
| # Get a modern ``virtualenv`` |
| pip_install virtualenv |
| |
| # Prepare the workspace |
| TMP_VENV_PATH=$(mktemp -d tmp-venv-XXXX) |
| virtualenv $TMP_VENV_PATH |
| |
| # Install modern pip and wheel |
| PIP_VIRTUAL_ENV=$TMP_VENV_PATH pip_install -U pip wheel |
| |
| # ``VENV_PACKAGES`` is a list of packages we want to pre-install |
| VENV_PACKAGE_FILE=$FILES/venv-requirements.txt |
| if [[ -r $VENV_PACKAGE_FILE ]]; then |
| VENV_PACKAGES=$(grep -v '^#' $VENV_PACKAGE_FILE) |
| fi |
| |
| for pkg in ${VENV_PACKAGES,/ } ${MORE_PACKAGES}; do |
| $TMP_VENV_PATH/bin/pip wheel $pkg |
| done |
| |
| # Clean up wheel workspace |
| rm -rf $TMP_VENV_PATH |