qemu/scripts/tap-merge.pl
<<
>>
Prefs
   1#! /usr/bin/env perl
   2# Copyright (C) 2018 Red Hat, Inc.
   3#
   4# Author: Paolo Bonzini <pbonzini@redhat.com>
   5#
   6# This program is free software; you can redistribute it and/or modify
   7# it under the terms of the GNU General Public License as published by
   8# the Free Software Foundation; either version 2, or (at your option)
   9# any later version.
  10#
  11# This program is distributed in the hope that it will be useful,
  12# but WITHOUT ANY WARRANTY; without even the implied warranty of
  13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14# GNU General Public License for more details.
  15#
  16# You should have received a copy of the GNU General Public License
  17# along with this program.  If not, see <https://www.gnu.org/licenses/>.
  18
  19# ---------------------------------- #
  20#  Imports, static data, and setup.  #
  21# ---------------------------------- #
  22
  23use warnings FATAL => 'all';
  24use strict;
  25use Getopt::Long ();
  26use TAP::Parser;
  27
  28my $ME = "tap-merge.pl";
  29my $VERSION = "2018-11-30";
  30
  31my $HELP = "$ME: merge multiple TAP inputs from stdin.";
  32
  33use constant DIAG_STRING => "#";
  34
  35# ----------------- #
  36#  Option parsing.  #
  37# ----------------- #
  38
  39Getopt::Long::GetOptions
  40  (
  41    'help' => sub { print $HELP; exit 0; },
  42    'version' => sub { print "$ME $VERSION\n"; exit 0; },
  43  );
  44
  45# -------------- #
  46#  Subroutines.  #
  47# -------------- #
  48
  49sub main ()
  50{
  51  my $iterator = TAP::Parser::Iterator::Stream->new(\*STDIN);
  52  my $parser = TAP::Parser->new ({iterator => $iterator });
  53  my $testno = 0;     # Number of test results seen so far.
  54  my $bailed_out = 0; # Whether a "Bail out!" directive has been seen.
  55
  56  STDOUT->autoflush(1);
  57  while (defined (my $cur = $parser->next))
  58    {
  59      if ($cur->is_bailout)
  60        {
  61          $bailed_out = 1;
  62          print DIAG_STRING . " " . $cur->as_string . "\n";
  63          next;
  64        }
  65      elsif ($cur->is_plan)
  66        {
  67          $bailed_out = 0;
  68          next;
  69        }
  70      elsif ($cur->is_test)
  71        {
  72          $bailed_out = 0 if $cur->number == 1;
  73          $testno++;
  74          $cur = TAP::Parser::Result::Test->new({
  75                          ok => $cur->ok,
  76                          test_num => $testno,
  77                          directive => $cur->directive,
  78                          explanation => $cur->explanation,
  79                          description => $cur->description
  80                  });
  81        }
  82      elsif ($cur->is_version)
  83        {
  84          next if $testno > 0;
  85        }
  86      print $cur->as_string . "\n" unless $bailed_out;
  87    }
  88  print "1..$testno\n";
  89}
  90
  91# ----------- #
  92#  Main code. #
  93# ----------- #
  94
  95main;
  96
  97# Local Variables:
  98# perl-indent-level: 2
  99# perl-continued-statement-offset: 2
 100# perl-continued-brace-offset: 0
 101# perl-brace-offset: 0
 102# perl-brace-imaginary-offset: 0
 103# perl-label-offset: -2
 104# cperl-indent-level: 2
 105# cperl-brace-offset: 0
 106# cperl-continued-brace-offset: 0
 107# cperl-label-offset: -2
 108# cperl-extra-newline-before-brace: t
 109# cperl-merge-trailing-else: nil
 110# cperl-continued-statement-offset: 2
 111# End:
 112