Test::Parser::KernelBuild - Perl module to parse output from Linux kernel builds.


Test-Parser documentation Contained in the Test-Parser distribution.

Index


Code Index:

NAME

Top

Test::Parser::KernelBuild - Perl module to parse output from Linux kernel builds.

SYNOPSIS

Top

    use Test::Parser::KernelBuild;

    my $parser = new Test::Parser::KernelBuild;
    $parser->parse($text);
    printf("Num Errors:    %8d\n", $parser->num_errors());
    printf("Num Warnings:  %8d\n", $parser->num_warnings());

Additional information is available from the subroutines listed below and from the Test::Parser baseclass.

DESCRIPTION

Top

This module provides a way to extract information out of kernel builds, suitable for use in kernel test harnesses, similar to if you did `cat build.log | grep 'errors:' | wc -l`, except that this module also checks if the system is in the 'make config' or 'make bzImage' stages and skips any false positives that might be encountered there.

FUNCTIONS

Top

Also see Test::Parser for functions available from the base class.

new()

Creates a new Test::Parser::KernelBuild instance. Also calls the Test::Parser base class' new() routine. Takes no arguments.

make_targets()

Returns a list of the different targets that were built by make.

config_file()

Returns the name of the kernel .config file used, if any

states()

Returns a list of the various steps in the build process (e.g. config, make, modules_install, etc.)

Override of Test::Parser's default parse_line() routine to make it able to parse kernel build logs.

config_file()

Returns the config file name, if one is indicated in the build log output. The parser expects this appears in a line of the form: "^Using default config file '(.+)'$"

num_states()

The number of states the parser noticed

states()

Returns a reference to an array of the different build states (make config, make, make modules_install, etc.) found in the build.

num_make_targets()

The number of make targets seen during the build stage.

make_targets()

Returns a hash reference

              warnings
              errors
              states
              make_targets

AUTHOR

Top

Bryce Harrington <bryce@osdl.org>

COPYRIGHT

Top

SEE ALSO

Top

Test::Parser


Test-Parser documentation Contained in the Test-Parser distribution.
package Test::Parser::KernelBuild;

use strict;
use warnings;
use Test::Parser;

@Test::Parser::KernelBuild::ISA = qw(Test::Parser);
use base 'Test::Parser';

use fields qw(
              _state

              states
              make_targets
              config_file
              );

use vars qw( %FIELDS $AUTOLOAD $VERSION );
our $VERSION = '1.7';

sub new {
    my $class = shift;
    my Test::Parser::KernelBuild $self = fields::new($class);
    $self->SUPER::new();

    return $self;
}

sub make_targets {
    my $self = shift;
    return $self->{make_targets};
}

sub config_file {
    my $self = shift;
    return $self->{config_file};
}

sub states {
    my $self = shift;
    return $self->{states};
}

sub parse_line {
    my $self = shift;
    my $line = shift;

    # Determine if we're changing states...
    if ($line =~ /^make .*?config/) {
        $self->{_state} = 'config';
        push @{$self->{states}}, $self->{_state};
    }

    elsif ($line =~ /^make bzImage/) {
        $self->{_state} = 'image';
        push @{$self->{states}}, $self->{_state};
    }

    elsif ($line =~ /^make /) {
        $self->{_state} = 'build';
        push @{$self->{states}}, $self->{_state};
    }

    # Get the config file name, if one is used
    if ($line =~ /^Using default config file '(.+)'$/ && ! defined($self->{config_file})) {
        $self->{config_file} = $1;
    }

    # Conduct the output parsing
    elsif ($self->{_state} eq 'build') {
        # Gets CC, LD, CHK, etc.
        if ($line =~ /^\s\s([A-Z]+) /) {  
            $self->{make_targets}->{$1}++;
        }
        
        elsif ($line =~ /error\:/) {
            push @{$self->{errors}}, $_;
        } 
        
        elsif ($line =~ /warning\:/) {
            push @{$self->{warnings}}, $_;
        }
    }

    return 1;
}

1;
__END__