diff options
author | Michele Calgaro <[email protected]> | 2018-07-11 23:38:32 +0900 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2018-07-11 23:38:32 +0900 |
commit | eeaccbeddbaa2974406eb20cbb7beca3fb4a59f0 (patch) | |
tree | 510e0eea682ebf69263b187287873956394b5e7b /debian/_buildscripts/local/internals/_build_common.sh | |
parent | 02dbbffa606c3c52833bbaf3dc5c5a050f295dbf (diff) | |
download | tde-packaging-eeaccbeddbaa2974406eb20cbb7beca3fb4a59f0.tar.gz tde-packaging-eeaccbeddbaa2974406eb20cbb7beca3fb4a59f0.zip |
DEB build scripts: several enhancements as follow:
- major rework of update_repositories.sh script, which now supports
multiple branches and provide better feedback to user.
- added support for pre-built extra dependency packages. A user can now
use Slavek Banko's binary packages instead of building the extra
dependency locally. This removes a quite tedious process during the
setup of the building environment.
- bug fixes and more user friendly folder names.
- improved README to cover the complete process until TDE installation.
Special thanks to Gregory Guy <[email protected]> for testing and
feedback done so far.
Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'debian/_buildscripts/local/internals/_build_common.sh')
-rwxr-xr-x | debian/_buildscripts/local/internals/_build_common.sh | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/debian/_buildscripts/local/internals/_build_common.sh b/debian/_buildscripts/local/internals/_build_common.sh new file mode 100755 index 000000000..5e4ba67fe --- /dev/null +++ b/debian/_buildscripts/local/internals/_build_common.sh @@ -0,0 +1,248 @@ +#!/bin/bash + +set -a + +#---------------------------- +# Color table +# Black 0;30 Dark Gray 1;30 +# Blue 0;34 Light Blue 1;34 +# Green 0;32 Light Green 1;32 +# Cyan 0;36 Light Cyan 1;36 +# Red 0;31 Light Red 1;31 +# Purple 0;35 Light Purple 1;35 +# Brown 0;33 Yellow 1;33 +# Light Gray 0;37 White 1;37 +# No Color 0 +#---------------------------- +CBlack='\e[0;30m' +CDarkGray='\e[1;30m' +CBlue='\e[0;34m' +CLightBlue='\e[1;34m' +CGreen='\e[0;32m' +CLightGreen='\e[1;32m' +CCyan='\e[0;36m' +CLightCyan='\e[1;36m' +CRed='\e[0;31m' +CLightRed='\e[1;31m' +CPurple='\e[0;35m' +CLightPurple='\e[1;35m' +CBrown='\e[0;33m' +CYellow='\e[1;33m' +CGray='\e[0;37m' +CWhite='\e[1;37m' +CNone='\e[0m' + +set +a + +#---------------------------- +# Echo a colored string to tty and tee-append it to a file without color codes +# Parameters: +# $1 - string to echo +# $2 - log filename +# $3 - if "y" create a new file. +function echo_and_tee() +{ + if [ "$3" = "y" ]; then + echo -e "$1" | tee /dev/tty | sed -r "s|\x1b\[[0-9]+(;[0-9]+)?m||g" >"$2" + else + echo -e "$1" | tee /dev/tty | sed -r "s|\x1b\[[0-9]+(;[0-9]+)?m||g" >>"$2" + fi +} + +#---------------------------- +function _set_path_varables() +{ + # Set useful path variables + set -a + REPO_DIR="$TDE_DIR/$CFG_GIT_DIR" + REPO_TDE="$TDE_DIR/$CFG_GIT_DIR/tde" + REPO_TDE_MAIN="$REPO_TDE/main" + REPO_TDE_PACKAGING="$TDE_DIR/$CFG_GIT_DIR/tde-packaging/$DISTRO/$DISTRO_NAME" + REPO_EXTRA_DEPENDENCIES="$TDE_DIR/$CFG_GIT_DIR/$CFG_EXTRA_DEPS_DIR" + + BUILD_DIR="$TDE_DIR/$CFG_BUILD_DIR" + TDE_BUILD_DIR="$TDE_DIR/$CFG_BUILD_DIR/build" + TDE_DEBS_DIR="$TDE_DIR/$CFG_BUILD_DIR/debs" + + HOOK_DIR="$TDE_DIR/$CFG_GIT_DIR/$CFG_HOOKS_DIR" + + SCRIPT_LOG_DIR="$TDE_DIR/$CFG_SCRIPT_LOG_DIR" + LOG_BUILD_RESULT_FILENAME="$SCRIPT_LOG_DIR/build_result.log" # Common build logfile + LOG_UPDATE_REPO_FILENAME="$SCRIPT_LOG_DIR/update_repo.log" # Update repository logfile + set +a +} + +#---------------------------- +function init_common() +{ + # Check script folder + export SCRIPT_DIR=$(dirname $(readlink -f "$0")) + + # Prevent the script to be run from TDE packaging repo + REPO_URL=$(git config --get remote.origin.url 2>/dev/null) + if [ ! -z "$REPO_URL" ] && [ -z "${REPO_URL##*tde-packaging}" ]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo "This script cannot be run from the TDE packaging repository." + echo "Please follow the instructions provided, then rerun this script." + exit 1 + fi + + # Read config settings + CFG_FILE=$SCRIPT_DIR/_config.sh + if [ -f "$CFG_FILE" ]; then + . "$CFG_FILE" + _set_path_varables + else + echo -e "${CLightRed} --- NOTE ---${CNone}" + echo -e "Creating TDE build configuration file from template as ${CLightPurple}$CFG_FILE${CNone}." + echo "Please check and modify as required, then rerun this script." + cp "$SCRIPT_DIR/internals/_config_template.sh" "$CFG_FILE" + exit 2 + fi + + # Make sure we have selected a supported distribution + DISTS_FILE="$SCRIPT_DIR/internals/distro_list.txt" + if [ ! -f "$DISTS_FILE" ]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo "Could not find the list of supported distributions." + echo -e "Please check the file ${CLightPurple}$DISTS_FILE${CNone} exists, then rerun this script." + exit 3 + fi + # -- Need to use a "here string" otherwise if the DISTRO_FOUND value is modified + # -- inside the while loop, this would not remember after the loop. + DISTRO_FOUND="n" + while read l_distro l_version l_name l_rel_suffix; do + if [ "$l_distro" = "$DISTRO" -a "$l_name" = "$DISTRO_NAME" ]; then + DISTRO_FOUND="y" + export DISTRO_VERSION="$l_version" + export REL_SUFFIX="$l_rel_suffix" + break + fi + done <<< $(cat $DISTS_FILE | grep -E "^(\s*[^#\s]+\s+[^\s]+.*)$") + if [ "$DISTRO_FOUND" != "y" ]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo -e "The specified distribution (${CYellow}$DISTRO $DISTRO_NAME${CNone}) is not supported." + echo -e "Something is wrong with your configuration (${CLightPurple}$CFG_FILE${CNone})" + echo -e "or with the list of supported distributions (${CLightPurple}$DISTS_FILE${CNone})." + echo -e "Please check the ${CLightCyan}DISTRO${CNone} and ${CLightCyan}DISTRO_NAME${CNone} variables, then rerun this script." + exit 4 + fi + + # TDE root folder must exist + if [ ! -d "$TDE_DIR" ]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo "A valid TDE root folder could not be located. Something is wrong with your configuration" + echo -e "in the config file ${CLightPurple}$CFG_FILE${CNone}" + echo -e "Please check and modify the ${CLightCyan}TDE_DIR${CNone} variable as required, then rerun this script." + exit 5 + fi + + # Search for main TDE repo + CURR_DIR="" + [ -d "$REPO_TDE_MAIN" ] && cd "$REPO_TDE_MAIN" &>/dev/null && \ + CURR_DIR=$(git rev-parse --show-toplevel 2>/dev/null) + if [ -z "$CURR_DIR" ]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo "The main TDE repo could not be located. Something is wrong with your configuration" + echo -e "in the config file ${CLightPurple}$CFG_FILE${CNone}" + echo -e "Please check and modify the ${CLightCyan}TDE_DIR${CNone} variable as required, then rerun this script." + exit 6 + fi + + # Search for TDE packaging repo + CURR_DIR="" + [ -d "$REPO_TDE_PACKAGING" ] && cd "$REPO_TDE_PACKAGING" &>/dev/null && \ + CURR_DIR=$(git rev-parse --show-toplevel 2>/dev/null) + if [ -z "$CURR_DIR" ]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo "The TDE packaging repo could not be located. Something is wrong with your configuration" + echo -e "in the config file ${CLightPurple}$CFG_FILE${CNone}" + echo -e "Please check and modify the ${CLightCyan}TDE_DIR${CNone} variable as required, then rerun this script." + exit 7 + fi + + # Check branch configuration + # - branch existance + cd "$REPO_TDE" + BRANCHES=() + REMOTE_BRANCHES=(`git branch --remote | grep -v "HEAD" | sed "s|origin/||g"`) + for br in $UPDATE_BRANCHES; do + branch=`echo "$br" | sed -e "s|^[[:space:]]*||" -e "s|[[:space:]]*$||"` + found=0 + for rem_br in "${REMOTE_BRANCHES[@]}"; do + if [[ "$rem_br" == "$branch" ]]; then + found=1 + break + fi + done + if [[ found -eq 1 ]]; then + BRANCHES+=($branch) + else + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo -e "Invalid branch specified (${CYellow}$branch${CNone}). Something is wrong with your configuration" + echo -e "in the config file ${CLightPurple}$CFG_FILE${CNone}" + echo -e "Please check and modify the ${CLightCyan}UPDATE_BRANCHES${CNone} variable as required, then rerun this script." + exit 8 + fi + done + if [ ${#BRANCHES[@]} -eq 0 ]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo -e "No valid branch was specified. Something is wrong with your configuration" + echo -e "in the config file ${CLightPurple}$CFG_FILE${CNone}" + echo -e "Please check and modify the ${CLightCyan}UPDATE_BRANCHES${CNone} variable as required, then rerun this script." + exit 9 + fi + export BRANCHES + # - default branch + DEFAULT_REPO_BRANCH=${OVERRIDE_DEFAULT_REPO_BRANCH:-"$DEFAULT_REPO_BRANCH"} + found=0 + for branch in "${BRANCHES[@]}"; do + if [[ "$DEFAULT_REPO_BRANCH" == "$branch" ]]; then + found=1 + break + fi + done + if [[ found -ne 1 ]]; then + echo -e "${CLightRed} --- ERROR ---${CNone}" + echo -e "Invalid default repo branch specified (${CYellow}$DEFAULT_REPO_BRANCH${CNone}). Something is wrong with your configuration" + echo -e "in the config file ${CLightPurple}$CFG_FILE${CNone}" + echo -e "Please check and modify the ${CLightCyan}DEFAULT_REPO_BRANCH${CNone} variable as required, then rerun this script." + exit 10 + fi + + cd "$SCRIPT_DIR" +} + + +#---------------------------- +# Save execution start time +# Parameters: +# $1 - timer number +function exec_time_start() +{ + _ET_start_var="_ET_start_$1" + eval "$_ET_start_var=`date +%s.%N`" +} + + +#---------------------------- +# Save execution stop time and set $2 to the execution time +# in the format: dd/hh:mm:ss.mmm +# Parameters: +# $1 - timer number +# $2 - result variable name +function exec_time_stop() +{ + _ET_start_var="_ET_start_$1" + _ET_stop_var="_ET_stop_$1" + eval "$_ET_stop_var=`date +%s.%N`" + _ET_diff=`echo "${!_ET_stop_var} - ${!_ET_start_var}" | bc` + _ET_days=`echo "$_ET_diff/86400" | bc` + _ET_diff_day=`echo "$_ET_diff-86400*$_ET_days" | bc` + _ET_hours=`echo "$_ET_diff_day/3600" | bc` + _ET_diff_hour=`echo "$_ET_diff_day-3600*$_ET_hours" | bc` + _ET_mins=`echo "$_ET_diff_hour/60" | bc` + _ET_secs=`echo "$_ET_diff_hour-60*$_ET_mins" | bc` + local _resultvar=$2 + eval "$_resultvar=`printf \"%02d/%02d:%02d:%06.3f\" $_ET_days $_ET_hours $_ET_mins $_ET_secs`" +} |