blob: f1740dfbd611d560a69a4ab32d2d93c158518214 [file] [log] [blame]
Dean Troyerb1d8e8e2015-02-16 13:58:35 -06001#!/usr/bin/env bash
2#
3# **tools/build_wheels.sh** - Build a cache of Python wheels
4#
5# build_wheels.sh [package [...]]
6#
7# System package prerequisites listed in files/*/devlibs will be installed
8#
9# Builds wheels for all virtual env requirements listed in
10# ``venv-requirements.txt`` plus any supplied on the command line.
11#
12# Assumes ``tools/install_pip.sh`` has been run and a suitable pip/setuptools is available.
13
14# If TOP_DIR is set we're being sourced rather than running stand-alone
15# or in a sub-shell
16if [[ -z "$TOP_DIR" ]]; then
17
18 set -o errexit
19 set -o nounset
20
21 # Keep track of the devstack directory
22 TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
23 FILES=$TOP_DIR/files
24
25 # Import common functions
26 source $TOP_DIR/functions
27
28 GetDistro
29
30 source $TOP_DIR/stackrc
31
32 trap err_trap ERR
33
34fi
35
36# Get additional packages to build
37MORE_PACKAGES="$@"
38
Dean Troyerb1d8e8e2015-02-16 13:58:35 -060039# Exit on any errors so that errors don't compound
40function err_trap {
41 local r=$?
42 set +o xtrace
43
44 rm -rf $TMP_VENV_PATH
45
46 exit $r
47}
48
49# Get system prereqs
50install_package $(get_packages devlibs)
51
52# Get a modern ``virtualenv``
53pip_install virtualenv
54
55# Prepare the workspace
56TMP_VENV_PATH=$(mktemp -d tmp-venv-XXXX)
57virtualenv $TMP_VENV_PATH
58
59# Install modern pip and wheel
Ramy Asselindb29a7c2015-02-26 14:30:07 -080060PIP_VIRTUAL_ENV=$TMP_VENV_PATH pip_install -U pip wheel
Dean Troyerb1d8e8e2015-02-16 13:58:35 -060061
62# VENV_PACKAGES is a list of packages we want to pre-install
63VENV_PACKAGE_FILE=$FILES/venv-requirements.txt
64if [[ -r $VENV_PACKAGE_FILE ]]; then
65 VENV_PACKAGES=$(grep -v '^#' $VENV_PACKAGE_FILE)
66fi
67
68for pkg in ${VENV_PACKAGES,/ } ${MORE_PACKAGES}; do
69 $TMP_VENV_PATH/bin/pip wheel $pkg
70done
71
72# Clean up wheel workspace
73rm -rf $TMP_VENV_PATH