1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/dist/tools/coccinelle/check.sh
Koen Zandberg 96cad82910
dist/tools: Use bash instead of sh where needed
A number of scripts use features from bash such as `local` which are not
in the POSIX spec. This breaks on systems where sh is not symlinked to
bash.

This patch changes the interpreter indicated by the hashbang to bash for
those scripts
2020-10-30 12:12:10 +01:00

80 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2017 Kaspar Schleiser <kaspar@schleiser.de>
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
: "${RIOTBASE:=$(cd $(dirname $0)/../../../; pwd)}"
cd $RIOTBASE
: "${RIOTTOOLS:=${RIOTBASE}/dist/tools}"
. "${RIOTTOOLS}"/ci/changed_files.sh
EXIT_CODE=0
filter() {
if [ $COCCINELLE_QUIET -eq 0 ]; then
cat
else
grep '^---' | cut -f 2 -d ' '
fi
}
indent() {
sed 's/^/ /g'
}
coccinelle_checkone() {
OUT="$(spatch --very-quiet \
--macro-file-builtins ${RIOTTOOLS}/coccinelle/include/riot-standard.h \
--sp-file $patch ${FILES} | filter)"
if [ -n "$OUT" ]; then
if [ $COCCINELLE_QUIET -eq 1 ]; then
echo "$patch:"
echo "$OUT" | indent
if [ COCCINELLE_WARNONLY -eq 0 ]; then
EXIT_CODE=1
fi
else
echo "$OUT"
fi
fi
}
coccinelle_checkall() {
local dir="$1"
local warn="${2:-0}"
[ -d "$dir" ] || {
echo "$0: coccinelle_checkall(): $dir doesn't exist!"
exit 1
}
for patch in $dir/*; do
coccinelle_checkone $patch
done
}
: ${FILES:=$(FILEREGEX='\.c$' changed_files)}
if [ -z "${FILES}" ]; then
exit
fi
: ${COCCINELLE_QUIET:=0}
if [ -z "$*" ]; then
coccinelle_checkall "${RIOTTOOLS}"/coccinelle/force
COCCINELLE_WARNONLY=1 coccinelle_checkall "${RIOTTOOLS}"/coccinelle/warn
else
for patch in "$@"; do
coccinelle_checkone "$patch"
done
fi
exit $EXIT_CODE