[PATCH 08/11] Start using cocci scripts from the kernel tree

Keller, Jacob E jacob.e.keller at intel.com
Fri Feb 7 12:06:13 PST 2014



> -----Original Message-----
> From: aiaiai [mailto:aiaiai-bounces at lists.infradead.org] On Behalf Of
> Artem Bityutskiy
> Sent: Friday, February 07, 2014 7:28 AM
> To: The Aiaiai Mailing List
> Subject: [PATCH 08/11] Start using cocci scripts from the kernel tree
> 
> From: Artem Bityutskiy <artem.bityutskiy at linux.intel.com>
> 
> Start using coccinelle scripts from the kernel tree we build against. This is
> better than carrying our own copies of coccinelle scripts, since they tend
> to
> become out-of-date.
> 
> Signed-off-by: Artem Bityutskiy <artem.bityutskiy at linux.intel.com>
> ---
>  aiaiai-test-patchset       | 13 +++++++++----
>  doc/TODO.txt               |  3 ---
>  helpers/aiaiai-checker     | 21 +++++++++++++++------
>  helpers/aiaiai-make-kernel | 11 ++++++++---
>  4 files changed, 32 insertions(+), 16 deletions(-)
> 
> diff --git a/aiaiai-test-patchset b/aiaiai-test-patchset
> index bda85b3..b9610bb 100755
> --- a/aiaiai-test-patchset
> +++ b/aiaiai-test-patchset
> @@ -308,7 +308,7 @@ while true; do
>  		program_required "cppcheck" "Usually Linux distribution
> provide a cppcheck package"
>  		;;
>  	--coccinelle)
> -		coccinelle="--coccinelle"
> +		coccinelle="yes"
>  		program_required "spatch" "Usually Linux distribution
> provide a 'spatch' or 'coccinelle' package"
>  		;;
>  	-K|--keywords)
> @@ -413,14 +413,19 @@ git diff -U0 -M "$commit_id1".."$commit_id2"
> > "$tmpdir/diff-for-diff-log"
>  # Generate a diff for checkpatch.pl
>  git diff -M "$commit_id1".."$commit_id2" > "$tmpdir/diff-for-
> checkpatch"
> 
> -# Make a copy of 'checlpatch.pl'. This is safer than using it directly from
> the
> -# git tree because we'll apply patches under test there, and the patches
> may
> -# also change 'checlpatch.pl'.
> +# Make a copy of 'checlpatch.pl' and coccinelle scripts. This is safer than
> +# using them directly from the git tree because we'll apply patches
> under test
> +# there, and the patches may also change 'checlpatch.pl' or coccinelle
> scripts.
>  mkdir -p $verbose "$tmpdir/checkpatch" >&2
>  checkpatch_pl="$tmpdir/checkpatch/checkpatch.pl"
>  git show "$commit_id1:scripts/checkpatch.pl" > "$checkpatch_pl"
>  chmod $verbose u+x "$checkpatch_pl" >&2


Shouldn't the following be wrapped in checking if the user specified coccinelle? Otherwise you just overwrite the user settings and always run the coccinelle scripts..

Regards,
Jake

