xref: /linux-6.15/scripts/coccicheck (revision 74425eee)
1*74425eeeSNicolas Palix#!/bin/sh
2*74425eeeSNicolas Palix
3*74425eeeSNicolas PalixSPATCH="`which ${SPATCH:=spatch}`"
4*74425eeeSNicolas Palix
5*74425eeeSNicolas Palixif [ ! -x "$SPATCH" ]; then
6*74425eeeSNicolas Palix    echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
7*74425eeeSNicolas Palix    exit 1
8*74425eeeSNicolas Palixfi
9*74425eeeSNicolas Palix
10*74425eeeSNicolas Palixif [ "$MODE" = "" ] ; then
11*74425eeeSNicolas Palix    echo 'You have not explicitly specify the mode to use. Fallback to "report".'
12*74425eeeSNicolas Palix    echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
13*74425eeeSNicolas Palix    echo 'Available modes are: report, patch, context, org'
14*74425eeeSNicolas Palix    MODE="report"
15*74425eeeSNicolas Palixfi
16*74425eeeSNicolas Palix
17*74425eeeSNicolas Palixecho ''
18*74425eeeSNicolas Palixecho 'Please check for false positives in the output before submitting a patch.'
19*74425eeeSNicolas Palixecho 'When using "patch" mode, carefully review the patch before submitting it.'
20*74425eeeSNicolas Palixecho ''
21*74425eeeSNicolas Palix
22*74425eeeSNicolas Palixfunction coccinelle {
23*74425eeeSNicolas Palix    COCCI="$1"
24*74425eeeSNicolas Palix    DIR="$2"
25*74425eeeSNicolas Palix
26*74425eeeSNicolas Palix    OPT=`grep "Option" $COCCI | cut -d':' -f2`
27*74425eeeSNicolas Palix    FILE=`echo $COCCI | sed "s|$DIR/||"`
28*74425eeeSNicolas Palix
29*74425eeeSNicolas Palix    echo "Processing `basename $COCCI` with option(s) \"$OPT\""
30*74425eeeSNicolas Palix    echo 'Message example to submit a patch:'
31*74425eeeSNicolas Palix
32*74425eeeSNicolas Palix    sed -e '/\/\/\//!d' -e 's|^///||' $COCCI
33*74425eeeSNicolas Palix
34*74425eeeSNicolas Palix    echo ' The semantic patch that makes this change is available'
35*74425eeeSNicolas Palix    echo " in $FILE."
36*74425eeeSNicolas Palix    echo ''
37*74425eeeSNicolas Palix    echo ' More information about semantic patching is available at'
38*74425eeeSNicolas Palix    echo ' http://coccinelle.lip6.fr/'
39*74425eeeSNicolas Palix    echo ''
40*74425eeeSNicolas Palix
41*74425eeeSNicolas Palix#   The option '-parse_cocci' can be used to syntaxically check the SmPL files.
42*74425eeeSNicolas Palix#
43*74425eeeSNicolas Palix#    $SPATCH -D $MODE -very_quiet -parse_cocci $COCCI $OPT > /dev/null
44*74425eeeSNicolas Palix
45*74425eeeSNicolas Palix    $SPATCH -D $MODE -very_quiet -sp_file $COCCI $OPT -dir $DIR
46*74425eeeSNicolas Palix}
47*74425eeeSNicolas Palix
48*74425eeeSNicolas Palixif [ "$COCCI" = "" ] ; then
49*74425eeeSNicolas Palix    for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
50*74425eeeSNicolas Palix	coccinelle $f $srctree;
51*74425eeeSNicolas Palix    done
52*74425eeeSNicolas Palixelse
53*74425eeeSNicolas Palix    coccinelle $COCCI $srctree
54*74425eeeSNicolas Palixfi
55