mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-22 00:06:12 -05:00
* Use portable /usr/bin/env/{perl,python} instead of /usr/bin/{perl,python} * fix perl;add bash * Fix indentation using modified scripts * Revert "fix perl;add bash" This reverts commit be8b9113c25f7c2fb9c8c9bad556fbca2f0c0ba2. * python3 everywhere * more bash * rebase change perl * Linux perl; missing from last PR * fix doxygen_space * Use portable /usr/bin/env/{perl,python} instead of /usr/bin/{perl,python} * fix perl;add bash * Fix indentation using modified scripts * Revert "fix perl;add bash" This reverts commit be8b9113c25f7c2fb9c8c9bad556fbca2f0c0ba2. * python3 everywhere * more bash * rebase change perl * fix doxygen_space
239 lines
5.2 KiB
Perl
239 lines
5.2 KiB
Perl
#!/usr/bin/env perl
|
|
###########################################################################
|
|
# qgsloggermig.pl
|
|
# ---------------------
|
|
# begin : August 2008
|
|
# copyright : (C) 2008 by Juergen E. Fischer
|
|
# email : jef at norbit dot de
|
|
###########################################################################
|
|
# #
|
|
# This program is free software; you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation; either version 2 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
###########################################################################
|
|
|
|
# use QgsDebugMsg instead of iostream for debugging output
|
|
|
|
# EXAMPLE:
|
|
#
|
|
# #include <iostream>
|
|
#
|
|
# #ifdef QGISDEBUG
|
|
# std::cout << "A " << a << " B " << b << " A " << a << std::endl;
|
|
# // std::cout << "commented out" << std::endl;
|
|
# #endif
|
|
#
|
|
# becomes
|
|
#
|
|
# #include "qgslogger.h"
|
|
#
|
|
# QgsDebugMsg(QString("A %1 B %2 A %1").arg(a).arg(b));
|
|
# QgsDebugMsgLevel("commented out", 3);
|
|
#
|
|
#
|
|
# append // OK to keep it as it is.
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
for my $file (@ARGV) {
|
|
my $output;
|
|
my $F;
|
|
my @file;
|
|
|
|
open $F, $file;
|
|
|
|
my $externc = 0;
|
|
my $ifdef = 0;
|
|
my $loggerseen=0;
|
|
my $lastinclude=0;
|
|
my $modified = 0;
|
|
my $i=0;
|
|
my $le;
|
|
while(<$F>) {
|
|
$i++;
|
|
|
|
($le) = /([\r\n]+)$/ unless defined $le;
|
|
|
|
if(/\s*#\s*include\s*<iostream>/) {
|
|
next;
|
|
}
|
|
|
|
if(/\s*#\s*include\s*qgslogger\.h/) {
|
|
$loggerseen=1;
|
|
}
|
|
|
|
$externc=1 if /extern\s+\"C\"\s*{/;
|
|
$externc=0 if $externc && /^\s*}\s*$/;
|
|
$ifdef++ if /^\s*#\s*if/;
|
|
$ifdef-- if /^\s*#\s*endif/;
|
|
|
|
if($externc==0 && $ifdef==0 && /\s*#\s*include/) {
|
|
$lastinclude = scalar(@file)+1;
|
|
}
|
|
|
|
if(/(std::)?(cout|cerr)/) {
|
|
die "nested? [$file]" if defined $output;
|
|
$output = "";
|
|
}
|
|
|
|
if(defined $output) {
|
|
$output .= $_;
|
|
if(/;/) {
|
|
($le) = ($output =~ /([\r\n]+)$/);
|
|
$output =~ s/$le/\n/g;
|
|
|
|
my $level = 0;
|
|
if($output =~ /^\s*\/\/\s*((std::)?(cout|cerr))/) {
|
|
$level = 3;
|
|
$output =~ s/^\s*\/\///;
|
|
$output =~ s/\n\s*\/\//\n /g;
|
|
}
|
|
|
|
my @arr = split /\s*<<\s*/, $output;
|
|
my ($indent) = ($arr[0] =~ /^(\s*)/);
|
|
$arr[0] =~ s/^\s+//;
|
|
|
|
if($arr[0] =~ /^\/\// || $arr[-1] =~ /\/\/ OK$/) {
|
|
# commented out
|
|
push @file, "$output\n";
|
|
undef $output;
|
|
next;
|
|
}
|
|
|
|
unless( $arr[0] =~ /^(std::)?(cout|cerr)$/ ) {
|
|
die "std::(cerr|cout) expected [$file]: |" . $arr[0] . "|";
|
|
}
|
|
|
|
$arr[-1] =~ s/\s*;\s*$/;/;
|
|
|
|
if( $arr[-1] =~ /\\n";$/) {
|
|
$arr[-1] =~ s/\\n";/"/;
|
|
push @arr, "std::endl;";
|
|
} elsif( $arr[-1] =~ /'\\n';$/) {
|
|
$arr[-1] = "std::endl;";
|
|
}
|
|
|
|
if( $arr[-1] =~ /^(std::)?flush;$/ &&
|
|
$arr[-2] =~ /^(std::)?endl$/ ) {
|
|
pop @arr;
|
|
pop @arr;
|
|
push @arr, "std::endl;";
|
|
}
|
|
|
|
unless( $arr[-1] =~ /^(std::)?endl;$/ ) {
|
|
die "std::endl; expected [$file]: |" . $arr[-1] . "|";
|
|
}
|
|
|
|
shift @arr;
|
|
pop @arr;
|
|
|
|
my $str;
|
|
my %args;
|
|
my @args;
|
|
my $fmt = "";
|
|
foreach(@arr) {
|
|
if(/^"(.*)"$/) {
|
|
$fmt .= $1;
|
|
} else {
|
|
if(/^QString::number\s*\(\s*([^,]*)\s*\)$/) {
|
|
$_ = $1;
|
|
}
|
|
|
|
s/\.toLocal8Bit\(\).data\(\)$//;
|
|
s/\.toUtf8\(\).data\(\)$//;
|
|
s/\.ascii\(\)$//;
|
|
|
|
if(exists $args{$_}) {
|
|
my $n = $args{$_};
|
|
$fmt .= "%$n";
|
|
} else {
|
|
push @args, $_;
|
|
$args{$_} = scalar(@args);
|
|
$fmt .= "%" . scalar(@args);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(@args>0) {
|
|
if(@args==1 && $fmt eq "%1") {
|
|
$str = $args[0];
|
|
} else {
|
|
$str = "QString(\"$fmt\").arg(" . join(").arg(", @args) . ")";
|
|
}
|
|
} else {
|
|
$str = "\"$fmt\"";
|
|
}
|
|
|
|
if($level == 3) {
|
|
# push @file, $indent . "QgsDebugMsgLevel($str, 3);$le";
|
|
push @file, $indent . "// QgsDebugMsg($str);$le";
|
|
} else {
|
|
push @file, $indent . "QgsDebugMsg($str);$le";
|
|
}
|
|
|
|
$modified=1;
|
|
|
|
undef $output;
|
|
}
|
|
} else {
|
|
push @file, $_;
|
|
}
|
|
}
|
|
close $F;
|
|
|
|
|
|
if($modified) {
|
|
if(!$loggerseen) {
|
|
die "no includes? [$file]" unless defined $lastinclude;
|
|
splice @file, $lastinclude, 0, "#include \"qgslogger.h\"$le";
|
|
}
|
|
|
|
#print "MODIFIED: $file\n";
|
|
|
|
my @filtered;
|
|
my @output;
|
|
my $ifdef_seen=0;
|
|
|
|
foreach(@file) {
|
|
if($ifdef_seen) {
|
|
if(/^\s*#\s*if/) {
|
|
die "nested #if? [$file]";
|
|
} elsif(/^\s*QgsDebugMsg/) {
|
|
push @output, $_;
|
|
} elsif(/^\s*#\s*endif/) {
|
|
push @filtered, $_ foreach @output;
|
|
undef @output;
|
|
$ifdef_seen=0;
|
|
} else {
|
|
push @filtered, "#ifdef QGISDEBUG$le";
|
|
push @filtered, $_ foreach @output;
|
|
push @filtered, $_;
|
|
undef @output;
|
|
$ifdef_seen=0;
|
|
}
|
|
} elsif(/^\s*#\s*ifdef\s+QGISDEBUG\s*$/) {
|
|
die "output pending" if @output;
|
|
$ifdef_seen=1;
|
|
} else {
|
|
push @filtered, $_;
|
|
}
|
|
}
|
|
|
|
die "output pending" if @output;
|
|
|
|
link $file, "$file.iostream" unless -f "$file.iostream";
|
|
unlink $file;
|
|
|
|
open $F, ">$file";
|
|
foreach (@filtered) {
|
|
print $F $_;
|
|
}
|
|
close $F;
|
|
}
|
|
}
|
|
|
|
# vim: set ts=8 noet:
|