summaryrefslogtreecommitdiffstats
path: root/debian/_buildscripts/local/internals/_build_common.sh
diff options
context:
space:
mode:
authorMichele Calgaro <[email protected]>2018-07-11 23:38:32 +0900
committerMichele Calgaro <[email protected]>2018-07-11 23:38:32 +0900
commiteeaccbeddbaa2974406eb20cbb7beca3fb4a59f0 (patch)
tree510e0eea682ebf69263b187287873956394b5e7b /debian/_buildscripts/local/internals/_build_common.sh
parent02dbbffa606c3c52833bbaf3dc5c5a050f295dbf (diff)
downloadtde-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-xdebian/_buildscripts/local/internals/_build_common.sh248
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`"
+}