Commit 1e9dea2a authored by Nicolas Palix's avatar Nicolas Palix Committed by Michal Marek

Add support for the C variable in the coccicheck script

This patch makes it possible to use the Coccinelle checker with the C
variable of the build system. To check only newly edited code, the
following command may be used:

'make C={1,2} CHECK="scripts/coccicheck"'

This runs every semantic patch in scripts/coccinelle by default. The
COCCI variable may additionally be used to only apply a single
semantic patch.
Signed-off-by: default avatarNicolas Palix <npalix@diku.dk>
Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
parent 6ff21517
...@@ -2,29 +2,55 @@ ...@@ -2,29 +2,55 @@
SPATCH="`which ${SPATCH:=spatch}`" SPATCH="`which ${SPATCH:=spatch}`"
if [ "$C" = "1" -o "$C" = "2" ]; then
ONLINE=1
# This requires Coccinelle >= 0.2.3
# FLAGS="-ignore_unknown_options -very_quiet"
# OPTIONS=$*
# Workaround for Coccinelle < 0.2.3
FLAGS="-I $srctree/include -very_quiet"
shift $(( $# - 1 ))
OPTIONS=$1
else
ONLINE=0
FLAGS="-very_quiet"
fi
if [ ! -x "$SPATCH" ]; then if [ ! -x "$SPATCH" ]; then
echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/' echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
exit 1 exit 1
fi fi
if [ "$MODE" = "" ] ; then if [ "$MODE" = "" ] ; then
if [ "$ONLINE" = "0" ] ; then
echo 'You have not explicitly specify the mode to use. Fallback to "report".' echo 'You have not explicitly specify the mode to use. Fallback to "report".'
echo 'You can specify the mode with "make coccicheck MODE=<mode>"' echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
echo 'Available modes are: report, patch, context, org' echo 'Available modes are: report, patch, context, org'
fi
MODE="report" MODE="report"
fi fi
echo '' if [ "$ONLINE" = "0" ] ; then
echo 'Please check for false positives in the output before submitting a patch.' echo ''
echo 'When using "patch" mode, carefully review the patch before submitting it.' echo 'Please check for false positives in the output before submitting a patch.'
echo '' echo 'When using "patch" mode, carefully review the patch before submitting it.'
echo ''
fi
function coccinelle { coccinelle () {
COCCI="$1" COCCI="$1"
DIR="$2"
OPT=`grep "Option" $COCCI | cut -d':' -f2` OPT=`grep "Option" $COCCI | cut -d':' -f2`
FILE=`echo $COCCI | sed "s|$DIR/||"`
# The option '-parse_cocci' can be used to syntaxically check the SmPL files.
#
# $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null
if [ "$ONLINE" = "0" ] ; then
FILE=`echo $COCCI | sed "s|$srctree/||"`
echo "Processing `basename $COCCI` with option(s) \"$OPT\"" echo "Processing `basename $COCCI` with option(s) \"$OPT\""
echo 'Message example to submit a patch:' echo 'Message example to submit a patch:'
...@@ -38,17 +64,17 @@ function coccinelle { ...@@ -38,17 +64,17 @@ function coccinelle {
echo ' http://coccinelle.lip6.fr/' echo ' http://coccinelle.lip6.fr/'
echo '' echo ''
# The option '-parse_cocci' can be used to syntaxically check the SmPL files. $SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT -dir $srctree || exit 1
# else
# $SPATCH -D $MODE -very_quiet -parse_cocci $COCCI $OPT > /dev/null $SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1
fi
$SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR
} }
if [ "$COCCI" = "" ] ; then if [ "$COCCI" = "" ] ; then
for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
coccinelle $f $srctree; coccinelle $f
done done
else else
coccinelle $COCCI $srctree coccinelle $COCCI
fi fi
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment