#!/bin/bash -e required_pkgs=(git arcanist # source code control cmake clang-3.9 llvm-3.9 pkg-config # build system curl wget # for downloading libs uuid-dev default-jre-headless # required by antlr libreadline-dev # for memgraph console libssl-dev libseccomp-dev python3 python-virtualenv python3-pip # for qa, macro_benchmark and stress tests uuid-dev # mg-utils libcurl4-openssl-dev # mg-requests sbcl # for custom Lisp C++ preprocessing ) optional_pkgs=(clang-format # source code formatting doxygen graphviz # source documentation generators php-cli # for user technical documentation generators mono-runtime mono-mcs nodejs # for driver tests ) use_sudo=0 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$DIR" function print_help () { echo "Usage: $0 [OPTION]" echo -e "Check for missing packages and install them if possible.\n" echo "Optional arguments:" echo -e " -s\tuse sudo apt-get for installing packages" echo -e " -h\tdisplay this help and exit" } function setup_virtualenv () { pushd $1 > /dev/null echo "Setting up virtualenv for: $1" # remove old virtualenv if [ -d ve3 ]; then rm -rf ve3 fi # create new virtualenv virtualenv -p python3 ve3 || exit 1 source ve3/bin/activate # we need to increase the timeout for pip because our local cache server # can sometimes be stupid, see: https://github.com/devpi/devpi/issues/208 pip --timeout 1000 install -i http://deps.memgraph.io:3141/root/pypi \ --trusted-host deps.memgraph.io -r requirements.txt || exit 1 deactivate popd > /dev/null } if [[ $# -gt 1 ]]; then print_help exit 1 elif [[ $# -eq 1 ]]; then case "$1" in -s) use_sudo=1 ;; -h) print_help exit 0 ;; *) # unknown option print_help exit 1 ;; esac fi echo "Started installing dependencies for Memgraph" required_missing=0 # install all dependencies on debian based operating systems for pkg in ${required_pkgs[@]}; do if dpkg -s $pkg 2>/dev/null >/dev/null; then echo "Found $pkg" elif (( $use_sudo )); then echo "Installing $pkg" if [[ ! `sudo apt-get -y install $pkg` ]]; then echo "Didn't install $pkg [required]" required_missing=1 fi else echo "Missing $pkg [required]" required_missing=1 fi done for pkg in ${optional_pkgs[@]}; do if dpkg -s $pkg 2>/dev/null >/dev/null; then echo "Found $pkg [optional]" else echo "Missing $pkg [optional]" fi done if (( $required_missing )); then echo "Missing required packages. EXITING!" echo "Please, install required packages and rerun $0 again." exit 2 fi # create a default build directory mkdir -p ./build # quicklisp package manager for Common Lisp # TODO: We should at some point cache or have a mirror of packages we use. quicklisp_install_dir="$HOME/quicklisp" if [[ -v QUICKLISP_HOME ]]; then quicklisp_install_dir="${QUICKLISP_HOME}" fi if [[ ! -f "${quicklisp_install_dir}/setup.lisp" ]]; then wget -nv https://beta.quicklisp.org/quicklisp.lisp -O quicklisp.lisp || exit 1 echo \ " (load \"${DIR}/quicklisp.lisp\") (quicklisp-quickstart:install :path \"${quicklisp_install_dir}\") (ql:quickload :cl-ppcre :silent t) " | sbcl --script || exit 1 rm -rf quicklisp.lisp || exit 1 fi # setup libs (download) cd libs ./cleanup.sh ./setup.sh cd .. # setup qa dependencies setup_virtualenv tests/qa # setup stress dependencies setup_virtualenv tests/stress echo "Done installing dependencies for Memgraph"