mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 17:34:18 +03:00
syntax-check: check QEMU caps grouping
Introduce a perl script that is able to regroup both the QEMU_CAPS constants and the capability strings. Check correct grouping as a part of syntax check. For in-place regrouping after a rebase, just run: tests/group-qemu-caps.pl without any parameters. Signed-off-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
a762701791
commit
8fa4131814
5
cfg.mk
5
cfg.mk
@ -1098,7 +1098,7 @@ _autogen_error:
|
||||
|
||||
ifneq ($(_gl-Makefile),)
|
||||
syntax-check: spacing-check test-wrap-argv \
|
||||
prohibit-duplicate-header mock-noinline
|
||||
prohibit-duplicate-header mock-noinline group-qemu-caps
|
||||
endif
|
||||
|
||||
# Don't include duplicate header in the source (either *.c or *.h)
|
||||
@ -1119,6 +1119,9 @@ test-wrap-argv:
|
||||
$(AM_V_GEN)files=`$(VC_LIST) | grep -E '\.(ldargs|args)'`; \
|
||||
$(PERL) $(top_srcdir)/tests/test-wrap-argv.pl --check $$files
|
||||
|
||||
group-qemu-caps:
|
||||
$(PERL) $(top_srcdir)/tests/group-qemu-caps.pl --check
|
||||
|
||||
# sc_po_check can fail if generated files are not built first
|
||||
sc_po_check: \
|
||||
$(srcdir)/src/remote/remote_daemon_dispatch_stubs.h \
|
||||
|
@ -46,7 +46,7 @@
|
||||
* longer be used in code. Periodically we can then purge all the
|
||||
* X_ flags and re-group what's left.
|
||||
*/
|
||||
typedef enum {
|
||||
typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||||
/* 0 */
|
||||
X_QEMU_CAPS_KQEMU, /* Whether KQEMU is compiled in */
|
||||
X_QEMU_CAPS_VNC_COLON, /* VNC takes or address + display */
|
||||
|
118
tests/group-qemu-caps.pl
Executable file
118
tests/group-qemu-caps.pl
Executable file
@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#
|
||||
# Regroup array values into smaller groups separated by numbered comments.
|
||||
#
|
||||
# If --check is the first parameter, the script will return
|
||||
# a non-zero value if a file is not grouped correctly.
|
||||
# Otherwise the files are regrouped in place.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $check = 0;
|
||||
|
||||
if (defined $ARGV[0] && $ARGV[0] eq "--check") {
|
||||
$check = 1;
|
||||
shift @ARGV;
|
||||
}
|
||||
|
||||
my $ret = 0;
|
||||
if (®roup_caps('src/qemu/qemu_capabilities.c',
|
||||
'^VIR_ENUM_IMPL\(virQEMUCaps,',
|
||||
'\);',
|
||||
0,
|
||||
" ") < 0) {
|
||||
$ret = 1;
|
||||
}
|
||||
if (®roup_caps('src/qemu/qemu_capabilities.h',
|
||||
'virQEMUCapsFlags grouping marker',
|
||||
'QEMU_CAPS_LAST \/\* this must',
|
||||
1,
|
||||
" ") < 0) {
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
exit $ret;
|
||||
|
||||
sub regroup_caps {
|
||||
my $filename = shift;
|
||||
my $start_regex = shift;
|
||||
my $end_regex = shift;
|
||||
my $trailing_newline = shift;
|
||||
my $counter_prefix = shift;
|
||||
my $step = 5;
|
||||
|
||||
open FILE, '<', $filename or die "cannot open $filename: $!";
|
||||
my @original = <FILE>;
|
||||
close FILE;
|
||||
|
||||
my @fixed;
|
||||
my $game_on = 0;
|
||||
my $counter = 0;
|
||||
foreach (@original) {
|
||||
if ($game_on) {
|
||||
next if ($_ =~ '/\* [0-9]+ \*/');
|
||||
next if (/^\s+$/);
|
||||
if ($counter % $step == 0) {
|
||||
if ($counter != 0) {
|
||||
push @fixed, "\n";
|
||||
}
|
||||
push @fixed, "$counter_prefix/* $counter */\n";
|
||||
}
|
||||
if (!($_ =~ '/\*' && !($_ =~ '\*/'))) {
|
||||
# count two-line comments as one line
|
||||
$counter++;
|
||||
}
|
||||
}
|
||||
if (/$start_regex/) {
|
||||
$game_on = 1;
|
||||
} elsif ($game_on && $_ =~ /$end_regex/) {
|
||||
if (($counter -1) % $step == 0) {
|
||||
pop @fixed; # /* $counter */
|
||||
if ($counter != 1) {
|
||||
pop @fixed; # \n
|
||||
}
|
||||
}
|
||||
if ($trailing_newline) {
|
||||
push @fixed, "\n";
|
||||
}
|
||||
$game_on = 0;
|
||||
}
|
||||
push @fixed, $_;
|
||||
}
|
||||
|
||||
if ($check) {
|
||||
my $nl = join('', @fixed);
|
||||
my $ol = join('', @original);
|
||||
unless ($nl eq $ol) {
|
||||
open DIFF, "| diff -u $filename -" or die "cannot run diff: $!";
|
||||
print DIFF $nl;
|
||||
close DIFF;
|
||||
|
||||
print STDERR "Incorrect array grouping in $filename\n";
|
||||
print STDERR "Use group-qemu-caps.pl to group long array members\n";
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
open FILE, '>', $filename or die "cannot open $filename: $!";
|
||||
foreach my $line (@fixed) {
|
||||
print FILE $line;
|
||||
}
|
||||
close FILE;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user