2014-01-20 11:08:35 +01:00
#!/usr/bin/perl -w
2016-01-15 14:52:30 +01:00
############################################################################
#
# Copyright (C) 2016 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
#
# Commercial License Usage
# Licensees holding valid commercial Qt licenses may use this file in
# accordance with the commercial license agreement provided with the
# Software or, alternatively, in accordance with the terms contained in
# a written agreement between you and The Qt Company. For licensing terms
# and conditions see https://www.qt.io/terms-conditions. For further
# information use the contact form at https://www.qt.io/contact-us.
#
# GNU General Public License Usage
# Alternatively, this file may be used under the terms of the GNU
# General Public License version 3 as published by the Free Software
# Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
# included in the packaging of this file. Please review the following
# information to ensure the GNU General Public License requirements will
# be met: https://www.gnu.org/licenses/gpl-3.0.html.
#
############################################################################
2014-01-20 11:08:35 +01:00
= head1 NAME
2016-02-03 14:32:45 +01:00
msvc2tasks . pl - Convert MSVC / Clang - cl warnings and errors into Qt Creator task files .
2014-01-20 11:08:35 +01:00
= head1 SYNOPSIS
msvc2tasks . pl < logfile > taskfile
= cut
use strict ;
2016-02-03 14:32:45 +01:00
sub filterLine
{
my ( $ line ) = @ _ ;
my ( $ fileName , $ lineNumber , $ category , $ text ) ;
# --- MSVC:
2014-01-20 11:08:35 +01:00
# c:\foo.cpp(395) : warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
2016-02-03 14:32:45 +01:00
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 ) {
2014-01-20 11:08:35 +01:00
$ fileName =~ s | \ \ | / | g ;
$ text =~ s | \ \ | / | g ; # Fix file names mentioned in text since tasks file have backslash-escaping.
2016-02-03 14:32:45 +01:00
$ category = $ category eq 'warning' ? 'warn' : 'err' ;
2014-01-20 11:08:35 +01:00
}
2016-02-03 14:32:45 +01:00
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 ;
2014-01-20 11:08:35 +01:00
}