mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-11-04 00:04:25 -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:
 |