Commit | Line | Data |
---|---|---|
74425eee NP |
1 | #!/bin/sh |
2 | ||
3 | SPATCH="`which ${SPATCH:=spatch}`" | |
4 | ||
1e9dea2a NP |
5 | if [ "$C" = "1" -o "$C" = "2" ]; then |
6 | ONLINE=1 | |
7 | ||
8 | # This requires Coccinelle >= 0.2.3 | |
9 | # FLAGS="-ignore_unknown_options -very_quiet" | |
10 | # OPTIONS=$* | |
11 | ||
12 | # Workaround for Coccinelle < 0.2.3 | |
13 | FLAGS="-I $srctree/include -very_quiet" | |
14 | shift $(( $# - 1 )) | |
15 | OPTIONS=$1 | |
16 | else | |
17 | ONLINE=0 | |
18 | FLAGS="-very_quiet" | |
19 | fi | |
20 | ||
74425eee NP |
21 | if [ ! -x "$SPATCH" ]; then |
22 | echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/' | |
23 | exit 1 | |
24 | fi | |
25 | ||
26 | if [ "$MODE" = "" ] ; then | |
1e9dea2a NP |
27 | if [ "$ONLINE" = "0" ] ; then |
28 | echo 'You have not explicitly specify the mode to use. Fallback to "report".' | |
29 | echo 'You can specify the mode with "make coccicheck MODE=<mode>"' | |
30 | echo 'Available modes are: report, patch, context, org' | |
31 | fi | |
74425eee NP |
32 | MODE="report" |
33 | fi | |
34 | ||
1e9dea2a NP |
35 | if [ "$ONLINE" = "0" ] ; then |
36 | echo '' | |
37 | echo 'Please check for false positives in the output before submitting a patch.' | |
38 | echo 'When using "patch" mode, carefully review the patch before submitting it.' | |
39 | echo '' | |
40 | fi | |
74425eee | 41 | |
1e9dea2a | 42 | coccinelle () { |
74425eee | 43 | COCCI="$1" |
74425eee NP |
44 | |
45 | OPT=`grep "Option" $COCCI | cut -d':' -f2` | |
74425eee | 46 | |
1e9dea2a NP |
47 | # The option '-parse_cocci' can be used to syntaxically check the SmPL files. |
48 | # | |
49 | # $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null | |
74425eee | 50 | |
1e9dea2a | 51 | if [ "$ONLINE" = "0" ] ; then |
74425eee | 52 | |
1e9dea2a | 53 | FILE=`echo $COCCI | sed "s|$srctree/||"` |
74425eee | 54 | |
1e9dea2a NP |
55 | echo "Processing `basename $COCCI` with option(s) \"$OPT\"" |
56 | echo 'Message example to submit a patch:' | |
57 | ||
58 | sed -e '/\/\/\//!d' -e 's|^///||' $COCCI | |
59 | ||
60 | echo ' The semantic patch that makes this change is available' | |
61 | echo " in $FILE." | |
62 | echo '' | |
63 | echo ' More information about semantic patching is available at' | |
64 | echo ' http://coccinelle.lip6.fr/' | |
65 | echo '' | |
66 | ||
67 | $SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT -dir $srctree || exit 1 | |
68 | else | |
69 | $SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1 | |
70 | fi | |
74425eee | 71 | |
74425eee NP |
72 | } |
73 | ||
74 | if [ "$COCCI" = "" ] ; then | |
75 | for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do | |
1e9dea2a | 76 | coccinelle $f |
74425eee NP |
77 | done |
78 | else | |
1e9dea2a | 79 | coccinelle $COCCI |
74425eee | 80 | fi |