[Libguestfs] [PATCH 4/6] p2v: generate C about data authors from AUTHORS file

Pino Toscano ptoscano at redhat.com
Wed Jul 3 10:47:07 UTC 2019


Create a small Perl script to generate about-authors.c from the p2v
AUTHORS file at build time, instead of generating in the generator
at dist time.
---
 docs/C_SOURCE_FILES         |  1 -
 generator/authors.ml        | 37 -------------------------
 generator/authors.mli       |  1 -
 generator/main.ml           |  2 --
 p2v/Makefile.am             | 10 ++++---
 p2v/generate-p2v-authors.pl | 54 +++++++++++++++++++++++++++++++++++++
 6 files changed, 61 insertions(+), 44 deletions(-)
 create mode 100755 p2v/generate-p2v-authors.pl

diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES
index 20a38162c..c9a576c0c 100644
--- a/docs/C_SOURCE_FILES
+++ b/docs/C_SOURCE_FILES
@@ -355,7 +355,6 @@ ocaml/guestfs-c-actions.c
 ocaml/guestfs-c-errnos.c
 ocaml/guestfs-c.c
 ocaml/guestfs-c.h
-p2v/about-authors.c
 p2v/conversion.c
 p2v/cpuid.c
 p2v/gui-gtk2-compat.h
