The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/scripts/coccicheck

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #!/bin/sh
    2 
    3 SPATCH="`which ${SPATCH:=spatch}`"
    4 
    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     if [ "$KBUILD_EXTMOD" = "" ] ; then
   20         OPTIONS="-dir $srctree"
   21     else
   22         OPTIONS="-dir $KBUILD_EXTMOD -patch $srctree -I $srctree/include -I $KBUILD_EXTMOD/include"
   23     fi
   24 fi
   25 
   26 if [ ! -x "$SPATCH" ]; then
   27     echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/'
   28     exit 1
   29 fi
   30 
   31 if [ "$MODE" = "" ] ; then
   32     if [ "$ONLINE" = "0" ] ; then
   33         echo 'You have not explicitly specified the mode to use. Using default "chain" mode.'
   34         echo 'All available modes will be tried (in that order): patch, report, context, org'
   35         echo 'You can specify the mode with "make coccicheck MODE=<mode>"'
   36     fi
   37     MODE="chain"
   38 elif [ "$MODE" = "report" -o "$MODE" = "org" ] ; then
   39     FLAGS="$FLAGS -no_show_diff"
   40 fi
   41 
   42 if [ "$ONLINE" = "0" ] ; then
   43     echo ''
   44     echo 'Please check for false positives in the output before submitting a patch.'
   45     echo 'When using "patch" mode, carefully review the patch before submitting it.'
   46     echo ''
   47 fi
   48 
   49 coccinelle () {
   50     COCCI="$1"
   51 
   52     OPT=`grep "Option" $COCCI | cut -d':' -f2`
   53 
   54 #   The option '-parse_cocci' can be used to syntactically check the SmPL files.
   55 #
   56 #    $SPATCH -D $MODE $FLAGS -parse_cocci $COCCI $OPT > /dev/null
   57 
   58     if [ "$ONLINE" = "0" ] ; then
   59 
   60         FILE=`echo $COCCI | sed "s|$srctree/||"`
   61 
   62         echo "Processing `basename $COCCI`"
   63         echo "with option(s) \"$OPT\""
   64         echo ''
   65         echo 'Message example to submit a patch:'
   66 
   67         sed -ne 's|^///||p' $COCCI
   68 
   69         if [ "$MODE" = "patch" ] ; then
   70             echo ' The semantic patch that makes this change is available'
   71         elif [ "$MODE" = "report" ] ; then
   72             echo ' The semantic patch that makes this report is available'
   73         elif [ "$MODE" = "context" ] ; then
   74             echo ' The semantic patch that spots this code is available'
   75         elif [ "$MODE" = "org" ] ; then
   76             echo ' The semantic patch that makes this Org report is available'
   77         else
   78             echo ' The semantic patch that makes this output is available'
   79         fi
   80         echo " in $FILE."
   81         echo ''
   82         echo ' More information about semantic patching is available at'
   83         echo ' http://coccinelle.lip6.fr/'
   84         echo ''
   85 
   86         if [ "`sed -ne 's|^//#||p' $COCCI`" ] ; then
   87             echo 'Semantic patch information:'
   88             sed -ne 's|^//#||p' $COCCI
   89             echo ''
   90         fi
   91     fi
   92 
   93     if [ "$MODE" = "chain" ] ; then
   94         $SPATCH -D patch   $FLAGS -sp_file $COCCI $OPT $OPTIONS               || \
   95         $SPATCH -D report  $FLAGS -sp_file $COCCI $OPT $OPTIONS -no_show_diff || \
   96         $SPATCH -D context $FLAGS -sp_file $COCCI $OPT $OPTIONS               || \
   97         $SPATCH -D org     $FLAGS -sp_file $COCCI $OPT $OPTIONS -no_show_diff || exit 1
   98     elif [ "$MODE" = "rep+ctxt" ] ; then
   99         $SPATCH -D report  $FLAGS -sp_file $COCCI $OPT $OPTIONS -no_show_diff && \
  100         $SPATCH -D context $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1
  101     else
  102         $SPATCH -D $MODE   $FLAGS -sp_file $COCCI $OPT $OPTIONS || exit 1
  103     fi
  104 
  105 }
  106 
  107 if [ "$COCCI" = "" ] ; then
  108     for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
  109         coccinelle $f
  110     done
  111 else
  112     coccinelle $COCCI
  113 fi

Cache object: 486d33c3fb8681a4dec021d209cd0a4d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.