5 # Disable wildcard character expansion
7 # Disable uninitialized variable usage
9 # Disable error masking in pipe
10 # shellcheck disable=SC3040
11 if (set -o pipefail
> /dev
/null
2>&1); then
18 # Error log level. Cause exit failure
22 # Informational log level
27 LOG_LEVEL
=$LOG_LEVEL_INFO
31 # Convert log level to equivalent name
34 _log_level
=${1:-LOG_LEVEL}
38 "$LOG_LEVEL_ERROR") _log_level_name
=error
;;
39 "$LOG_LEVEL_WARN") _log_level_name
=warn
;;
40 "$LOG_LEVEL_INFO") _log_level_name
=info
;;
41 "$LOG_LEVEL_DEBUG") _log_level_name
=debug
;;
42 *) ERROR
"Unknown log level '$_log_level'" ;;
45 printf '%s\n' "$_log_level_name"
48 # Check if log level is enabled
51 [ "$1" -le "$LOG_LEVEL" ]
57 _log_print_message
() {
58 _log_level
=${1:-LOG_LEVEL_ERROR}
66 log_is_enabled
"$_log_level" ||
return 0
71 _log_prefix
="\033[1;31m"
75 _log_prefix
="\033[1;33m"
79 _log_prefix
="\033[1;37m"
83 _log_prefix
="\033[1;34m"
88 if [ "$LOG_COLOR_ENABLE" = false
]; then
94 printf '%b[%-5s] %b%b\n' "$_log_prefix" "$_log_level_name" "$_log_message" "$_log_suffix"
100 _log_print_message
"$LOG_LEVEL_ERROR" "$1" >&2
103 # Warning log message
105 WARN
() { _log_print_message
"$LOG_LEVEL_WARN" "$1" >&2; }
106 # Informational log message
108 INFO
() { _log_print_message
"$LOG_LEVEL_INFO" "$1"; }
111 DEBUG
() { _log_print_message
"$LOG_LEVEL_DEBUG" "$1"; }
116 # Assert command is installed
117 # @param $1 Command name
119 check_cmd
"$1" || ERROR
"Command '$1' not found"
120 DEBUG
"Command '$1' found at '$(command -v "$1")'"
123 # Check command is installed
124 # @param $1 Command name
126 command -v "$1" > /dev
/null
2>&1
132 Usage: $(basename "$0")
133 [--disable-color] [--help] [--log-level <LEVEL>] [--root-dir <DIR>]
138 --disable-color Disable color
140 --help Show this help message and exit
142 --log-level <LEVEL> Logger level
143 Default: $(log_level_name "$LOG_LEVEL")
147 info Informational level
150 --root-dir <DIR> Root directory
155 # Assert argument has a value
156 # @param $1 Argument name
157 # @param $2 Argument value
158 _parse_args_assert_value
() {
159 [ -n "${2+x}" ] || ERROR
"Argument '$1' requires a non-empty value"
162 # Parse command line arguments
163 # @param $@ Arguments
165 while [ $# -gt 0 ]; do
169 LOG_COLOR_ENABLE
=false
173 # Display help message and exit
179 _parse_args_assert_value
"$@"
181 error
) LOG_LEVEL
=$LOG_LEVEL_ERROR ;;
182 warn
) LOG_LEVEL
=$LOG_LEVEL_WARN ;;
183 info
) LOG_LEVEL
=$LOG_LEVEL_INFO ;;
184 debug
) LOG_LEVEL
=$LOG_LEVEL_DEBUG ;;
185 *) ERROR
"Value '$2' of argument '$1' is invalid" ;;
192 _parse_args_assert_value
"$@"
199 WARN
"Unknown argument '$1' is ignored"
204 WARN
"Skipping argument '$1'"
213 assert_cmd clang-format
214 assert_cmd cmake-format
215 assert_cmd cmake-lint
217 [ -d "$ROOTDIR" ] || ERROR
"Root directory '$ROOTDIR' does not exists"
224 -not -path "$ROOTDIR/build/*" \
225 -not -path "$ROOTDIR/cmake/CPM.cmake" \
226 -type f \
( -name 'CMakeLists.txt' -o -name '*.cmake' -o -name '*.cmake.in' \
) \
237 -not -path "$ROOTDIR/build/*" \
238 -not -path "$ROOTDIR/cmake/CPM.cmake" \
239 -type f \
( -name 'CMakeLists.txt' -o -name '*.cmake' -o -name '*.cmake.in' \
) \
249 -not -path "$ROOTDIR/build/*" \
250 -not -path "$ROOTDIR/include/KDIS/KExport.hpp" \
251 -type f \
( -name '*.hpp' -o -name '*.hpp.in' -o -name '*.cpp' \
) \
263 # TODO(carlocorradini)
269 # TODO(carlocorradini)
275 # TODO(carlocorradini)
282 LOG_LEVEL
=$LOG_LEVEL_INFO
284 LOG_COLOR_ENABLE
=true
286 # shellcheck disable=SC1007
287 ROOTDIR
="$(readlink -f "$
(CDPATH
= cd -- "$(dirname -- "$0")" && pwd)/..
")"