diff --git a/generator/authors.ml b/generator/authors.ml
index 14403c624..3c8ee1de3 100644
--- a/generator/authors.ml
+++ b/generator/authors.ml
@@ -135,43 +135,6 @@ let authors = [
 let generate_authors () =
   List.iter (fun (name, _, _) -> pr "%s\n" name) authors
 
-let generate_p2v_about_authors_c () =
-  generate_header CStyle GPLv2plus;
-
-  pr "#include <config.h>\n";
-  pr "\n";
-  pr "#include \"p2v.h\"\n";
-  pr "\n";
-
-  (* Split up the list according to how we want to add people to
-   * credit sections.  However don't assign anyone to more than a
-   * single category.  Be aware that with Gtk < 3.4, only the
-   * "authors" and "documenters" categories are actually displayed.
-   *)
-  let authors, qa, documenters, others =
-    let rec loop (authors, qa, documenters, others) = function
-      | [] -> authors, qa, documenters, others
-      | ((_, _, roles) as a) :: rest ->
-         if List.mem V2V_and_P2V roles then
-           loop (a :: authors, qa, documenters, others) rest
-         else if List.mem Quality_assurance roles then
-           loop (authors, a :: qa, documenters, others) rest
-         else if List.mem Documentation roles then
-           loop (authors, qa, a :: documenters, others) rest
-         else
-           loop (authors, qa, documenters, a :: others) rest
-    in
-    let authors, qa, documenters, others = loop ([],[],[],[]) authors in
-    List.rev authors, List.rev qa, List.rev documenters, List.rev others in
-
-  let fn (name, _, _) = pr "  \"%s\",\n" name in
-
-  pr "/* Authors involved with virt-v2v and virt-p2v directly. */\n";
-  pr "const char *authors[] = {\n";
-  List.iter fn authors;
-  pr "  NULL\n";
-  pr "};\n"
-
 let generate_p2v_authors () =
   let p2v_authors =
     List.filter_map (
diff --git a/generator/authors.mli b/generator/authors.mli
index f63ff3264..834bcb811 100644
--- a/generator/authors.mli
+++ b/generator/authors.mli
@@ -23,5 +23,4 @@ val authors : (string * string list * role list) list
 (** List of authors, their aliases, and their roles. *)
 
 val generate_authors : unit -> unit
-val generate_p2v_about_authors_c : unit -> unit
 val generate_p2v_authors : unit -> unit
diff --git a/generator/main.ml b/generator/main.ml
index 5e6f067bb..acacfb9e4 100644
--- a/generator/main.ml
+++ b/generator/main.ml
@@ -75,8 +75,6 @@ Run it from the top source directory using the command
 
   output_to "AUTHORS"
             Authors.generate_authors;
-  output_to "p2v/about-authors.c"
-            Authors.generate_p2v_about_authors_c;
   output_to "p2v/AUTHORS"
             Authors.generate_p2v_authors;
 
diff --git a/p2v/Makefile.am b/p2v/Makefile.am
index 689722ad8..20e00fcc0 100644
--- a/p2v/Makefile.am
+++ b/p2v/Makefile.am
@@ -18,7 +18,6 @@
 include $(top_srcdir)/subdir-rules.mk
 
 generator_built = \
-	about-authors.c \
 	AUTHORS
 
 BUILT_SOURCES = \
@@ -28,6 +27,7 @@ EXTRA_DIST = \
 	$(BUILT_SOURCES) \
 	$(TESTS) $(SLOW_TESTS) \
 	dependencies.m4 \
+	generate-p2v-authors.pl \
 	generate-p2v-config.pl \
 	issue \
 	kiwi-config.sh \
@@ -52,6 +52,7 @@ EXTRA_DIST = \
 CLEANFILES += \
 	$(dependencies_files) \
 	$(generated_sources) \
+	about-authors.c \
 	stamp-test-virt-p2v-pxe-data-files \
 	stamp-test-virt-p2v-pxe-kernel \
 	test-virt-p2v-pxe.authorized_keys \
@@ -81,7 +82,6 @@ virt-p2v.xz: virt-p2v
 noinst_PROGRAMS = virt-p2v
 
 virt_p2v_SOURCES = \
-	about-authors.c \
 	conversion.c \
 	cpuid.c \
 	gui.c \
@@ -105,7 +105,8 @@ generated_sources = \
 	kernel-config.c
 
 nodist_virt_p2v_SOURCES = \
-	$(generated_sources)
+	$(generated_sources) \
+	about-authors.c
 
 virt_p2v_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
@@ -135,6 +136,9 @@ virt_p2v_LDADD = \
 $(generated_sources) virt-p2v-kernel-config.pod: $(srcdir)/generate-p2v-config.pl
 	$(AM_V_GEN)rm -f $@ $@-t && $(PERL) $(<) --file=$@ --output=$@-t && mv $@-t $@
 
+about-authors.c: $(srcdir)/generate-p2v-authors.pl $(srcdir)/AUTHORS
+	$(AM_V_GEN)rm -f $@ $@-t && $(PERL) $(<) $(srcdir)/AUTHORS > $@-t && mv $@-t $@
+
 # Scripts to build the disk image, USB key, or kickstart.
 bin_SCRIPTS = virt-p2v-make-disk virt-p2v-make-kickstart virt-p2v-make-kiwi
 
diff --git a/p2v/generate-p2v-authors.pl b/p2v/generate-p2v-authors.pl
new file mode 100755
index 000000000..18a825bd7
--- /dev/null
+++ b/p2v/generate-p2v-authors.pl
@@ -0,0 +1,54 @@
+#!/usr/bin/env perl
+# Copyright (C) 2019 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+use warnings;
+
+# Clean up the program name.
+my $progname = $0;
+$progname =~ s{.*/}{};
+
+my $filename = shift or die "$progname: missing filename";
+
+open(my $fh, '<', $filename) or die "Unable to open file '$filename': $!";
+
+print <<"EOF";
+/* libguestfs generated file
+ * WARNING: THIS FILE IS GENERATED FROM THE FOLLOWING FILES:
+ *          $filename
+ * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
+ */
+
+#include <config.h>
+
+#include "p2v.h"
+
+/* Authors involved with virt-v2v and virt-p2v directly. */
+const char *authors[] = {
+EOF
+
+while (<$fh>) {
+  chomp $_;
+  printf "  \"%s\",\n", $_;
+}
+
+print <<"EOF";
+  NULL
+};
+EOF
+
+close($fh);
-- 
2.21.0




More information about the Libguestfs mailing list