mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
make.sh: Refactor the terminal output
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
147
make.sh
147
make.sh
@@ -41,49 +41,46 @@ TOOLCHAINVER=20240521
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
HOST_ARCH="${HOSTTYPE}"
|
||||
LC_ALL=POSIX
|
||||
PS1='\u:\w$ '
|
||||
|
||||
# Remember if the shell is interactive or not
|
||||
if [ -t 0 ] && [ -t 1 ]; then
|
||||
INTERACTIVE=true
|
||||
else
|
||||
INTERACTIVE=false
|
||||
fi
|
||||
PWD=$(pwd)
|
||||
|
||||
# Are we reading from/writing to a terminal?
|
||||
is_terminal() {
|
||||
[ -t 0 ] && [ -t 1 ] && [ -t 2 ]
|
||||
}
|
||||
|
||||
# Define color for messages
|
||||
BOLD="\\033[1;39m"
|
||||
DONE="\\033[1;32m"
|
||||
SKIP="\\033[1;34m"
|
||||
WARN="\\033[1;35m"
|
||||
FAIL="\\033[1;31m"
|
||||
NORMAL="\\033[0;39m"
|
||||
|
||||
# New architecture variables
|
||||
HOST_ARCH="${HOSTTYPE}"
|
||||
|
||||
PWD=$(pwd)
|
||||
if is_terminal; then
|
||||
BOLD="$(tput bold)"
|
||||
RED="$(tput setaf 1)"
|
||||
GREEN="$(tput setaf 2)"
|
||||
YELLOW="$(tput setaf 3)"
|
||||
CYAN="$(tput setaf 6)"
|
||||
NORMAL="$(tput sgr0)"
|
||||
fi
|
||||
|
||||
# Sets or adjusts pretty formatting variables
|
||||
resize_terminal() {
|
||||
## Screen Dimentions
|
||||
# Find current screen size
|
||||
COLUMNS=$(tput cols)
|
||||
COLUMNS="$(tput cols)"
|
||||
|
||||
# When using remote connections, such as a serial port, stty size returns 0
|
||||
if ! ${INTERACTIVE} || [ "${COLUMNS}" = "0" ]; then
|
||||
if ! is_terminal || [ "${COLUMNS}" = "0" ]; then
|
||||
COLUMNS=80
|
||||
fi
|
||||
|
||||
# Measurements for positioning result messages
|
||||
OPTIONS_WIDTH=20
|
||||
TIME_WIDTH=12
|
||||
# The status column is always 8 characters wide
|
||||
STATUS_WIDTH=8
|
||||
NAME_WIDTH=$(( COLUMNS - OPTIONS_WIDTH - TIME_WIDTH - STATUS_WIDTH ))
|
||||
LINE_WIDTH=$(( COLUMNS - STATUS_WIDTH ))
|
||||
|
||||
TIME_COL=$(( NAME_WIDTH + OPTIONS_WIDTH ))
|
||||
STATUS_COL=$(( TIME_COL + TIME_WIDTH ))
|
||||
# The time column is always 12 characters wide
|
||||
TIME_WIDTH=12
|
||||
|
||||
# Where do the columns start?
|
||||
(( STATUS_COL = COLUMNS - STATUS_WIDTH ))
|
||||
(( TIME_COL = STATUS_COL - TIME_WIDTH ))
|
||||
}
|
||||
|
||||
# Initially setup terminal
|
||||
@@ -164,32 +161,12 @@ format_runtime() {
|
||||
}
|
||||
|
||||
print_line() {
|
||||
local line="$@"
|
||||
|
||||
printf "%-${LINE_WIDTH}s" "${line}"
|
||||
}
|
||||
|
||||
_print_line() {
|
||||
local status="${1}"
|
||||
shift
|
||||
|
||||
if ${INTERACTIVE}; then
|
||||
printf "${!status}"
|
||||
fi
|
||||
|
||||
print_line "$@"
|
||||
|
||||
if ${INTERACTIVE}; then
|
||||
printf "${NORMAL}"
|
||||
fi
|
||||
# Print the string all the way to the status column
|
||||
printf "%-${STATUS_COL}s" "$*"
|
||||
}
|
||||
|
||||
print_headline() {
|
||||
_print_line BOLD "$@"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
_print_line FAIL "$@"
|
||||
printf "${BOLD}%s${NORMAL}\n" "$*"
|
||||
}
|
||||
|
||||
print_package() {
|
||||
@@ -204,37 +181,54 @@ print_package() {
|
||||
string="${string} (${version})"
|
||||
fi
|
||||
|
||||
printf "%-$(( ${NAME_WIDTH} - 1 ))s " "${string}"
|
||||
printf "%$(( ${OPTIONS_WIDTH} - 1 ))s " "${options}"
|
||||
# Add the options
|
||||
if [ -n "${options}" ]; then
|
||||
string="${string} (${options[@]})"
|
||||
fi
|
||||
|
||||
# Print the string
|
||||
print_line "${string}"
|
||||
}
|
||||
|
||||
print_runtime() {
|
||||
local runtime=$(format_runtime $@)
|
||||
|
||||
if ${INTERACTIVE}; then
|
||||
printf "\\033[${TIME_COL}G[ ${BOLD}%$(( ${TIME_WIDTH} - 4 ))s${NORMAL} ]" "${runtime}"
|
||||
else
|
||||
printf "[ %$(( ${TIME_WIDTH} - 4 ))s ]" "${runtime}"
|
||||
# Move back the cursor to rewrite the runtime
|
||||
if is_terminal; then
|
||||
tput hpa "${TIME_COL}"
|
||||
fi
|
||||
|
||||
printf "[ ${BOLD}%$(( TIME_WIDTH - 4 ))s${NORMAL} ]" "${runtime}"
|
||||
}
|
||||
|
||||
print_status() {
|
||||
local status="${1}"
|
||||
local color
|
||||
|
||||
local color="${!status}"
|
||||
case "${status}" in
|
||||
DONE)
|
||||
color="${BOLD}${GREEN}"
|
||||
;;
|
||||
FAIL)
|
||||
color="${BOLD}${RED}"
|
||||
;;
|
||||
SKIP)
|
||||
color="${BOLD}${CYAN}"
|
||||
;;
|
||||
WARN)
|
||||
color="${BOLD}${YELLOW}"
|
||||
;;
|
||||
*)
|
||||
color="${BOLD}"
|
||||
;;
|
||||
esac
|
||||
|
||||
if ${INTERACTIVE}; then
|
||||
printf "\\033[${STATUS_COL}G[${color-${BOLD}} %-$(( ${STATUS_WIDTH} - 4 ))s ${NORMAL}]\n" "${status}"
|
||||
else
|
||||
printf "[ %-$(( ${STATUS_WIDTH} - 4 ))s ]\n" "${status}"
|
||||
# Move to the start of the column
|
||||
if is_terminal; then
|
||||
tput hpa "${STATUS_COL}"
|
||||
fi
|
||||
}
|
||||
|
||||
print_build_stage() {
|
||||
print_headline "$@"
|
||||
|
||||
# end line
|
||||
printf "\n"
|
||||
printf "[ ${color}%$(( STATUS_WIDTH - 4 ))s${NORMAL} ]\n" "${status}"
|
||||
}
|
||||
|
||||
print_build_summary() {
|
||||
@@ -251,6 +245,11 @@ launch_timer() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Don't launch the timer when we are not on a terminal
|
||||
if ! is_terminal; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Launch the co-process
|
||||
coproc TIMER { "${0}" "__timer" "$$"; }
|
||||
|
||||
@@ -302,7 +301,7 @@ exiterror() {
|
||||
|
||||
local line
|
||||
for line in "ERROR: $@" " Check ${LOGFILE} for errors if applicable"; do
|
||||
print_error "${line}"
|
||||
echo "${line}"
|
||||
print_status FAIL
|
||||
done
|
||||
|
||||
@@ -2040,7 +2039,7 @@ build_packages() {
|
||||
local LOGFILE="${LOG_DIR}/_build.packages.log"
|
||||
|
||||
# Build packages
|
||||
print_build_stage "Building Packages"
|
||||
print_headline "Building Packages"
|
||||
|
||||
local path
|
||||
local -A pkgs=()
|
||||
@@ -2253,7 +2252,7 @@ build)
|
||||
if [ ! -e "${BUILD_DIR}${TOOLS_DIR}/.toolchain-successful" ]; then
|
||||
# If we have the toolchain available, we extract it into the build environment
|
||||
if [ -r "${TOOLCHAIN_DIR}/${TOOLCHAIN}" ]; then
|
||||
print_build_stage "Packaged toolchain compilation"
|
||||
print_headline "Packaged toolchain compilation"
|
||||
|
||||
# Extract the toolchain
|
||||
if ! extract_toolchain "${TOOLCHAIN}"; then
|
||||
@@ -2262,18 +2261,18 @@ build)
|
||||
|
||||
# Otherwise perform a full toolchain compilation
|
||||
else
|
||||
print_build_stage "Full toolchain compilation"
|
||||
print_headline "Full toolchain compilation"
|
||||
build_toolchain
|
||||
fi
|
||||
fi
|
||||
|
||||
print_build_stage "Building ${NAME}"
|
||||
print_headline "Building ${NAME}"
|
||||
build_system
|
||||
|
||||
# Build all packages
|
||||
build_packages
|
||||
|
||||
print_build_stage "Checking Logfiles for new Files"
|
||||
print_headline "Checking Logfiles for new Files"
|
||||
|
||||
cd $BASEDIR
|
||||
tools/checknewlog.pl
|
||||
@@ -2331,7 +2330,7 @@ toolchain)
|
||||
# Prepare the environment
|
||||
prepareenv
|
||||
|
||||
print_build_stage "Toolchain compilation (${BUILD_ARCH})"
|
||||
print_headline "Toolchain compilation (${BUILD_ARCH})"
|
||||
|
||||
# Build the toolchain
|
||||
build_toolchain
|
||||
|
||||
Reference in New Issue
Block a user