[PATCH v7] coccicheck: Support search for SmPL scripts within selected directory hierarchy

From: zhongshiqi
Date: Mon Nov 11 2019 - 02:41:53 EST


*Allow defining the environment variable âCOCCIâ as a directory to
search SmPL scripts.

*Start a corresponding file determination if it contains an acceptable
path.

*Adjust software documentation for using coccicheck with
a selected directory.

Signed-off-by: zhongshiqi <zhong.shiqi@xxxxxxxxxx>
---
Changes in v7:
1:adjust coccinelle.rst documentation
2:fix a repo of "default"

Changes in v6:
update coccinelle.rst documents and add instructions for use this

Changes in v5:
rewrite change description as an enumeration

Changes in v4:
rewrite change description in another wording

Changes in v3:
1:rewrite change description
2:fix patch subject
3:modify commit log

Changes in v2:
1.fix patch subject according to the reply by Markus
<Markus.Elfring@xxxxxx>
2.change description in âimperative moodâ

---
Documentation/dev-tools/coccinelle.rst | 69 +++++++++++++++++++++-------------
scripts/coccicheck | 4 ++
2 files changed, 47 insertions(+), 26 deletions(-)

diff --git a/Documentation/dev-tools/coccinelle.rst b/Documentation/dev-tools/coccinelle.rst
index 00a3409..90abe21 100644
--- a/Documentation/dev-tools/coccinelle.rst
+++ b/Documentation/dev-tools/coccinelle.rst
@@ -100,8 +100,8 @@ Two other modes provide some common combinations of these modes.
It should be used with the C option (described later)
which checks the code on a file basis.

-Examples
-~~~~~~~~
+Using Coccinelle with the default configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To make a report for every semantic patch, run the following command::

@@ -127,41 +127,36 @@ To enable verbose messages set the V= variable, for example::

make coccicheck MODE=report V=1

-Coccinelle parallelization
----------------------------
+Using Coccinelle with a single file selection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-By default, coccicheck tries to run as parallel as possible. To change
-the parallelism, set the J= variable. For example, to run across 4 CPUs::
+The optional make variable COCCI can be used to check a single
+semantic patch. In that case, the variable must be initialized with
+the name of the semantic patch to apply.

- make coccicheck MODE=report J=4
+For instance::

-As of Coccinelle 1.0.2 Coccinelle uses Ocaml parmap for parallelization,
-if support for this is detected you will benefit from parmap parallelization.
+ make coccicheck COCCI=<my_SP.cocci> MODE=patch

-When parmap is enabled coccicheck will enable dynamic load balancing by using
-``--chunksize 1`` argument, this ensures we keep feeding threads with work
-one by one, so that we avoid the situation where most work gets done by only
-a few threads. With dynamic load balancing, if a thread finishes early we keep
-feeding it more work.
+or::

-When parmap is enabled, if an error occurs in Coccinelle, this error
-value is propagated back, the return value of the ``make coccicheck``
-captures this return value.
+ make coccicheck COCCI=<my_SP.cocci> MODE=report

-Using Coccinelle with a single semantic patch
----------------------------------------------

-The optional make variable COCCI can be used to check a single
-semantic patch. In that case, the variable must be initialized with
-the name of the semantic patch to apply.
+Using Coccinelle with directory selection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The optional make variable COCCI can be used to search semantic patch in a
+directory. In that case, the variable must be initialized with the name of
+a directory which contains semantic patches.

For instance::

- make coccicheck COCCI=<my_SP.cocci> MODE=patch
+ make coccicheck COCCI=<my_SPDIR> MODE=patch

or::

- make coccicheck COCCI=<my_SP.cocci> MODE=report
+ make coccicheck COCCI=<my_SPDIR> MODE=report


Controlling Which Files are Processed by Coccinelle
@@ -187,12 +182,34 @@ In these modes, which works on a file basis, there is no information
about semantic patches displayed, and no commit message proposed.

This runs every semantic patch in scripts/coccinelle by default. The
-COCCI variable may additionally be used to only apply a single
-semantic patch as shown in the previous section.
+COCCI variable may additionally be used to apply a single semantic
+patch or a directory which contains semantic patches as shown in the
+previous section.

The "report" mode is the default. You can select another one with the
MODE variable explained above.

+Coccinelle parallelization
+--------------------------
+
+By default, coccicheck tries to run as parallel as possible. To change
+the parallelism, set the J= variable. For example, to run across 4 CPUs::
+
+ make coccicheck MODE=report J=4
+
+As of Coccinelle 1.0.2 Coccinelle uses Ocaml parmap for parallelization,
+if support for this is detected you will benefit from parmap parallelization.
+
+When parmap is enabled coccicheck will enable dynamic load balancing by using
+``--chunksize 1`` argument, this ensures we keep feeding threads with work
+one by one, so that we avoid the situation where most work gets done by only
+a few threads. With dynamic load balancing, if a thread finishes early we keep
+feeding it more work.
+
+When parmap is enabled, if an error occurs in Coccinelle, this error
+value is propagated back, the return value of the ``make coccicheck``
+captures this return value.
+
Debugging Coccinelle SmPL patches
---------------------------------

diff --git a/scripts/coccicheck b/scripts/coccicheck
index e04d328..e64a22e 100755
--- a/scripts/coccicheck
+++ b/scripts/coccicheck
@@ -257,6 +257,10 @@ if [ "$COCCI" = "" ] ; then
for f in `find $srctree/scripts/coccinelle/ -name '*.cocci' -type f | sort`; do
coccinelle $f
done
+elif [ -d "$COCCI" ] ; then
+ for f in `find $COCCI/ -name '*.cocci' -type f | sort`; do
+ coccinelle $f
+ done
else
coccinelle $COCCI
fi
--
2.9.5