diff --git a/install_wolf.sh b/install_wolf.sh index a1094614faaa9d1f7ba5c6d15835dd008ce0710c..9b1ab8dbfdf340f46c5790c61ac64dff4de21366 100755 --- a/install_wolf.sh +++ b/install_wolf.sh @@ -1,6 +1,26 @@ #!/bin/bash set -e +# COLORS +BLACK='\033[0;30m' +DARK_GRAY='\033[1;30m' +RED='\033[0;31m' +LIGHT_RED='\033[1;31m' +GREEN='\033[0;32m' +LIGHT_GREEN='\033[1;32m' +ORANGE='\033[0;33m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +LIGHT_BLUE='\033[1;34m' +PURPLE='\033[0;35m' +LIGHT_PURPLE='\033[1;35m' +CYAN='\033[0;36m' +LIGHT_CYAN='\033[1;36m' +LIGHT_GRAY='\033[0;37m' +WHITE='\033[1;37m' +BOLD='\033[1m' +RESET_STYLE='\033[0m' + ## FUNCTIONS ##################################################### func_make_install () { if [ "$UID" -eq 0 -o "$EUID" -eq 0 ]; then @@ -19,37 +39,39 @@ func_ldconfig () { } func_echo () { - if [ $VERBOSE == "true" ]; then - echo "$1" - fi + echo -e "\n${BOLD}[install_wolf]: ${BLUE}${1}${RESET_STYLE}" +} + +func_echo_error () { + echo -e "\n${BOLD}[install_wolf]: ${RED}${1}${RESET_STYLE}" } usage() { - echo "Usage: $0 [-v] [-a] [-d <string>] [-w <string>] [-p <string>] [-f <y/n>] [-c <y/n>]" - echo " v: disables echo" - echo " a: installs all plugins (incompatible with -p)" - echo " d: dependencies destination path (either /global/path or relative/path). If not set, will be asked later." - echo " w: wolf folder destination path (either /global/path or relative/path). If not set, will be asked later." - echo " p: plugins to be installed (incompatible with -a) being a string of 6 chars y/n corresponding to plugins imu, gnss, laser, vision, apriltag, bodydynamics (for example 'ynynnn'). Plugins apriltag and bodydynamics won't be installed if vision and imu plugins are installed, respectively." - echo " f: y/n install Falko optional dependency. If not set, will be asked later." - echo " c: y/n install CSM optional dependency. If not set, will be asked later." + echo -e "\n${BOLD}[install_wolf]: ${BLUE}Usage: $0 with the following optional inputs. If not set, everything will be asked during execution." + echo -e " ${BOLD}-d <string>${BLUE}: dependencies destination path (either /global/path or relative/path)." + echo -e " ${BOLD}-w <string>${BLUE}: wolf folder destination path (either /global/path or relative/path)." + echo -e " ${BOLD}-a ${BLUE}: installs all plugins (incompatible with -p)" + echo -e " ${BOLD}-p <string>${BLUE}: plugins to be installed (incompatible with -a) being a string of 6 chars y/n corresponding to plugins imu, gnss, laser, vision, apriltag, bodydynamics (for example 'ynynnn'). Plugins apriltag and bodydynamics won't be installed if vision and imu plugins are installed, respectively." + echo -e " ${BOLD}-f <y/n>${BLUE}: install Falko optional laser dependency (if laser plugin is installed)." + echo -e " ${BOLD}-c <y/n>${BLUE}: install CSM optional laser dependency (if laser plugin is installed).${RESET_STYLE}" } func_check_yn () { if [ "$1" != "y" ] && [ "$1" != "n" ]; then - echo "options -p, -f, -c should containing only 'y' or 'n'" + func_echo_error "options -p, -f, -c should containing only 'y' or 'n'" usage exit 0 fi } + + # START ##################################################### CORES=$(nproc) func_echo "The number of available cores on this machine is $CORES" RUN_PATH=$PWD ## OPTIONS ##################################################### -VERBOSE="true" INSTALL_PLUGINS="" INSTALL_IMU="undefined" INSTALL_GNSS="undefined" @@ -62,17 +84,14 @@ INSTALL_CSM="undefined" DEPS_PATH="undefined" WOLF_PATH="undefined" -while getopts "vap:d:w:hf:c:" opt; do +while getopts "ap:d:w:hf:c:" opt; do case ${opt} in - v) # disable verbose - VERBOSE="false" - ;; a) # install all plugins - if [ "$INSTALL_PLUGINS" != "" ]; then - echo "options -p and -a are incompatible!" - usage - exit 0 - fi + if [ "$INSTALL_PLUGINS" != "" ]; then + func_echo_error "options -p and -a are incompatible." + usage + exit 0 + fi INSTALL_PLUGINS="a" INSTALL_IMU="y" INSTALL_GNSS="y" @@ -82,15 +101,15 @@ while getopts "vap:d:w:hf:c:" opt; do INSTALL_BODYDYNAMICS="y" ;; p) # install all plugins - if [ "$INSTALL_PLUGINS" != "" ]; then - echo "options -p and -a are incompatible!" - usage - exit 0 - fi + if [ "$INSTALL_PLUGINS" != "" ]; then + func_echo_error "options -p and -a are incompatible." + usage + exit 0 + fi if [ ${#OPTARG} != 6 ]; then - echo "option -p should contain 6 characters" - usage - exit 0 + func_echo_error "option -p should contain 6 characters." + usage + exit 0 fi INSTALL_PLUGINS=$OPTARG INSTALL_IMU=${INSTALL_PLUGINS:0:1} @@ -119,7 +138,7 @@ while getopts "vap:d:w:hf:c:" opt; do if cd $DEPS_PATH ; then func_echo "Valid dependency path." else - echo "Invalid dependency path." + func_echo_error "Invalid dependency path." exit 1 fi ;; @@ -128,16 +147,16 @@ while getopts "vap:d:w:hf:c:" opt; do if cd $WOLF_PATH ; then func_echo "Valid wolf folder path." else - echo "Invalid wolf folder path." + func_echo_error "Invalid wolf folder path." exit 1 fi ;; - h ) + h ) # help usage exit 0 ;; :) - echo "Error: -${OPTARG} requires an argument." + func_echo_error "Error: -${OPTARG} requires an argument." usage exit 1 ;; @@ -163,7 +182,7 @@ if [ $UBUNTU_DISTRO == "18.04" ]; then elif [ $UBUNTU_DISTRO == "20.04" ]; then func_echo "Ubuntu 20.04 - OK" else - echo "Non-supported Ubuntu version: $UBUNTU_DISTRO" + func_echo_error "Non-supported Ubuntu version: ${UBUNTU_DISTRO}" exit 1 fi @@ -172,11 +191,12 @@ fi cd $RUN_PATH func_echo "You are in folder $PWD" if [ $DEPS_PATH == "undefined" ]; then - echo "Enter path for dependencies (either /global/path or relative/path):" + func_echo "Enter path for dependencies (either /global/path or relative/path):" read DEPS_PATH fi while ! cd $DEPS_PATH ; do - echo "Invalid dependency path. Enter path for dependencies (either /global/path or relative/path):" + func_echo_error "Invalid dependency path." + func_echo "Enter path for dependencies (either /global/path or relative/path):" read DEPS_PATH done DEPS_PATH=$PWD @@ -218,13 +238,14 @@ func_make_install cd $RUN_PATH func_echo "You are in folder $PWD" if [ $WOLF_PATH == "undefined" ]; then - echo "Enter path for wolf folder (either /global/path or relative/path):" + func_echo "Enter path for wolf folder (either /global/path or relative/path):" read WOLF_PATH + while ! cd $WOLF_PATH ; do + func_echo_error "Invalid dependency path." + func_echo "Enter path for dependencies (either /global/path or relative/path):" + read WOLF_PATH + done fi -while ! cd $WOLF_PATH ; do - echo "Invalid dependency path. Enter path for dependencies (either /global/path or relative/path):" - read WOLF_PATH -done mkdir wolf cd wolf WOLF_PATH=$PWD @@ -251,8 +272,13 @@ ctest -j$CORES # IMU -------------------------------------------------- if [ $INSTALL_IMU == "undefined" ]; then - echo "Do you want to download and install plugin imu? (y/n)" + func_echo "Do you want to download and install plugin imu? (y/n)" read INSTALL_IMU + while [ $INSTALL_IMU != "y" ] && [ $INSTALL_IMU != "n" ]; do + func_echo_error "wrong input ${INSTALL_IMU}" + func_echo "Do you want to download and install plugin imu? (y/n)" + read INSTALL_IMU + done fi if [ $INSTALL_IMU == "y" ]; then @@ -277,8 +303,13 @@ fi # GNSS -------------------------------------------------- if [ $INSTALL_GNSS == "undefined" ]; then - echo "Do you want to download and install plugin gnss? (y/n)" + func_echo "Do you want to download and install plugin gnss? (y/n)" read INSTALL_GNSS + while [ $INSTALL_GNSS != "y" ] && [ $INSTALL_GNSS != "n" ]; do + func_echo_error "wrong input ${INSTALL_GNSS}" + func_echo "Do you want to download and install plugin gnss? (y/n)" + read INSTALL_GNSS + done fi if [ $INSTALL_GNSS == "y" ]; then @@ -315,8 +346,13 @@ fi # LASER -------------------------------------------------- if [ $INSTALL_LASER == "undefined" ]; then - echo "Do you want to download and install plugin laser? (y/n)" + func_echo "Do you want to download and install plugin laser? (y/n)" read INSTALL_LASER + while [ $INSTALL_LASER != "y" ] && [ $INSTALL_LASER != "n" ]; do + func_echo_error "wrong input ${INSTALL_LASER}" + func_echo "Do you want to download and install plugin laser? (y/n)" + read INSTALL_LASER + done fi if [ $INSTALL_LASER == "y" ]; then @@ -324,8 +360,13 @@ if [ $INSTALL_LASER == "y" ]; then # CSM if [ $INSTALL_CSM == "undefined" ]; then - echo "Do you want to install CSM to enable ICP processors? (y/n)" + func_echo "Do you want to install CSM to enable ICP processors? (y/n)" read INSTALL_CSM + while [ $INSTALL_CSM != "y" ] && [ $INSTALL_CSM != "n" ]; do + func_echo_error "wrong input ${INSTALL_CSM}" + func_echo "Do you want to install CSM to enable ICP processors? (y/n)" + read INSTALL_CSM + done fi if [ $INSTALL_CSM == "y" ]; then if [ "$UID" -eq 0 -o "$EUID" -eq 0 ]; then @@ -346,8 +387,13 @@ if [ $INSTALL_LASER == "y" ]; then # FALKO if [ $INSTALL_FALKO == "undefined" ]; then - echo "Do you want to install FALKO to enable Falko loop closure processors? (y/n)" + func_echo "Do you want to install FALKO to enable Falko loop closure processors? (y/n)" read INSTALL_FALKO + while [ $INSTALL_FALKO != "y" ] && [ $INSTALL_FALKO != "n" ]; do + func_echo_error "wrong input ${INSTALL_FALKO}" + func_echo "Do you want to install CSM to enable Falko loop closure processors? (y/n)" + read INSTALL_FALKO + done fi if [ $INSTALL_FALKO == "y" ]; then cd $DEPS_PATH @@ -397,8 +443,13 @@ fi # VISION -------------------------------------------------- if [ $INSTALL_VISION == "undefined" ]; then - echo "Do you want to download and install plugin vision (requires to install opencv 3.3.0)? (y/n)" + func_echo "Do you want to download and install plugin vision (requires to install opencv 3.3.0)? (y/n)" read INSTALL_VISION + while [ $INSTALL_VISION != "y" ] && [ $INSTALL_VISION != "n" ]; do + func_echo_error "wrong input ${INSTALL_VISION}" + func_echo "Do you want to download and install plugin vision (requires to install opencv 3.3.0)? (y/n)" + read INSTALL_VISION + done fi if [ $INSTALL_VISION == "y" ]; then @@ -414,7 +465,7 @@ if [ $INSTALL_VISION == "y" ]; then mkdir build cd build sed -i 's/char\* str = PyString_AsString(obj)/const char\* str = PyString_AsString(obj)/g' ../modules/python/src2/cv2.cpp - cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_CXX_FLAGS="-fPIC -std=c++14" -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules .. + cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_CXX_FLAGS="-fPIC -std=c++14" -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D WITH_FFMPEG=OFF .. make -j$CORES func_make_install @@ -449,8 +500,13 @@ fi # APRILTAG -------------------------------------------------- if [ $INSTALL_VISION == "y" ]; then if [ $INSTALL_APRILTAG == "undefined" ]; then - echo "Do you want to download and install plugin apriltag? (y/n)" + func_echo "Do you want to download and install plugin apriltag? (y/n)" read INSTALL_APRILTAG + while [ $INSTALL_APRILTAG != "y" ] && [ $INSTALL_APRILTAG != "n" ]; do + func_echo_error "wrong input ${INSTALL_APRILTAG}" + func_echo "Do you want to download and install plugin apriltag? (y/n)" + read INSTALL_APRILTAG + done fi if [ $INSTALL_APRILTAG == "y" ]; then @@ -489,8 +545,13 @@ fi # BODYDYNAMICS -------------------------------------------------- if [ $INSTALL_IMU == "y" ]; then if [ $INSTALL_BODYDYNAMICS == "undefined" ]; then - echo "Do you want to download and install plugin bodydynamics? (y/n)" + func_echo "Do you want to download and install plugin bodydynamics? (y/n)" read INSTALL_BODYDYNAMICS + while [ $INSTALL_BODYDYNAMICS != "y" ] && [ $INSTALL_BODYDYNAMICS != "n" ]; do + func_echo_error "wrong input ${INSTALL_BODYDYNAMICS}" + func_echo "Do you want to download and install plugin bodydynamics? (y/n)" + read INSTALL_BODYDYNAMICS + done fi if [ $INSTALL_BODYDYNAMICS == "y" ]; then