diff options
Diffstat (limited to 'script/bootstrap.sh')
-rwxr-xr-x | script/bootstrap.sh | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/script/bootstrap.sh b/script/bootstrap.sh new file mode 100755 index 00000000..c0422422 --- /dev/null +++ b/script/bootstrap.sh @@ -0,0 +1,179 @@ +#!/usr/bin/env bash + +set -e + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +pushd $DIR/.. + +# TODO this is kind of a hacky way of determining if root is required - +# ideally we wouuld set up a little virtualenv in the dependencies folder +SUDO_CMD= +if command -v sudo >/dev/null 2>&1; then + SUDO_CMD="sudo -E" + + echo "The bootstrap script needs to install a few packages to your system as an admin, and we will use the 'sudo' command - enter your password to continue" + $SUDO_CMD ls > /dev/null +fi + +KERNEL=`uname` +if [ ${KERNEL:0:7} == "MINGW32" ]; then + OS="windows" +elif [ ${KERNEL:0:6} == "CYGWIN" ]; then + OS="cygwin" +elif [ $KERNEL == "Darwin" ]; then + OS="mac" +else + OS="linux" + if ! command -v lsb_release >/dev/null 2>&1; then + # Arch Linux + if command -v pacman>/dev/null 2>&1; then + $SUDO_CMD pacman -S lsb-release + fi + fi + + DISTRO=`lsb_release -si` +fi + +die() { + echo >&2 "${bldred}$@${txtrst}" + exit 1 +} + +_cygwin_error() { + echo + echo "${bldred}Missing \"$1\"${txtrst} - run the Cygwin installer again and select the base package set:" + echo " $CYGWIN_PACKAGES" + echo "After installing the packages, re-run this bootstrap script." + die +} + +if ! command -v tput >/dev/null 2>&1; then + if [ $OS == "cygwin" ]; then + echo "OPTIONAL: Install the \"ncurses\" package in Cygwin to get colored shell output" + fi +else + txtrst=$(tput sgr0) # reset + bldred=${txtbld}$(tput setaf 1) + bldgreen=${txtbld}$(tput setaf 2) +fi + +_pushd() { + pushd $1 > /dev/null +} + +_popd() { + popd > /dev/null +} + +_wait() { + if [ -z $CI ]; then + echo "Press Enter when done" + read + fi +} + +_install() { + if [ $OS == "cygwin" ]; then + _cygwin_error $1 + elif [ $OS == "mac" ]; then + # brew exists with 1 if it's already installed + set +e + brew install $1 + set -e + else + if [ -z $DISTRO ]; then + echo + echo "Missing $1 - install it using your distro's package manager or build from source" + _wait + else + if [ $DISTRO == "arch" ]; then + $SUDO_CMD pacman -S $1 + elif [ $DISTRO == "Ubuntu" ]; then + $SUDO_CMD apt-get update -qq + $SUDO_CMD apt-get install $1 -y + else + echo + echo "Missing $1 - install it using your distro's package manager or build from source" + _wait + fi + fi + fi +} + +CYGWIN_PACKAGES="make curl, libsasl2, ca-certificates, ncurses, python-setuptools" + +download() { + url=$1 + filename=$2 + curl $url -L --O $filename +} + +if [ `id -u` == 0 ]; then + die "Error: running as root - don't use 'sudo' with this script" +fi + +if ! command -v curl >/dev/null 2>&1; then + if [ $OS == "cygwin" ]; then + _cygwin_error "curl" + else + _install curl + fi +fi + +if [ $OS == "windows" ]; then + die "Sorry, the bootstrap script for compiling from source doesn't support the Windows console - try Cygwin." +fi + +if [ $OS == "mac" ] && ! command -v brew >/dev/null 2>&1; then + echo "Installing Homebrew..." + ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)" +fi + +if ! command -v make >/dev/null 2>&1; then + if [ $OS == "cygwin" ]; then + _cygwin_error "make" + elif [ $OS == "mac" ]; then + die "Missing 'make' - install the Xcode CLI tools" + else + if [ $DISTRO == "arch" ]; then + $SUDO_CMD pacman -S base-devel + elif [ $DISTRO == "Ubuntu" ]; then + $SUDO_CMD apt-get update -qq + $SUDO_CMD apt-get install build-essential -y + fi + fi +fi + +if ! command -v python >/dev/null 2>&1; then + echo "Installing Python..." + _install "python" +fi + +if ! command -v pip >/dev/null 2>&1; then + echo "Installing Pip..." + if ! command -v easy_install >/dev/null 2>&1; then + die "easy_install not available, can't install pip" + fi + + $SUDO_CMD easy_install pip +fi + +$SUDO_CMD pip install -U pip +$SUDO_CMD pip install --pre -Ur pip-requirements.txt + +if ! command -v protoc >/dev/null 2>&1; then + if [ $OS == "cygwin" ]; then + _cygwin_error "protobuf" + elif [ $OS == "mac" ] || [ $OS == "linux" ]; then + if [ $DISTRO == "Ubuntu" ]; then + _install protobuf-compiler + else + _install protobuf + fi + fi +fi + +popd + +echo +echo "${bldgreen}All developer dependencies installed, ready to compile.$txtrst" |