aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2016-02-03 14:32:45 +0100
committerFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2016-02-03 16:02:43 +0000
commit5c81e26a72a4fcd0fc8a1948401e8d0fb88d2c5c (patch)
treee55ac116ccea15636d4866aa5b58c83193f4af05 /scripts
parentbb8270bab3b6f73e603e026bdb195853047e17ca (diff)
msvc2tasks.pl: Add support for clang-cl.exe and match errors, too.
Move regexp filtering into subroutine for clarity. Task-number: QTCREATORBUG-15641 Task-number: QTBUG-50804 Change-Id: I2b78e82f41b83c64053b350b241f3c14246eb417 Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/msvc2tasks.pl41
1 files changed, 32 insertions, 9 deletions
diff --git a/scripts/msvc2tasks.pl b/scripts/msvc2tasks.pl
index 909c48e2de..8c04888a90 100644
--- a/scripts/msvc2tasks.pl
+++ b/scripts/msvc2tasks.pl
@@ -27,7 +27,7 @@
=head1 NAME
-msvc2tasks.pl - Convert MSVC warnings into Qt Creator task files.
+msvc2tasks.pl - Convert MSVC/Clang-cl warnings and errors into Qt Creator task files.
=head1 SYNOPSIS
@@ -37,16 +37,39 @@ msvc2tasks.pl - Convert MSVC warnings into Qt Creator task files.
use strict;
-while (my $line = <STDIN> ) {
- chomp($line);
- # --- extract file name based matching:
+sub filterLine
+{
+ my ($line) = @_;
+
+ my ($fileName, $lineNumber, $category, $text);
+
+ # --- MSVC:
# c:\foo.cpp(395) : warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
- if ($line =~ /^([^(]+)\((\d+)\) ?: warning (C\d+:.*)$/) {
- my $fileName = $1;
- my $lineNumber = $2;
- my $text = $3;
+ if ($line =~ /^([^(]+)\((\d+)\) ?: (warning|error) (C\d+:.*)$/) {
+ $fileName = $1;
+ $lineNumber = $2;
+ $category = $3;
+ $text = $4;
+ # --- Clang-cl:
+ # ..\gui\text\qfontengine_ft.cpp(1743,5) : warning: variable 'bytesPerLine' is used uninitialized whenever switch default is taken [-Wsometimes-uninitialized]
+ } elsif ($line =~ /^([^(]+)\((\d+),\d+\) ?: +(warning|error):\s+(.*)$/) {
+ $fileName = $1;
+ $lineNumber = $2;
+ $category = $3;
+ $text = $4;
+ }
+
+ if (defined $fileName) {
$fileName =~ s|\\|/|g;
$text =~ s|\\|/|g; # Fix file names mentioned in text since tasks file have backslash-escaping.
- print $fileName, "\t", $lineNumber, "\twarn\t", $text,"\n";
+ $category = $category eq 'warning' ? 'warn' : 'err';
}
+
+ return ($fileName, $lineNumber, $category, $text);
+}
+
+while (my $line = <STDIN> ) {
+ chomp($line);
+ my ($fileName, $lineNumber, $category, $text) = filterLine($line);
+ print $fileName, "\t", $lineNumber, "\t", $category, "\t", $text,"\n" if defined $text;
}