11#! /usr/bin/env bash
22
33# Bash strict mode
4- set -e
5- trap ' s=$?; echo >&2 "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR
4+ set -eo pipefail
5+
6+ # Generate stacktrace on error
7+ function runtime::stacktrace {
8+ local exit_code=$?
9+ echo >&2 " $0 : Error on line '${LINENO} ': ${BASH_COMMAND} "
10+ exit ${exit_code}
11+ }
12+ trap runtime::stacktrace ERR
613
714# Variables environments
815readonly SKALIBS_URL=" https://github.com/skarnet/skalibs.git"
@@ -18,39 +25,20 @@ BUILD_DEPENDENCIES="ca-certificates build-essential git"
1825# Fine tuning
1926export DEBIAN_FRONTEND=noninteractive
2027
21- # ######################################
22- # Log an action.
23- # Globals:
24- # DISABLE_CONSOLE_COLORS
25- # Arguments:
26- # ${@}: Any texts.
27- # Outputs:
28- # Log a message as action.
29- # ######################################
30- function log::action() {
31- local disable_console_colors; disable_console_colors=$( env::get_or_empty " DISABLE_CONSOLE_COLORS" )
32- if [ -z " ${disable_console_colors} " ]; then
33- echo -e " \033[33m⇒\033[0m ${@ } "
34- else
35- echo -e " ${@ } "
36- fi
37- }
38-
3928# ######################################
4029# Log a failure.
4130# Globals:
4231# DISABLE_CONSOLE_COLORS
4332# Arguments:
44- # ${@ }: Any texts.
33+ # ${* }: Any texts.
4534# Outputs:
4635# Log a message as failure.
4736# ######################################
48- function log::failure() {
49- local disable_console_colors; disable_console_colors=$( env::get_or_empty " DISABLE_CONSOLE_COLORS" )
50- if [ -z " ${disable_console_colors} " ]; then
51- echo -e " \033[31m✗\033[0m Failed to ${@ } " >&2
37+ function log::failure {
38+ if [ -z " ${DISABLE_CONSOLE_COLORS:- } " ]; then
39+ echo -e " \033[31m✗\033[0m Failed to ${* } " >&2
5240 else
53- echo -e " Failed to ${@ } " >&2
41+ echo -e " Failed to ${* } " >&2
5442 fi
5543}
5644
@@ -59,82 +47,18 @@ function log::failure() {
5947# Globals:
6048# DISABLE_CONSOLE_COLORS
6149# Arguments:
62- # ${@ }: Any texts.
50+ # ${* }: Any texts.
6351# Outputs:
6452# Log a message as success.
6553# ######################################
66- function log::success() {
67- local disable_console_colors; disable_console_colors=$( env::get_or_empty " DISABLE_CONSOLE_COLORS" )
68- if [ -z " ${disable_console_colors} " ]; then
69- echo -e " \033[32m✓\033[0m Succeeded to ${@ } "
54+ function log::success {
55+ if [ -z " ${DISABLE_CONSOLE_COLORS:- } " ]; then
56+ echo -e " \033[32m✓\033[0m Succeeded to ${* } "
7057 else
71- echo -e " Succeeded to ${@ } "
58+ echo -e " Succeeded to ${* } "
7259 fi
7360}
7461
75- # ######################################
76- # Retrive an environment variable.
77- # Arguments:
78- # ${1}: Environment variable to get.
79- # Outputs:
80- # Environment variable value.
81- # Returns:
82- # 0 if the environment variable is present.
83- # 1 otherwise.
84- # ######################################
85- function env::get() {
86- local var; var=$( printf ' %s\n' " ${! 1} " )
87- if [ -z " ${var} " ]; then
88- helper::raise_error " retrieve environment '${1} ' variable"
89- fi
90- echo -e " ${var} "
91- }
92-
93- # ######################################
94- # Retrive an environment variable or return default value.
95- # Arguments:
96- # ${1}: Environment variable to get.
97- # ${2}: Default value.
98- # Outputs:
99- # Environment variable value or default value.
100- # ######################################
101- function env::get_or_default() {
102- local var; var=$( printf ' %s\n' " ${! 1} " )
103- if [ -z " ${var} " ]; then
104- echo -e " ${2} "
105- else
106- echo -e " ${var} "
107- fi
108- }
109-
110- # ######################################
111- # Retrive an environment variable or return empty value.
112- # Arguments:
113- # ${1}: Environment variable to get.
114- # Outputs:
115- # Environment variable value or empty value.
116- # ######################################
117- function env::get_or_empty() {
118- env::get_or_default " ${1} " " "
119- }
120-
121- # ######################################
122- # Retrive an environment variable or return readed value.
123- # Arguments:
124- # ${1}: Environment variable to get.
125- # Outputs:
126- # Environment variable value or readed value.
127- # Returns:
128- # 0 if the environment variable is present or readed.
129- # 1 otherwise.
130- # ######################################
131- function env::get_or_read() {
132- local var; var=$( printf ' %s\n' " ${! 1} " )
133- if [ -z " ${var} " ]; then
134- read -p " Value for ${1} : ` echo $' \n > ' ` " var
135- fi
136- echo -e " ${var} "
137- }
13862
13963# ######################################
14064# Execute a command with arguments.
@@ -146,23 +70,21 @@ function env::get_or_read() {
14670# Returns:
14771# Exit status of the command executed.
14872# ######################################
149- function helper::exec() {
150- local silent_stdout; silent_stdout=$( env::get_or_empty " SILENT_STDOUT" )
151- local silent_stderr; silent_stderr=$( env::get_or_empty " SILENT_STDERR" )
152- local err_exit_ctx=$( shopt -o errexit)
73+ function runtime::exec {
74+ local err_exit_ctx; err_exit_ctx=$( shopt -o errexit || true)
15375
15476 set +e
155- if [ -z " ${silent_stdout } " ] && [ -z " ${silent_stderr } " ]; then
77+ if [ -z " ${SILENT_STDOUT :- } " ] && [ -z " ${SILENT_STDERR :- } " ]; then
15678 " ${@ } "
157- elif [ ! -z " ${silent_stdout } " ] && [ ! -z " ${silent_stderr } " ]; then
79+ elif [ -n " ${SILENT_STDOUT :- } " ] && [ -n " ${SILENT_STDERR :- } " ]; then
15880 " ${@ } " & > /dev/null
159- elif [ -z " ${silent_stdout } " ] && [ ! -z " ${silent_stderr } " ]; then
81+ elif [ -z " ${SILENT_STDOUT :- } " ] && [ -n " ${SILENT_STDERR :- } " ]; then
16082 " ${@ } " 2> /dev/null
16183 else
16284 " ${@ } " > /dev/null
16385 fi
16486 local status=$?
165- if [ $( echo " ${err_exit_ctx} " | grep " on" ) ] ; then
87+ if echo " ${err_exit_ctx} " | grep -q " on" ; then
16688 set -e
16789 fi
16890 return ${status}
@@ -179,15 +101,15 @@ function helper::exec() {
179101# Returns:
180102# Exit status of the command executed.
181103# ######################################
182- function helper::try() {
183- helper::exec ${@: 2}
104+ function runtime::try {
105+ # shellcheck disable=SC2068
106+ runtime::exec ${@: 2}
184107 local status=$?
185108 if [ ${status} -eq 0 ]; then
186109 log::success " ${1} "
187110 else
188111 log::failure " ${1} "
189- local catch_error; catch_error=$( env::get_or_empty " CATCH_ERROR" )
190- if [ ${status} -ne 0 ] && [ ! -z " ${catch_error} " ]; then
112+ if [ -n " ${CATCH_ERROR:- } " ]; then
191113 return 0
192114 else
193115 exit ${status}
@@ -196,19 +118,49 @@ function helper::try() {
196118 return ${status}
197119}
198120
121+ # ######################################
122+ # Retrieve an environment variable or return default value.
123+ # Arguments:
124+ # ${1}: Environment variable to get.
125+ # ${2}: Default value.
126+ # Outputs:
127+ # Environment variable value or default value.
128+ # ######################################
129+ function env::get_or_default {
130+ local var; var=$( printf ' %s\n' " ${! 1} " )
131+ if [ -z " ${var} " ]; then
132+ echo -e " ${2} "
133+ else
134+ echo -e " ${var} "
135+ fi
136+ }
137+
138+ # ######################################
139+ # Retrieve an environment variable or return empty value.
140+ # Arguments:
141+ # ${1}: Environment variable to get.
142+ # Outputs:
143+ # Environment variable value or empty value.
144+ # ######################################
145+ function env::get_or_empty {
146+ env::get_or_default " ${1} " " "
147+ }
148+
199149# ######################################
200150# Compile and install dependencies.
201151# Arguments:
202152# ${@}: Any arguments.
203153# Returns:
204154# Exit status of the command executed.
205155# ######################################
206- function pkg::install() {
207- helper::try " clone ${1} v${2} " git clone -q -b " v${2} " --depth 1 " ${3} " " /tmp/${1} "
208- cd " /tmp/${1} "
209- helper::try " configure ${1} v${2} " ./configure ${4}
210- helper::try " compile ${1} v${2} " make
211- helper::try " install ${1} v${2} " make install
156+ function pkg::install {
157+ (
158+ runtime::try " clone ${1} v${2} " git clone -q -b " v${2} " --depth 1 " ${3} " " /tmp/${1} "
159+ cd " /tmp/${1} "
160+ runtime::try " configure ${1} v${2} " ./configure ${4}
161+ runtime::try " compile ${1} v${2} " make
162+ runtime::try " install ${1} v${2} " make install
163+ )
212164}
213165
214166# Diff to do iso uninstall after build
0 commit comments