All of lore.kernel.org
 help / color / mirror / Atom feed
* bash script to parse DPRINTKs etc.
@ 2007-10-02  0:04 Roel Kluin
  0 siblings, 0 replies; only message in thread
From: Roel Kluin @ 2007-10-02  0:04 UTC (permalink / raw)
  To: kernel-janitors

I wrote this bash script to change DPRINTK and other non-standard debugging to a form that can be added as a menu option.
it does not add the kconfig options, I'm not sure how to put that in this script. It appends to a file ../kcs what Kconfig file it thinks that should be edited, and the CONFIG_*_DEBUG option to add there, and the source file in which changes were made.
---
query="^[ \t]*#[ \t]*define[ \t]*[A-Za-z0-9_]*([ \t]*\([A-Za-z0-9_]*\)[\.]*[ \t]*)[ \t]*printk([ \t]*\1[ \t]*)[ \t]*$"


m0[0]="^[ \t]*#[ \t]*if[ \t]0[ \t]*$"
m0[1]="^[ \t]*#[ \t]*ifdef[ \t]*[a-zA-Z0-9_]*[ \t]*$"
m0[2]="^[ \t]*#[ \t]*if[ \t]*[a-zA-Z0-9_]*[ \t]*$"
m0[3]="^[ \t]*#[ \t]*ifndef[ \t]*[a-zA-Z0-9_]*[ \t]*$"
m[1]="^[ \t]*#[ \t]*define[ \t]*[A-Za-z0-9_]*([ \t]*\([A-Za-z0-9_]*\)[\.]*[ \t]*)[ \t]*printk([ \t]*\1[ \t]*)[ \t]*$"
m[2]="^[ \t]*#[ \t]*else[ \t]*$"
m[3]="^[ \t]*#[ \t]*define[ \t]*[a-zA-Z0-9_]*([a-zA-Z0-9_]*[\.]*)[ \t]*$"
m[4]="^[ \t]*#[ \t]*endif[ \t]*$"

# TODO: also for .h files (and files that include them)

#$dbg="echo"

for f in `find -name *.[c]`; do
	grep -q "${m[1]}" $f
	if [ $? -eq 0 ]; then
		echo $f
		match=`grep -B1 -A3 "${m[1]}" $f`;
		let i=0
		ret=$( echo "${match}" | while read line; do
			if [ $i -ne 0 ]; then
				if [ -z "`echo "$line" | grep "${m[$i]}"`" ]; then
					echo fail;
					break;
				fi
			else
				tmp=$( for w in ${#m0[@]}; do
					if [ "`echo "$line" | grep "${m0[$w]}"`" ]; then
						echo $w;
					fi
				done )
				if [ -z "$tmp" ]; then
					echo fail;
					break;
				else
					echo $w;
				fi
			fi
			let i++
		done )

		if [ "$ret" = "fail" ]; then
			echo sorry, failed:
			grep -B1 -A3 "${m[1]}" $f
			echo "------------------"
			continue;
		fi
		head -n60 $f;
		echo "${match}";
		echo "enter a CONFIG string for file $f (omit CONFIG_ and _DEBUG; end with ctrl+D; \"q\" will exit script)"
		test=$(cat)
		[ "$test" = "q" ] && exit 0;
		test="CONFIG_${test#CONFIG_}"
		test="${test%CONFIG_}_DEBUG"
		echo string entered was $test
		echo -n "$test " >> ../kcs

		# TODO Kconfig edit
		dir=`dirname $f`
		while [ ! -f "$dir/Kconfig" ]; do
			dir="${dir%/*}"
			if [ "$dir" = "." ]; then
				echo could not find Kconfig for $f
				continue;
			fi
		done
		echo -n "$dir/Kconfig " >> ../kcs
		echo "$f" >> ../kcs
		linenr=`grep -n "${m[1]}" $f | cut -d ":" -f1`;

		qr=`echo "$match" | sed -n "/^[ \t]*#[ \t]*define[ \t]*\([A-Za-z0-9_]*\)(.*printk.*/ s/^[ \t]*#[ \t]*define[ \t]*\([A-Za-z0-9_]*\)(.*printk.*/\1/p"`
		$dbg sed -i "/$qr/ s/$qr/pr_debug/g" $f
		sed -n "/$qr/ s/$qr/pr_debug/p" $f

			
		if [ "$ret" = "0" ]; then
			continue;
		elif [ "$ret" = "1" ]; then
			qr2=`echo "$match" | sed -n "/^[ \t]*#[ \t]*ifdef[ \t]*\([a-zA-Z0-9_]*\)[ \t]*$/ s/^[ \t]*#[ \t]*ifdef[ \t]*\([a-zA-Z0-9_]*\)[ \t]*$/\1/p"`
		elif [ "$ret" = "2" ]; then
			qr2=`echo "$match" | sed -n "/^[ \t]*#[ \t]*if[ \t]*\([a-zA-Z0-9_]*\)[ \t]*$/ s/^[ \t]*#[ \t]*if[ \t]*\([a-zA-Z0-9_]*\)[ \t]*$/\1/p"`
		elif [ "$ret" = "3" ]; then
			qr2=`echo "$match" | sed -n "/^[ \t]*#[ \t]*ifndef[ \t]*\([a-zA-Z0-9_]*\)[ \t]*$/ s/^[ \t]*#[ \t]*ifndef[ \t]*\([a-zA-Z0-9_]*\)[ \t]*$/\1/p"`
		fi
		$dbg sed -i "/[ \t]*#[ \t]*undef[ \t]*$qr2[ \t]*$/d" $f
		sed -n "/[ \t]*#[ \t]*undef[ \t]*$qr2[ \t]*$/p" $f
		$dbg sed -i "/[ \t]*#[ \t]*define[ \t]*$qr2[ \t]*$/d" $f
		sed -n "/[ \t]*#[ \t]*define[ \t]*$qr2[ \t]*$/p" $f

		$dbg sed -i "`expr $linenr - 1` s/.*/#ifdef $test/" $f
		sed -n "`expr $linenr - 1` s/.*/#ifdef $test/p" $f
		$dbg sed -i "`expr $linenr` s/.*/#\tdefine DEBUG 1/" $f
		sed -n "`expr $linenr` s/.*/#\tdefine DEBUG 1/p" $f
		$dbg sed -i "`expr $linenr + 1` s/.*/#endif/" $f
		sed -n "`expr $linenr + 1` s/.*/#endif/p" $f
		$dbg sed -i "`expr $linenr + 2` s/.*/#include <linux\/kernel\.h>/" $f
		sed -n "`expr $linenr + 2` s/.*/#include <linux\/kernel\.h>/p" $f
		$dbg sed -i "`expr $linenr + 3`d" $f
	fi
done

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-10-02  0:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-02  0:04 bash script to parse DPRINTKs etc Roel Kluin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.