diff options
Diffstat (limited to 'scripts/kDebug2kdDebug.sh')
-rwxr-xr-x | scripts/kDebug2kdDebug.sh | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/scripts/kDebug2kdDebug.sh b/scripts/kDebug2kdDebug.sh new file mode 100755 index 00000000..a238845e --- /dev/null +++ b/scripts/kDebug2kdDebug.sh @@ -0,0 +1,154 @@ +## kDebug2kdDebug.sh +## Script to port from qDebug, kdebug, kDebugInfo etc. to kdDebug/kdWarning/... +## Example: +## kDebugInfo( [area,] "format %a - %b", arga, argb ) +## becomes +## kdDebug( [area] ) << "format " << arga << " - " << argb << endl; +## +## Written by David Faure <faure@kde.org>, licensed under GPL. +## 17/03/2000 + +find $1 -name '*[cCph]' -type f | xargs grep -H -i 'ebug(\|warning(' \ +| grep -v 'kdDebug\|kdWarning' \ +| grep -v include \ +| sed -e "s#:.*##" \ +| sort -u \ +| while read file; do +echo -n "working on $file " +cp $file $file.tmp +perl -w -i -e \ +' +$inkdebug=0; +while (<>) +{ + if ( $inkdebug ) + { + chop; + #print "Reading line : " . $_ . "\n"; + $statement .= $_; + } + elsif ( /kdebug\s*\(/ || /kDebug[a-zA-Z]*\s*\(/ || /qDebug\s*/ || /qWarning\s*/ ) + { + # Very old kdebug stuff :) + s/kdebug\s*\(\s*KDEBUG_INFO,/kDebugInfo\(/; + s/kdebug\s*\(\s*0,/kDebugInfo\(/; + s/kdebug\s*\(\s*KDEBUG_WARN,/kDebugWarning\(/; + s/kdebug\s*\(\s*KDEBUG_ERROR,/kDebugError\(/; + s/kdebug\s*\(\s*KDEBUG_FATAL,/kDebugFatal\(/; + + $inkdebug = 1; + chop; + $statement = $_; + } + + if ( $inkdebug ) + { + if ( /\)\s*;/ ) # look for ); + { + $inkdebug = 0; + $_ = $statement; + ## Ok, now we have the full line + ## 1 - Parse + if (s/(^.*kDebug[a-zA-Z]*)\s*\(\s*//) { + $line=$1; # has the indentation, //, and the kDebug* name + } elsif (s/(^.*qDebug)\s*\(\s*// || s/(^.*qWarning)\s*\(\s*//) { + $line=$1; + } else { die "parse error on kDebug/qDebug/qWarning..."; } + $line=$1; # has the indentation, //, and the kDebug* name + $line =~ s/kDebugInfo/kdDebug/; + $line =~ s/kDebugArea/kdDebug/; + $line =~ s/qDebug/kdDebug/; + $line =~ s/qWarning/kdWarning/; + $line =~ s/kDebugWarning/kdWarning/; + $line =~ s/kDebugError/kdError/; + $line =~ s/kDebugFatal/kdFatal/; + $area = ""; + if ( s/^([0-9]+)\s*,\s*//) # There is an area + { + $area = $1; # Store it + $line .= "(" . $area . ")"; + } elsif ( s/^(KBABEL[^,]*)\s*,\s*//) + { # Example of support for #defined area (here KBABEL.*) + $area = $1; # Store it + $line .= "(" . $area . ")"; + } else + { $line .= "()"; } # You can set an area here if converting qDebugs + + $arguments = ""; # for final test + $commented = 0; + if ( !s/^\"([^\"]*)\"// ) # There is no format + { + s/\s*\)\s*;\s*$//; + $commented = s/\s*\)\s*;\s*\*\/$//; # terminating with */ + $line = $line . " << " . $_ ; + } else + { + $format = $1; + # If we stopped on a \" we need to keep adding to format + while ( $format =~ m/\\$/ ) + { s/^([^\"]*)\"// || die "problem"; $format .= "\"" . $1; } + s/\s*\)\s*;\s*$/,/; # replace trailing junk with , for what follows + $commented = s/\s*\)\s*;\s*\*\/$/,/; # terminating with */ + $arguments = $_; + + ## 2 - Look for %x + @stringbits = split( "(%[0-9]*[a-z])", $format ); + foreach ( @stringbits ) + { + #print $_ . "\n"; + if ( /(%[0-9]*[a-z])/ ) # This item is a format + { + ## 3 - Find argument + # kludge for QString(a,b) constructions + $arguments =~ s/(QString\s*\([^,]+,[^,]+\))/QStrKLUDGE/; + $kludge = $1; + $arguments =~ s/\s*([^,]+)\s*,//; + # Remove trailing .ascii() and latin1() + $arg = $1; + $arg =~ s/QStrKLUDGE/$kludge/; ## restore original arg + $arg =~ s/\.ascii\(\)$//; # remove + $arg =~ s/\.latin1\(\)$//; # remove + $arg =~ s/debugString\(([^\)]+)\)/$1/; # remove + # If "a ? b : c" then add parenthesis + if ( $arg =~ m/.+\s*\?\s*.+\s*:\s*.+/ ) { + $arg = "(" . $arg . ")"; + } + $line = $line . " << " . $arg; + } else # This item is some litteral + { + $line = $line . " << \"" . $_ . "\"" if ($_); + } + } + + } + $arguments =~ s/,$//; # Remove trailing slash before next check + if ( $arguments ) { + print STDERR "Non-processed (Information lost! Check the file!) : " . $arguments . "\n"; + } + $line = $line . " << endl;\n"; + if ( $commented ) { $line .= "\*/"; } + print $line; + } + } + else + { + # Normal line + print; + } +} +if ( $inkdebug ) +{ + print STDERR "Warning, unterminated kDebug call !! Check the file !\n"; + print $arguments; +} +' $file.tmp +if cmp -s $file $file.tmp > /dev/null 2>&1 ; then + echo "unchanged" + rm $file.tmp +else + echo "patching" + mv $file.tmp $file +fi + +done + |