NAME
Perl5::Build::Warnings - Parse make output for build-time warnings
SYNOPSIS
use Perl5::Build::Warnings;
my $self = Perl5::Build::Warnings->new( { file => '/path/to/make.log' } );
my $hashref = $self->get_warnings_groups;
my $arrayref = $self->get_warnings;
$self->report_warnings_groups;
$arrayref = $self->get_warnings_for_group('Wunused-variable');
$arrayref = $self->get_warnings_for_source('op.c');
DESCRIPTION
Perl5::Build::Warnings is a module for use in studying build-time warnings emitted by make when building the Perl 5 core distribution from source code.
Prerequisites
CPAN module Capture::Tiny is used in this library's test suite, but not in the module itself. There are currently no other prerequisites not found in the Perl 5 core distribution.
Assumptions
Logging of make Output
The module assumes that the user has logged the output of make (or make test_prep -- but not make test -- or Windows equivalents) to a plain-text file. Something like:
make test_prep 2>&1 > /path/to/make.log
The build log may be gzipped-compressed, e.g.:
make test_prep 2>&1 | gzip -c > /path/to/make.log.gz
Format for Build-Time Warnings
The module assumes that within such a logfile, warnings are recorded in this format:
op.c:5468:34: warning: argument ‘o’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
That is,
<filename>:<line_number>:<character_number>: warning: <warning_description> [-<Wwarning_class>]
Note that the first field recorded, filename
may be either the basename of a file in the top-level of the source code or a relative path to a file beneath the top-level.
Note further that the last field recorded, the class of warning, starts with an open bracket ([
), followed by a hyphen and an upper-case 'W' (-W
), followed by the warning class, followed by a close bracket (]
). In this module we will ignore the open and close brackets and the hyphen, but we will capture and report the upper-case 'W'. Hence, whereas the log will record
[-Wclobbered]
... this module will store and report that information as:
Wclobbered
This is done in part because we may wish to use this data on the command-line and the hyphen is likely to be significant to the shell.
METHODS
new()
Purpose
Perl5::Build::Warnings constructor.
Arguments
$file = "./t/data/make.g++-8-list-util-fallthrough.output.txt"; $self = Perl5::Build::Warnings->new( { file => $file } );
Single hash reference with one required element,
file
, whose value is a path to a file holding a log of make's output.Return Value
Perl5::Build::Warnings object.
get_warnings_groups()
Purpose
Identify the types of build-time warnings found in the make log and the number of each such type.
Arguments
$hashref = $self->get_warnings_groups();
None.
Return Value
Reference to a hash whose elements are keyed on warnings classes (e.g.,
Wclobbered
). The value of each element is the number of times such class appeared in the file.
report_warnings_groups()
Purpose
Pretty-print to STDOUT the information returned by
get_warnings_groups
.Arguments
$self->report_warnings_groups;
None.
Return Value
Implicitly returns a Perl-true value.
Comment
The information reported will appear as below (2 leading whitespaces), but may change in the future.
Wcast-function-type 6 Wclobbered 2 Wformat-overflow= 2 Wignored-qualifiers 4 Wimplicit-fallthrough= 32 Wmultistatement-macros 1 Wpragmas 3
get_warnings()
Purpose
Generate a list of all warnings.
Arguments
$arrayref = $self->get_warnings();
Return Value
Array reference, each element of which is a reference to a hash holding a parsing of the elements of an individual warning.
get_warnings_for_group()
Purpose
Get a list of all the warnings for one specified warnings group.
Arguments
$arrayref = $self->get_warnings_for_group("Wduplicate-decl-specifier");
String holding name of one group of warnings. Each such string must begin with an upper-case
W
. As mentioned above, we drop the leading hyphen to avoid confusing the shell.Return Value
Array reference, each element of which is a reference to a hash holding a parsing of the elements of an individual warning of the specified warnings group.
get_warnings_for_source()
Purpose
Get a list of all the warnings generated from one specified source file.
Arguments
$arrayref = $self->get_warnings_for_source('op.c');
String holding name of one source file. Note that there may be some ambiguity here. Use with caution.
Return Value
Array reference, each element of which is a reference to a hash holding a parsing of the elements of an individual warning of the specified warnings source.
BUGS
None reported so far. The author prefers patches filed at http://rt.cpan.org rather than pull requests at github.
AUTHOR
James E Keenan
CPAN ID: JKEENAN
jkeenan@cpan.org
http://thenceforward.net/perl/modules/Perl5-Build-Warnings/
COPYRIGHT
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
SEE ALSO
perl(1).