You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesdk/scripts/kDebug2kdDebug.sh

155 lines
4.4 KiB

## 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