cbuild/bootstrap.sh
2024-07-19 01:56:33 +03:00

86 lines
2.0 KiB
Bash

#!/usr/bin/env bash
CBUILD_BOOTSTRAP_VERSION=1.0.0
set -eo pipefail
function version_parse {
local value="$1"
var_name="$2"
IFS_backup="$IFS"
IFS='.'
local v_array=($value)
IFS="$IFS_backup"
eval ${var_name}_version_major=${v_array[0]}
eval ${var_name}_version_minor=${v_array[1]}
eval ${var_name}_version_patch=${v_array[2]}
}
function safeprint {
printf "%s" "$@"
}
function exec_script_line {
local script="$1"
local line_num="$2"
local line_str="$(sed $line_num'!d' $script)"
if [ -z "$line_str" ]; then
echo "script line is empty"
exit 1
fi
eval "$line_str"
}
# parse command line arguments
project_config_path="./project.config"
args=($@)
args_count=${#args[@]}
i=0
function get_next_arg {
i=$((i+1))
safeprint "${args[i]}"
}
while [ $i -lt $args_count ]
do
case "${args[i]}" in
'-v' | '--version')
echo "cbuild-bootstrap v$CBUILD_BOOTSTRAP_VERSION"
;;
'-c' | '--config')
project_config_path="$(get_next_arg)"
;;
'-n' | '--new-project')
echo "enter project cbuild version (example: 2.1.0)"
read -r CBUILD_VERSION
;;
*)
;;
esac
i=$((i+1))
done
# read version from project config if not specified
if [ -z "$CBUILD_VERSION" ]; then
exec_script_line "$project_config_path" 2
fi
version_parse "$CBUILD_VERSION"
cbuild_ommand="cbuild${_version_major}.${_version_minor} $@"
LOG_FILE="$(realpath cbuild.log)"
set +eo pipefail
# enable logging stdout and stderr to file
$cbuild_ommand 2>&1 | tee "$LOG_FILE"
# log file can be deleted by clean task
if [ -f "$LOG_FILE" ]; then
# remove terminal escape codes
sed -e 's/[^[:blank:][:print:]]//g' \
-e 's/\[0;[0-9][0-9]m//g' \
-e 's/\[0;[0-9]m//g' \
-e 's/\[[0-9][0-9]m//g' \
-e 's/\[[0-9]m//g' \
-e 's/ H //g' \
-e 's/\[3gH //g' \
-i "$LOG_FILE"
fi