On 11/11/19 9:38 AM, Daniel P. Berrangé wrote:
As part of an goal to eliminate Perl from libvirt build tools,
rewrite the group-qemu-caps.pl tool in Python.
This was a straight conversion, manually going line-by-line to
change the syntax from Perl to Python. Thus the overall structure
of the file and approach is the same.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
Makefile.am | 1 +
build-aux/syntax-check.mk | 3 +-
scripts/group-qemu-caps.py | 123 ++++++++++++++++++++++++++++++++++++
tests/group-qemu-caps.pl | 124 -------------------------------------
4 files changed, 126 insertions(+), 125 deletions(-)
create mode 100755 scripts/group-qemu-caps.py
delete mode 100755 tests/group-qemu-caps.pl
diff --git a/Makefile.am b/Makefile.am
index 6f6cead526..769cd4ce64 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -57,6 +57,7 @@ EXTRA_DIST = \
scripts/dtrace2systemtap.py \
scripts/genpolkit.py \
scripts/gensystemtap.py \
+ scripts/group-qemu-caps.py \
scripts/header-ifdef.py \
scripts/minimize-po.py \
scripts/mock-noinline.py \
diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk
index 7d54df182a..44639f499e 100644
--- a/build-aux/syntax-check.mk
+++ b/build-aux/syntax-check.mk
@@ -2176,7 +2176,8 @@ test-wrap-argv:
$(PYTHON) $(top_srcdir)/scripts/test-wrap-argv.py --check
group-qemu-caps:
- $(AM_V_GEN)$(PERL) $(top_srcdir)/tests/group-qemu-caps.pl --check $(top_srcdir)/
+ $(AM_V_GEN)$(RUNUTF8) $(PYTHON) $(top_srcdir)/scripts/group-qemu-caps.py \
+ --check --prefix $(top_srcdir)/
# List all syntax-check exemptions:
exclude_file_name_regexp--sc_avoid_strcase = ^tools/vsh\.h$$
diff --git a/scripts/group-qemu-caps.py b/scripts/group-qemu-caps.py
new file mode 100755
index 0000000000..3edaf5d09f
--- /dev/null
+++ b/scripts/group-qemu-caps.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+#
+# 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.
+
+from __future__ import print_function
+
+import argparse
+import re
+import subprocess
+import sys
+
+
+def regroup_caps(check, filename, start_regex, end_regex,
+ trailing_newline, counter_prefix):
+ step = 5
+
+ original = []
+ with open(filename, "r") as fh:
+ for line in fh:
+ original.append(line)
+
+ fixed = []
+ game_on = False
+ counter = 0
+ for line in original:
+ line = line.rstrip("\n")
+ if game_on:
+ if re.search(r'''.*/\* [0-9]+ \*/.*''', line):
+ continue
+ if re.search(r'''^\s*$''', line):
+ continue
+ if counter % step == 0:
+ if counter != 0:
+ fixed.append("\n")
+ fixed.append("%s/* %d */\n" % (counter_prefix, counter))
+
+ if not (line.find("/*") != -1 and line.find("*/") ==
-1):
+ # count two-line comments as one line
+ counter = counter + 1
+
+ if re.search(start_regex, line):
+ game_on = True
+ elif game_on and re.search(end_regex, line):
+ if (counter - 1) % step == 0:
+ fixed = fixed[:-1] # /* $counter */
+ if counter != 1:
+ fixed = fixed[:-1] # \n
+
+ if trailing_newline:
+ fixed.append("\n")
+
+ game_on = False
+
+ fixed.append(line + "\n")
+
+ if check:
+ orig = "".join(original)
+ new = "".join(fixed)
+ if new != orig:
+ diff = subprocess.Popen(["diff", "-u", filename,
"-"],
+ stdin=subprocess.PIPE)
+ diff.communicate(input=new.encode('utf-8'))
+
+ print("Incorrect line wrapping in $file",
+ file=sys.stderr)
+ print("Use test-wrap-argv.py to wrap test data files",
+ file=sys.stderr)
+ return False
+ else:
+ with open(filename, "w") as fh:
+ for line in fixed:
+ print(line, file=fh, end='')
+
+ return True
+
+
+parser = argparse.ArgumentParser(description='Test arg line wrapper')
test-wrap-arg reference here, should be group-qemu-caps
Otherwise it seems to work as expected
Tested-by: Cole Robinson <crobinso(a)redhat.com>