Files
MuditaOS/config/bootstrap.sh
2020-04-07 13:07:20 +02:00

197 lines
5.3 KiB
Bash
Executable File

#!/bin/bash -e
#####################################################################
#
# !!! WARNING !!!
#
# this script was written for `raw` ubuntu 18.10 64b
# optionaly consider installing ccache:
# `sudo apt install ccache`
# it's support is added to default ccache
# packages settings
SCRIPT=$(readlink -f $0)
SCRIPT_DIR="$(dirname ${SCRIPT})"
. ${SCRIPT_DIR}/bootstrap_config
function printVar(){
echo "$1: '${!1}'"
}
function add_to_path() {
echo -e "\e[32m${FUNCNAME[0]} $1 $2\e[0m"
TOOL_NAME=$1
TOOL_DIR=$2
BASH_RC="${HOME}/.bashrc"
TOOL_PATH_VAR="${TOOL_NAME}_PATH"
set +e
check_if_exists="`cat ${BASH_RC} | grep \"${TOOL_PATH_VAR}\"`"
set -e
if [[ -n ${check_if_exists} ]]; then
SED_SCRIPT="s%${TOOL_PATH_VAR}=\".*\"%${TOOL_PATH_VAR}=\"${TOOL_DIR}\"%"
sed -e "$SED_SCRIPT" -i ${BASH_RC}
else
echo "export ${TOOL_PATH_VAR}=\"${TOOL_DIR}\"" >> ${BASH_RC}
echo "PATH=\"\${${TOOL_PATH_VAR}:+\${${TOOL_PATH_VAR}}:}\${PATH}\"" >> ${BASH_RC}
fi
}
function install_hooks(){
echo -e "\e[32m${FUNCNAME[0]}\e[0m"
echo -e "Install style checking hooks"
options=('Automatic style update.'
'Just notify me about style errors but do not apply it.'
'Let me do it manually.'
)
CUR_PS3="$PS3"
PS3="Please select a script:"
select OPT in "${options[@]}"; do
case ${REPLY} in
1 )
HOOK="pre-commit.hook"
break
;;
2 )
HOOK="pre-commit-check-only.hook"
break
;;
3 )
PS3=$CUR_PS3
return
;;
* )
echo "invalid option \"${REPLY}\""
;;
esac
done
L_GIT_DIR=$(git rev-parse --show-toplevel)
ln -sf ${L_GIT_DIR}/config/${HOOK} ${L_GIT_DIR}/.git/hooks/pre-commit
PS3=$CUR_PS3
}
function add_ignore_revs_for_blame() {
echo -e "\e[32m${FUNCNAME[0]}\e[0m"
git config blame.ignoreRevsFile .gitblameignorerevs
}
function setup_gcc_alternatives() {
echo -e "\e[32m${FUNCNAME[0]}\e[0m"
cat <<-MSGEND
# set gcc-9 as default alternative (instead of default current in ubuntu)
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 900 --slave /usr/bin/g++ g++ /usr/bin/g++-9
MSGEND
}
function install_ubuntu_packages() {
echo -e "\e[32m${FUNCNAME[0]}\e[0m"
cat <<-MSGEND
# Install neccessary packages more or less this should be complete list:
binutils wget git make pkg-config gtkmm-3.0 gcc-9 g++-9 portaudio19-dev
# for ubutnut 18.04 you can
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-9 g++-9
#
# don't forget to update alternatives:
MSGEND
setup_gcc_alternatives
}
function setup_arm_toolchain() {
echo -e "\e[32m${FUNCNAME[0]}\e[0m"
pushd /tmp
echo "Download armgcc"
[[ ! -f $ARM_GCC ]] &&
wget --no-verbose --show-progress -O ${ARM_GCC_PACKAGE_FILE} ${ARM_GCC_SOURCE_LINK}
# untar to HOME
if [[ ! -d ${HOME}/${ARM_GCC} ]]; then
echo "extracting: ${ARM_GCC_PACKAGE_FILE} to ${HOME}"
tar -xjf ${ARM_GCC_PACKAGE_FILE} -C ${HOME}/
fi
echo "ARM GCC installed to ${HOME}/${ARM_GCC}"
popd
}
function setup_cmake() {
echo -e "\e[32m${FUNCNAME[0]}\e[0m"
pushd /tmp
[[ ! -f ${CMAKE_DIR}.tgz ]] &&
wget --no-verbose -O ${CMAKE_PKG} ${CMAKE_SOURCE_LINK}
[[ ! -d ${HOME}/${CMAKE_DIR} ]] &&
tar -xf ${CMAKE_PKG} -C ${HOME}/
popd
echo "CMAKEV installed to ${HOME}/${CMAKE_DIR} and set in PATH"
}
function install_docker() {
if [[ -n $(command -v docker) ]]; then
TESTED_VERSION="19.03.8"
DOCKER_VERSION=$(docker version -f '{{.Server.Version}}')
if [[ ${TESTED_VERSION} != ${DOCKER_VERSION} ]]; then
echo -e "Tested with docker ${DOCKER_VERSION} your is ${DOCKER_VERSION} consider updating"
else
echo "Docker already installed"
fi
else
curl -fsSL https://get.docker.com -o /tmp/get-docker.sh
sudo sh /tmp/get-docker.sh
fi
}
BUILD_STEPS=(
install_hooks
add_ignore_revs_for_blame
install_ubuntu_packages
setup_arm_toolchain
setup_cmake
setup_gcc_alternatives
"add_to_path ${ARM_GCC_PATH_VAR} ${HOME}/${ARM_GCC}/bin"
"add_to_path ${CMAKE_PATH_VAR} ${HOME}/${CMAKE_DIR}/bin"
install_docker
)
if [ $# -eq 1 ]; then
PARAM=$1
if [ "${PARAM:$(( ${#PARAM} - 1 )):1}" == "-" ]; then
START=${PARAM%*-}
END=${#BUILD_STEPS[@]}
else
START=${PARAM}
END=$(( ${PARAM} + 1 ))
fi
else
echo "Available build steps:"
I=0
while [ $I -lt ${#BUILD_STEPS[@]} ]
do
echo -e "\t$I ${BUILD_STEPS[${I}]}"
I=$(( $I + 1 ))
done
cat <<- MSGEND
call:
${0} <build step no>[-]
ex.:
${0} 1 - build step 1 (${BUILD_STEPS[1]})
${0} 3 - build step 3 (${BUILD_STEPS[3]})
${0} 3- - build from step 3 to the end
${0} 0- - build everything
MSGEND
exit 0
fi
echo "START:${BUILD_STEPS[$START]}(${START})"
echo "END:${BUILD_STEPS[$END]}(${END})"
I=${START}
while [ ${I} -lt ${END} ]
do
eval ${BUILD_STEPS[${I}]}
echo "${I}" > LAST_STEP
I=$(( ${I} + 1 ))
done