mirror of
https://github.com/RobotechLille/cdf2018-principal
synced 2024-11-15 04:46:06 +01:00
191 lines
5.1 KiB
Bash
191 lines
5.1 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
set -e
|
||
|
BOOTSTRAP_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||
|
|
||
|
if [ -z $COMMON_SOURCED ]; then
|
||
|
|
||
|
# 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"
|
||
|
|
||
|
if [ -z $CI ] && [ -z $VAGRANT ]; then
|
||
|
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
|
||
|
fi
|
||
|
|
||
|
KERNEL=`uname`
|
||
|
ARCH=`uname -m`
|
||
|
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
|
||
|
set +e
|
||
|
# These exit with 1 when provisioning in a Vagrant box...?
|
||
|
txtrst=$(tput sgr0) # reset
|
||
|
bldred=${txtbld}$(tput setaf 1)
|
||
|
bldgreen=${txtbld}$(tput setaf 2)
|
||
|
set -e
|
||
|
fi
|
||
|
|
||
|
|
||
|
_pushd() {
|
||
|
pushd $1 > /dev/null
|
||
|
}
|
||
|
|
||
|
_popd() {
|
||
|
popd > /dev/null
|
||
|
}
|
||
|
|
||
|
_wait() {
|
||
|
if [ -z $CI ] && [ -z $VAGRANT ]; 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
|
||
|
}
|
||
|
|
||
|
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 unzip >/dev/null 2>&1; then
|
||
|
_install "unzip"
|
||
|
fi
|
||
|
|
||
|
if ! command -v curl >/dev/null 2>&1; then
|
||
|
if [ $OS == "cygwin" ]; then
|
||
|
_cygwin_error "curl"
|
||
|
else
|
||
|
_install curl
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
echo "Storing all downloaded dependencies in the \"dependencies\" folder"
|
||
|
|
||
|
DEPENDENCIES_FOLDER="/var/tmp/Arduino-Makefile-testing-dependencies"
|
||
|
mkdir -p $DEPENDENCIES_FOLDER
|
||
|
|
||
|
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
|
||
|
_install "base-devel"
|
||
|
elif [ $DISTRO == "Ubuntu" ]; then
|
||
|
_install "build-essential"
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ $DISTRO == "Ubuntu" ] && [ $ARCH == "x86_64" ]; then
|
||
|
_install "libc6-i386"
|
||
|
_install "lib32gcc1"
|
||
|
fi
|
||
|
|
||
|
if ! command -v g++ >/dev/null 2>&1; then
|
||
|
if [ $DISTRO == "Ubuntu" ]; then
|
||
|
_install "g++"
|
||
|
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
|
||
|
_install "python-setuptools"
|
||
|
fi
|
||
|
|
||
|
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
|
||
|
|
||
|
PIP_SUDO_CMD=
|
||
|
if [ -z $VIRTUAL_ENV ]; then
|
||
|
# Only use sudo if the user doesn't have an active virtualenv
|
||
|
PIP_SUDO_CMD=$SUDO_CMD
|
||
|
fi
|
||
|
|
||
|
$PIP_SUDO_CMD pip install --src dependencies --pre -Ur $BOOTSTRAP_DIR/pip-requirements.txt
|
||
|
|
||
|
COMMON_SOURCED=1
|
||
|
fi
|