[libvirt] [PATCH v4 02/26] build-aux: rewrite augeas test generator in Python

Daniel P. Berrangé berrange at redhat.com
Wed Oct 9 11:37:17 UTC 2019


As part of an goal to eliminate Perl from libvirt build tools,
rewrite the augeas-gentest.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.

The use of $(AUG_GENTEST) as a dependancy in the makefiles needed
to be fixed, because this was assumed to be the filename of the
script, but is in fact a full shell command line.

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 Makefile.am                 |  2 +-
 build-aux/augeas-gentest.pl | 60 ---------------------------------
 scripts/augeas-gentest.py   | 67 +++++++++++++++++++++++++++++++++++++
 src/Makefile.am             |  4 +--
 4 files changed, 70 insertions(+), 63 deletions(-)
 delete mode 100755 build-aux/augeas-gentest.pl
 create mode 100755 scripts/augeas-gentest.py

diff --git a/Makefile.am b/Makefile.am
index 1a9f3af66d..9c16fa72ec 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -45,7 +45,7 @@ EXTRA_DIST = \
   run.in \
   README.md \
   AUTHORS.in \
-  build-aux/augeas-gentest.pl \
+  scripts/augeas-gentest.py \
   build-aux/check-spacing.pl \
   build-aux/header-ifdef.pl \
   build-aux/minimize-po.pl \
diff --git a/build-aux/augeas-gentest.pl b/build-aux/augeas-gentest.pl
deleted file mode 100755
index 65834b533b..0000000000
--- a/build-aux/augeas-gentest.pl
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env perl
-#
-# augeas-gentest.pl: Generate an augeas test file, from an
-#                    example config file + test file template
-#
-# 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/>.
-
-use strict;
-use warnings;
-
-die "syntax: $0 CONFIG TEMPLATE\n" unless @ARGV == 2;
-
-my $config = shift @ARGV;
-my $template = shift @ARGV;
-
-open CONFIG, "<", $config or die "cannot read $config: $!";
-open TEMPLATE, "<", $template or die "cannot read $template: $!";
-
-my $group = 0;
-while (<TEMPLATE>) {
-    if (/\@CONFIG\@/) {
-        my $group = 0;
-        print "  let conf = \"";
-        while (<CONFIG>) {
-            if (/^#\w/) {
-                s/^#//;
-                s/\"/\\\"/g;
-                print $_;
-                $group = /\[\s$/;
-            } elsif ($group) {
-                s/\"/\\\"/g;
-                if (/#\s*\]/) {
-                    $group = 0;
-                }
-                if (/^#/) {
-                    s/^#//;
-                    print $_;
-                }
-            }
-        }
-        print "\"\n";
-    } else {
-        print $_;
-    }
-}
-
-close TEMPLATE;
-close CONFIG;
diff --git a/scripts/augeas-gentest.py b/scripts/augeas-gentest.py
new file mode 100755
index 0000000000..60e12fb77e
--- /dev/null
+++ b/scripts/augeas-gentest.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2012-2019 Red Hat, Inc.
+#
+# augeas-gentest.py: Generate an augeas test file, from an
+#                    example config file + test file template
+#
+# 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/>.
+
+from __future__ import print_function
+
+import re
+import sys
+
+if len(sys.argv) != 3:
+    print("syntax: %s CONFIG TEMPLATE" % sys.argv[0], file=sys.stderr)
+    sys.exit(1)
+
+config = sys.argv[1]
+template = sys.argv[2]
+
+
+def expand_config(config):
+    with open(config) as fh:
+        group = False
+        for line in fh:
+            if re.search(r'''^#\w''', line) is not None:
+                line = line[1:]
+                line = line.replace('"', '\\"')
+                print(line, end='')
+                if re.search(r'''\[\s$''', line):
+                    group = True
+            elif group:
+                line = line.replace('"', '\\"')
+
+                if re.search(r'''#\s*\]''', line):
+                    group = False
+
+                if line[0] == '#':
+                    line = line[1:]
+                    print(line, end='')
+
+
+def expand_template(template, config):
+    with open(template) as fh:
+        for line in fh:
+            if '@CONFIG@' in line:
+                print('   let conf = "', end='')
+                expand_config(config)
+                print('"')
+            else:
+                print(line, end='')
+
+
+expand_template(template, config)
diff --git a/src/Makefile.am b/src/Makefile.am
index 6a25d030e6..0f6a61347c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -420,8 +420,8 @@ check-augeas: $(augeas_DATA) $(augeastest_DATA)
 	fi
 .PHONY: check-augeas
 
-AUG_GENTEST_SCRIPT = $(top_srcdir)/build-aux/augeas-gentest.pl
-AUG_GENTEST = $(PERL) $(AUG_GENTEST_SCRIPT)
+AUG_GENTEST_SCRIPT = $(top_srcdir)/scripts/augeas-gentest.py
+AUG_GENTEST = $(RUNUTF8) $(PYTHON) $(AUG_GENTEST_SCRIPT)
 
 
 #
-- 
2.21.0




More information about the libvir-list mailing list