> 
> +mkdir -p $verbose "$tmpdir/coccinelle" >&2
> +git archive "$commit_id1" scripts/coccinelle | \
> +	tar $verbose --strip-components=2 -C "$tmpdir/coccinelle" -x
> +coccinelle="--coccinelle=$tmpdir/coccinelle"
> +
>  # Run checkpatch.pl in backgound.
>  test_checkpatch &
>  pid_checkpatch="$!"
> diff --git a/doc/TODO.txt b/doc/TODO.txt
> index e64901c..adc9a97 100644
> --- a/doc/TODO.txt
> +++ b/doc/TODO.txt
> @@ -46,9 +46,6 @@ implementing them.
>        int found;
>            ^
>      Aiaiai does not process them correctly which leads to ugly diffs. Fix
> this.
> -  * Stop carrying own copy of coccinelle. Just use the ones from the
> -    project kernel tree. This is better because our own copy tend to get
> -    out-of-date.
>    * We hard-code 'KCFLAGS='-Wno-missing-field-initializers
>      -Wno-sign-compare' and W=1 in 'aiaiai-make-kernel'. This is not that
>      nice. It is better to make these things to be the default value of
> diff --git a/helpers/aiaiai-checker b/helpers/aiaiai-checker
> index 21d52ef..b3f7274 100755
> --- a/helpers/aiaiai-checker
> +++ b/helpers/aiaiai-checker
> @@ -27,17 +27,19 @@ show_usage()
>  	cat <<-EOF
>  Usage: $PROG [options] -- ...
> 
> -This is an internal aiaiai helper program which runs various source code
> -analysis tools when building the kernel. Options for $PROG has to go first,
> +This is an internal Aiaiai helper program which runs various source code
> +analysis tools when building the kernel. Options for "$PROG" has to go
> first,
>  then there has to be a "--" delimiter, and then any number of options
> which are
>  not interpreted by this script but passed further to the code analysis tool
> -(sparse or smatch).
> +(sparse, smatch, etc).
> 
>  Options:
>        --sparse           check with sparse;
>        --smatch           check with smatch;
>        --cppcheck         check with cppcheck;
> -      --coccinelle       check with coccinelle (spatch);
> +      --coccinelle=PATH  check with coccinelle (spatch) using coccinelle
> +                         scripts from PATH; the scripts have to have ".cocci"
> +                         extention and may reside anywhere under PATH
>        --check-only=FILE  check only files listed in FILE;
>    -h, --help             show this text and exit.
>  EOF
> @@ -64,7 +66,11 @@ run_coccinelle()
>  	local spatch spatches flags pid
>  	local pids=
> 
> -	spatches="$(find $srcdir -name '*.cocci')"
> +	spatches="$(find "$cocci_path" -name '*.cocci')"
> +	if [ -z "$spatches" ]; then
> +		die "no coccinelle scripts (*.cocci) found in
> \"$cocci_path\""
> +	fi
> +
>  	for spatch in $spatches; do
>  		# Coccinelle is not stable enough so far and dies because
> of
>  		# internal issues sometimes or just never stops. So we
> specify
> @@ -97,7 +103,7 @@ cleanup_handler()
>  }
>  set_cleanup_handler cleanup_handler
> 
> -TEMP=`getopt -n $PROG -o h --long
> sparse,smatch,cppcheck,coccinelle,check-only:,help -- "$@"` ||
> +TEMP=`getopt -n $PROG -o h --long
> sparse,smatch,cppcheck,coccinelle:,check-only:,help -- "$@"` ||
>  	fail_usage ""
>  eval set -- "$TEMP"
> 
> @@ -107,6 +113,7 @@ run_sparse=
>  run_smatch=
>  run_cppcheck=
>  run_coccinelle=
> +cocci_path=
>  check_only=
> 
>  while true; do
> @@ -125,7 +132,9 @@ while true; do
>  		;;
>  	--coccinelle)
>  		run_coccinelle=1
> +		cocci_path="$(opt_check_dir "$1" "$2")"
>  		program_required "spatch" "Usually Linux distribution
> provide a 'spatch' or 'coccinelle' package"
> +		shift
>  		;;
>  	--check-only)
>  		check_only="$(opt_check_read "$1" "$2")"
> diff --git a/helpers/aiaiai-make-kernel b/helpers/aiaiai-make-kernel
> index 4db126b..5604f6c 100755
> --- a/helpers/aiaiai-make-kernel
> +++ b/helpers/aiaiai-make-kernel
> @@ -52,7 +52,9 @@ Options:
>        --sparse           check with sparse while building;
>        --smatch           check with smatch while building;
>        --cppcheck         check with cppcheck while building;
> -      --coccinelle       check with coccinelle (spatch) while building;
> +      --coccinelle=PATH  check with coccinelle (spatch) using coccinelle
> +                         scripts from PATH; the scripts have to have ".cocci"
> +                         extention and may reside anywhere under PATH
>        --check-only=FILE  check only files listed in FILE;
>    -M, --kmake-opts       additional options to append to the final kernel
>                           compilation 'make' command
> @@ -136,7 +138,7 @@ cleanup_handler()
>  }
>  set_cleanup_handler cleanup_handler
> 
> -TEMP=`getopt -n $PROG -o o:,D:,j:,O:,E:,k:,a:,M:,v,h --long
> objdir:,defconfig:,jobs:,stdout:,stderr:,keep-
> going,arch:,sparse,smatch,cppcheck,coccinelle,check-only:,kmake-
> opts:,verbose,help -- "$@"` ||
> +TEMP=`getopt -n $PROG -o o:,D:,j:,O:,E:,k:,a:,M:,v,h --long
> objdir:,defconfig:,jobs:,stdout:,stderr:,keep-
> going,arch:,sparse,smatch,cppcheck,coccinelle:,check-only:,kmake-
> opts:,verbose,help -- "$@"` ||
>  	fail_usage ""
>  eval set -- "$TEMP"
> 
> @@ -150,6 +152,7 @@ sparse=
>  smatch=
>  cppcheck=
>  coccinelle=
> +cocci_path=
>  check_only=
>  check=0
>  kmake_opts=
> @@ -203,8 +206,10 @@ while true; do
>  		check=1
>  		;;
>  	--coccinelle)
> -		coccinelle="--coccinelle"
> +		cocci_path="$(opt_check_dir "$1" "$2")"
> +		coccinelle="--coccinelle=$cocci_path"
>  		check=1
> +		shift
>  		;;
>  	--check-only)
>  		check_only="--check-only $(opt_check_read "$1" "$2")"
> --
> 1.8.5.2
> 
> 
> _______________________________________________
> aiaiai mailing list
> aiaiai at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/aiaiai



More information about the aiaiai mailing list