Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756900Ab0F3VvX (ORCPT ); Wed, 30 Jun 2010 17:51:23 -0400 Received: from mgw2.diku.dk ([130.225.96.92]:51121 "EHLO mgw2.diku.dk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753245Ab0F3VvV (ORCPT ); Wed, 30 Jun 2010 17:51:21 -0400 From: Nicolas Palix To: Randy Dunlap , Roland Dreier , Joe Perches , Andrew Morton , "David S. Miller" , Michal Marek , Sam Ravnborg , Julia Lawall , Gilles Muller , linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, cocci@diku.dk, Wolfram Sang , Kernel Janitors , =?UTF-8?q?Am=C3=A9rico=20Wang?= , Andy Isaacson , Linus Torvalds , Pekka Enberg , walter harms , Joerg Roedel , Jan Engelhardt Cc: Nicolas Palix Subject: [PATCH] Add support for the C variable in the coccicheck script Date: Wed, 30 Jun 2010 23:50:32 +0200 Message-Id: <1277934632-6802-1-git-send-email-npalix@diku.dk> X-Mailer: git-send-email 1.7.0.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4217 Lines: 133 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: Nicolas Palix Signed-off-by: Julia Lawall --- scripts/coccicheck | 76 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 51 insertions(+), 25 deletions(-) diff --git a/scripts/coccicheck b/scripts/coccicheck index 037424b..b8bcf1f 100755 --- a/scripts/coccicheck +++ b/scripts/coccicheck @@ -2,53 +2,79 @@ 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 echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/' exit 1 fi if [ "$MODE" = "" ] ; then - echo 'You have not explicitly specify the mode to use. Fallback to "report".' - echo 'You can specify the mode with "make coccicheck MODE="' - echo 'Available modes are: report, patch, context, org' + if [ "$ONLINE" = "0" ] ; then + echo 'You have not explicitly specify the mode to use. Fallback to "report".' + echo 'You can specify the mode with "make coccicheck MODE="' + echo 'Available modes are: report, patch, context, org' + fi MODE="report" fi -echo '' -echo 'Please check for false positives in the output before submitting a patch.' -echo 'When using "patch" mode, carefully review the patch before submitting it.' -echo '' +if [ "$ONLINE" = "0" ] ; then + echo '' + echo 'Please check for false positives in the output before submitting a patch.' + echo 'When using "patch" mode, carefully review the patch before submitting it.' + echo '' +fi -function coccinelle { +coccinelle () { COCCI="$1" - DIR="$2" OPT=`grep "Option" $COCCI | cut -d':' -f2` - FILE=`echo $COCCI | sed "s|$DIR/||"` - echo "Processing `basename $COCCI` with option(s) \"$OPT\"" - echo 'Message example to submit a patch:' +# The option '-parse_cocci' can be used to syntaxically check the SmPL files. +# +# $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null - sed -e '/\/\/\//!d' -e 's|^///||' $COCCI + if [ "$ONLINE" = "0" ] ; then - echo ' The semantic patch that makes this change is available' - echo " in $FILE." - echo '' - echo ' More information about semantic patching is available at' - echo ' http://coccinelle.lip6.fr/' - echo '' + FILE=`echo $COCCI | sed "s|$srctree/||"` -# The option '-parse_cocci' can be used to syntaxically check the SmPL files. -# -# $SPATCH -D $MODE -very_quiet -parse_cocci $COCCI $OPT > /dev/null + echo "Processing `basename $COCCI` with option(s) \"$OPT\"" + echo 'Message example to submit a patch:' + + sed -e '/\/\/\//!d' -e 's|^///||' $COCCI + + echo ' The semantic patch that makes this change is available' + echo " in $FILE." + echo '' + echo ' More information about semantic patching is available at' + echo ' http://coccinelle.lip6.fr/' + echo '' + + $SPATCH -D $MODE $FLAGS -sp_file $COCCI $OPT -dir $srctree || exit 1 + else + $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 for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do - coccinelle $f $srctree; + coccinelle $f done else - coccinelle $COCCI $srctree + coccinelle $COCCI fi -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/