[Libguestfs] [PATCH 5/5] fish: Move fishcommon library to common/options.

Richard W.M. Jones rjones at redhat.com
Fri Jan 20 11:59:15 UTC 2017


This is mostly code motion but I had to remove the compile-time
COMPILING_GUESTFISH and COMPILING_VIRT_RESCUE macros and replace them
with runtime constants and checks.
---
 Makefile.am                                |  2 +-
 align/Makefile.am                          |  3 +-
 align/scan.c                               |  2 ++
 cat/Makefile.am                            | 15 ++++++---
 cat/cat.c                                  |  2 ++
 cat/filesystems.c                          |  2 ++
 cat/log.c                                  |  2 ++
 cat/ls.c                                   |  2 ++
 cat/tail.c                                 |  2 ++
 common/options/Makefile.am                 | 47 +++++++++++++++++++++++++++
 {fish => common/options}/decrypt.c         |  0
 {fish => common/options}/display-options.c |  0
 {fish => common/options}/display-options.h |  0
 {fish => common/options}/domain.c          |  0
 {fish => common/options}/inspect.c         |  1 -
 {fish => common/options}/keys.c            |  0
 {fish => common/options}/options.c         | 12 +++----
 {fish => common/options}/options.h         | 13 ++------
 {fish => common/options}/uri.c             |  0
 {fish => common/options}/uri.h             |  0
 configure.ac                               |  1 +
 df/Makefile.am                             |  3 +-
 df/main.c                                  |  6 ++++
 diff/Makefile.am                           |  3 +-
 diff/diff.c                                |  2 ++
 docs/C_SOURCE_FILES                        | 20 ++++++------
 docs/guestfs-hacking.pod                   |  4 +++
 edit/Makefile.am                           |  3 +-
 edit/edit.c                                |  2 ++
 fish/Makefile.am                           | 52 ++++--------------------------
 fish/fish.c                                |  2 ++
 format/Makefile.am                         |  3 +-
 format/format.c                            |  2 ++
 fuse/Makefile.am                           |  7 ++--
 fuse/guestmount.c                          |  2 ++
 inspector/Makefile.am                      |  3 +-
 inspector/inspector.c                      |  2 ++
 make-fs/Makefile.am                        |  3 +-
 make-fs/make-fs.c                          |  2 ++
 mllib/Makefile.am                          |  7 ++--
 po/POTFILES                                | 15 +++++----
 rescue/Makefile.am                         | 15 ++-------
 rescue/rescue.c                            |  2 ++
 43 files changed, 152 insertions(+), 114 deletions(-)
 create mode 100644 common/options/Makefile.am
 rename {fish => common/options}/decrypt.c (100%)
 rename {fish => common/options}/display-options.c (100%)
 rename {fish => common/options}/display-options.h (100%)
 rename {fish => common/options}/domain.c (100%)
 rename {fish => common/options}/inspect.c (99%)
 rename {fish => common/options}/keys.c (100%)
 rename {fish => common/options}/options.c (98%)
 rename {fish => common/options}/options.h (98%)
 rename {fish => common/options}/uri.c (100%)
 rename {fish => common/options}/uri.h (100%)

diff --git a/Makefile.am b/Makefile.am
index a7fddd4..604ca51 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -89,7 +89,7 @@ SUBDIRS += tests/tsk
 endif
 
 # Common code used by the tools.
-SUBDIRS += common/visit
+SUBDIRS += common/visit common/options
 
 # libguestfs-test-tool
 SUBDIRS += test-tool
diff --git a/align/Makefile.am b/align/Makefile.am
index 0568efb..9854313 100644
--- a/align/Makefile.am
+++ b/align/Makefile.am
@@ -41,6 +41,7 @@ virt_alignment_scan_CPPFLAGS = \
 	-DGUESTFS_WARN_DEPRECATED=1 \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/df \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib \
@@ -53,9 +54,9 @@ virt_alignment_scan_CFLAGS = \
 	$(LIBVIRT_CFLAGS)
 
 virt_alignment_scan_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
diff --git a/align/scan.c b/align/scan.c
index 953ee91..175df1e 100644
--- a/align/scan.c
+++ b/align/scan.c
@@ -66,6 +66,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 0;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static int quiet = 0;           /* --quiet */
 static int uuid = 0;            /* --uuid */
diff --git a/cat/Makefile.am b/cat/Makefile.am
index 632f4c0..14d23b0 100644
--- a/cat/Makefile.am
+++ b/cat/Makefile.am
@@ -45,6 +45,7 @@ virt_cat_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -53,9 +54,9 @@ virt_cat_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_cat_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
@@ -70,6 +71,7 @@ virt_filesystems_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -78,9 +80,9 @@ virt_filesystems_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_filesystems_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
@@ -95,6 +97,7 @@ virt_log_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -103,9 +106,9 @@ virt_log_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_log_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
@@ -121,6 +124,7 @@ virt_ls_CPPFLAGS = \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
 	-I$(top_srcdir)/common/visit \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -129,10 +133,10 @@ virt_ls_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_ls_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/visit/libvisit.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
@@ -147,6 +151,7 @@ virt_tail_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -155,9 +160,9 @@ virt_tail_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_tail_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
diff --git a/cat/cat.c b/cat/cat.c
index 1ac32d7..90f6fb0 100644
--- a/cat/cat.c
+++ b/cat/cat.c
@@ -47,6 +47,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 1;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static int do_cat (int argc, char *argv[]);
 
diff --git a/cat/filesystems.c b/cat/filesystems.c
index 73967d7..1036c6f 100644
--- a/cat/filesystems.c
+++ b/cat/filesystems.c
@@ -49,6 +49,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 0;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static int csv = 0;             /* --csv */
 static int human = 0;           /* --human-readable|-h */
diff --git a/cat/log.c b/cat/log.c
index 84528bd..cc180ec 100644
--- a/cat/log.c
+++ b/cat/log.c
@@ -51,6 +51,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 1;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 #define JOURNAL_DIR "/var/log/journal"
 
diff --git a/cat/ls.c b/cat/ls.c
index 2e327d9..e0b5ff8 100644
--- a/cat/ls.c
+++ b/cat/ls.c
@@ -52,6 +52,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 1;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static int csv = 0;
 static int human = 0;
diff --git a/cat/tail.c b/cat/tail.c
index 0066be7..8785d45 100644
--- a/cat/tail.c
+++ b/cat/tail.c
@@ -51,6 +51,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 1;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static int do_tail (int argc, char *argv[], struct drv *drvs, struct mp *mps);
 static time_t disk_mtime (struct drv *drvs);
diff --git a/common/options/Makefile.am b/common/options/Makefile.am
new file mode 100644
index 0000000..f86d5b7
--- /dev/null
+++ b/common/options/Makefile.am
@@ -0,0 +1,47 @@
+# libguestfs
+# Copyright (C) 2009-2017 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.
+
+include $(top_srcdir)/subdir-rules.mk
+
+# liboptions.la contains guestfish code which is used in other
+# C tools for options parsing and a few other things
+noinst_LTLIBRARIES = liboptions.la
+
+liboptions_la_SOURCES = \
+	decrypt.c \
+	display-options.h \
+	display-options.c \
+	domain.c \
+	inspect.c \
+	keys.c \
+	options.h \
+	options.c \
+	uri.h \
+	uri.c
+liboptions_la_CPPFLAGS = \
+	-DGUESTFS_WARN_DEPRECATED=1 \
+	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
+	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/gnulib/lib -I$(top_builddir)/gnulib/lib
+liboptions_la_CFLAGS = \
+	$(WARN_CFLAGS) $(WERROR_CFLAGS) \
+	$(LIBXML2_CFLAGS)
+liboptions_la_LIBADD = \
+	$(top_builddir)/common/utils/libutils.la \
+	$(top_builddir)/lib/libguestfs.la \
+	$(LIBXML2_LIBS) \
+	$(LTLIBINTL)
diff --git a/fish/decrypt.c b/common/options/decrypt.c
similarity index 100%
rename from fish/decrypt.c
rename to common/options/decrypt.c
diff --git a/fish/display-options.c b/common/options/display-options.c
similarity index 100%
rename from fish/display-options.c
rename to common/options/display-options.c
diff --git a/fish/display-options.h b/common/options/display-options.h
similarity index 100%
rename from fish/display-options.h
rename to common/options/display-options.h
diff --git a/fish/domain.c b/common/options/domain.c
similarity index 100%
rename from fish/domain.c
rename to common/options/domain.c
diff --git a/fish/inspect.c b/common/options/inspect.c
similarity index 99%
rename from fish/inspect.c
rename to common/options/inspect.c
index edfd2d4..bb4ee87 100644
--- a/fish/inspect.c
+++ b/common/options/inspect.c
@@ -38,7 +38,6 @@
 #include "guestfs.h"
 
 /* These definitions ensure we get all extern definitions from the header. */
-#define COMPILING_GUESTFISH 1
 #include "options.h"
 
 /* Global that saves the root device between inspect_mount and
diff --git a/fish/keys.c b/common/options/keys.c
similarity index 100%
rename from fish/keys.c
rename to common/options/keys.c
diff --git a/fish/options.c b/common/options/options.c
similarity index 98%
rename from fish/options.c
rename to common/options/options.c
index b88c194..a531e2e 100644
--- a/fish/options.c
+++ b/common/options/options.c
@@ -198,8 +198,8 @@ add_drives_handle (guestfs_h *g, struct drv *drv, char next_drive)
       next_drive += r;
       break;
 
-#if COMPILING_GUESTFISH
     case drv_N:
+      if (!in_guestfish) abort ();
       /* -N option is not affected by --ro */
       r = guestfs_add_drive_opts (g, drv->N.filename,
                                   GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
@@ -210,10 +210,9 @@ add_drives_handle (guestfs_h *g, struct drv *drv, char next_drive)
       drv->nr_drives = 1;
       next_drive++;
       break;
-#endif
 
-#if COMPILING_VIRT_RESCUE
     case drv_scratch:
+      if (!in_virt_rescue) abort ();
       r = guestfs_add_drive_scratch (g, drv->scratch.size, -1);
       if (r == -1)
         exit (EXIT_FAILURE);
@@ -221,7 +220,6 @@ add_drives_handle (guestfs_h *g, struct drv *drv, char next_drive)
       drv->nr_drives = 1;
       next_drive++;
       break;
-#endif
 
     default: /* keep GCC happy */
       abort ();
@@ -341,17 +339,15 @@ free_drives (struct drv *drv)
   case drv_d:
     /* d.filename is optarg, don't free it */
     break;
-#if COMPILING_GUESTFISH
   case drv_N:
+    if (!in_guestfish) abort ();
     free (drv->N.filename);
     drv->N.data_free (drv->N.data);
     break;
-#endif
-#if COMPILING_VIRT_RESCUE
   case drv_scratch:
+    if (!in_virt_rescue) abort ();
     /* nothing */
     break;
-#endif
   default: ;                    /* keep GCC happy */
   }
   free (drv);
diff --git a/fish/options.h b/common/options/options.h
similarity index 98%
rename from fish/options.h
rename to common/options/options.h
index a0863ad..1598daf 100644
--- a/fish/options.h
+++ b/common/options/options.h
@@ -34,6 +34,8 @@ extern int inspector;
 extern int keys_from_stdin;
 extern int echo_keys;
 extern const char *libvirt_uri;
+extern int in_guestfish;
+extern int in_virt_rescue;
 
 /* List of drives added via -a, -d or -N options.  NB: Unused fields
  * in this struct MUST be zeroed, ie. use calloc, not malloc.
@@ -54,12 +56,8 @@ struct drv {
     drv_a,                      /* -a option (without URI) */
     drv_uri,                    /* -a option (with URI) */
     drv_d,                      /* -d option */
-#if COMPILING_GUESTFISH
     drv_N,                      /* -N option (guestfish only) */
-#endif
-#if COMPILING_VIRT_RESCUE
     drv_scratch,                /* --scratch option (virt-rescue only) */
-#endif
   } type;
   union {
     struct {
@@ -80,18 +78,14 @@ struct drv {
     struct {
       char *guest;          /* guest name */
     } d;
-#if COMPILING_GUESTFISH
     struct {
       char *filename;       /* disk filename (testX.img) */
       void *data;           /* prepared type */
       void (*data_free)(void*); /* function to free 'data' */
     } N;
-#endif
-#if COMPILING_VIRT_RESCUE
     struct {
       int64_t size;         /* size of the disk in bytes */
     } scratch;
-#endif
   };
 
   /* Opaque pointer.  Not used by the options-parsing code, and so
@@ -121,10 +115,7 @@ extern int add_libvirt_drives (guestfs_h *g, const char *guest);
 extern void inspect_mount_handle (guestfs_h *g);
 extern void inspect_mount_root (guestfs_h *g, const char *root);
 #define inspect_mount() inspect_mount_handle (g)
-
-#if COMPILING_GUESTFISH
 extern void print_inspect_prompt (void);
-#endif
 
 /* in key.c */
 extern char *read_key (const char *param);
diff --git a/fish/uri.c b/common/options/uri.c
similarity index 100%
rename from fish/uri.c
rename to common/options/uri.c
diff --git a/fish/uri.h b/common/options/uri.h
similarity index 100%
rename from fish/uri.h
rename to common/options/uri.h
diff --git a/configure.ac b/configure.ac
index a85a802..dbf5ce5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -181,6 +181,7 @@ AC_CONFIG_FILES([Makefile
                  builder/test-website/virt-builder/repos.d/libguestfs.conf
                  cat/Makefile
                  common/errnostring/Makefile
+                 common/options/Makefile
                  common/protocol/Makefile
                  common/utils/Makefile
                  common/visit/Makefile
diff --git a/df/Makefile.am b/df/Makefile.am
index d921372..e2eef59 100644
--- a/df/Makefile.am
+++ b/df/Makefile.am
@@ -43,6 +43,7 @@ virt_df_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -53,9 +54,9 @@ virt_df_CFLAGS = \
 	$(LIBVIRT_CFLAGS)
 
 virt_df_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
diff --git a/df/main.c b/df/main.c
index b4fe0e0..29a1a1d 100644
--- a/df/main.c
+++ b/df/main.c
@@ -55,6 +55,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 0;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 int csv = 0;                    /* --csv */
 int human = 0;                  /* --human-readable|-h */
@@ -349,6 +351,10 @@ single_drive_display_name (struct drv *drvs)
     if (name == NULL)
       error (EXIT_FAILURE, errno, "strdup");
     break;
+
+  case drv_N:
+  case drv_scratch:
+    abort (); /* Only used in guestfish or virt-rescue. */
   }
 
   if (!name)
diff --git a/diff/Makefile.am b/diff/Makefile.am
index 8c9be75..5e71b74 100644
--- a/diff/Makefile.am
+++ b/diff/Makefile.am
@@ -33,6 +33,7 @@ virt_diff_CPPFLAGS = \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
 	-I$(top_srcdir)/common/visit -I$(top_builddir)/common/visit \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/cat -I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -41,10 +42,10 @@ virt_diff_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_diff_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/visit/libvisit.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
diff --git a/diff/diff.c b/diff/diff.c
index 724c7d7..fc31ad3 100644
--- a/diff/diff.c
+++ b/diff/diff.c
@@ -60,6 +60,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 1;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static int atime = 0;
 static int csv = 0;
diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES
index df8e89b..638509f 100644
--- a/docs/C_SOURCE_FILES
+++ b/docs/C_SOURCE_FILES
@@ -11,6 +11,16 @@ cat/filesystems.c
 cat/log.c
 cat/ls.c
 cat/tail.c
+common/options/decrypt.c
+common/options/display-options.c
+common/options/display-options.h
+common/options/domain.c
+common/options/inspect.c
+common/options/keys.c
+common/options/options.c
+common/options/options.h
+common/options/uri.c
+common/options/uri.h
 common/utils/cleanup.c
 common/utils/guestfs-internal-frontend-cleanups.h
 common/utils/guestfs-internal-frontend.h
@@ -172,12 +182,8 @@ fish/cmds.c
 fish/completion.c
 fish/config.c
 fish/copy.c
-fish/decrypt.c
 fish/destpaths.c
-fish/display-options.c
-fish/display-options.h
 fish/display.c
-fish/domain.c
 fish/echo.c
 fish/edit.c
 fish/entries-0.c
@@ -197,13 +203,9 @@ fish/fish.h
 fish/glob.c
 fish/help.c
 fish/hexedit.c
-fish/inspect.c
-fish/keys.c
 fish/lcd.c
 fish/man.c
 fish/more.c
-fish/options.c
-fish/options.h
 fish/prep-boot.c
 fish/prep-disk.c
 fish/prep-fs.c
@@ -228,8 +230,6 @@ fish/setenv.c
 fish/supported.c
 fish/tilde.c
 fish/time.c
-fish/uri.c
-fish/uri.h
 fish/windows.c
 fish/windows.h
 format/format.c
diff --git a/docs/guestfs-hacking.pod b/docs/guestfs-hacking.pod
index 2df78ba..1244cd6 100644
--- a/docs/guestfs-hacking.pod
+++ b/docs/guestfs-hacking.pod
@@ -89,6 +89,10 @@ The communication protocol used between the library and the daemon
 running inside the appliance has to encode errnos as strings, which is
 handled by this library.
 
+=item F<common/options>
+
+Common options parsing for guestfish, guestmount and some virt tools.
+
 =item F<common/protocol>
 
 The XDR-based communication protocol used between the library
diff --git a/edit/Makefile.am b/edit/Makefile.am
index 602bced..317937b 100644
--- a/edit/Makefile.am
+++ b/edit/Makefile.am
@@ -39,6 +39,7 @@ virt_edit_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -47,9 +48,9 @@ virt_edit_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_edit_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
diff --git a/edit/edit.c b/edit/edit.c
index 1e1781d..2f986a3 100644
--- a/edit/edit.c
+++ b/edit/edit.c
@@ -52,6 +52,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 1;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static const char *backup_extension = NULL;
 static const char *perl_expr = NULL;
diff --git a/fish/Makefile.am b/fish/Makefile.am
index b0e783c..0c49abb 100644
--- a/fish/Makefile.am
+++ b/fish/Makefile.am
@@ -67,53 +67,10 @@ EXTRA_DIST = \
 	virt-tar-in.pod \
 	virt-tar-out.pod
 
-# These source files (mostly related to option parsing) are shared
-# between guestfish, guestmount and some other virt tools.  Keep a
-# convenient list here just so we know which ones are shared.  These
-# files must not include other guestfish files.
-FISHCOMMON_SOURCE_FILES = \
-	decrypt.c \
-	display-options.h \
-	display-options.c \
-	domain.c \
-	inspect.c \
-	keys.c \
-	options.h \
-	options.c \
-	uri.h \
-	uri.c
-
-SHARED_SOURCE_FILES = \
-	$(FISHCOMMON_SOURCE_FILES) \
-	config.c \
-	progress.h \
-	progress.c
-
-# libfishcommon.la contains guestfish code which is used in other
-# C tools.  Note this convenience static library is *not* used in
-# guestfish, as the sources are built with extra defines
-# (e.g. -DCOMPILING_GUESTFISH) in that case.
-libfishcommon_la_SOURCES = \
-	$(FISHCOMMON_SOURCE_FILES)
-libfishcommon_la_CPPFLAGS = \
-	-DGUESTFS_WARN_DEPRECATED=1 \
-	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
-	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
-	-I$(top_srcdir)/fish -I$(top_builddir)/fish \
-	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
-libfishcommon_la_CFLAGS = \
-	$(WARN_CFLAGS) $(WERROR_CFLAGS) \
-	$(LIBXML2_CFLAGS)
-libfishcommon_la_LIBADD = \
-	$(top_builddir)/common/utils/libutils.la \
-	$(top_builddir)/lib/libguestfs.la \
-	$(LIBXML2_LIBS) \
-	$(LTLIBINTL)
-
 guestfish_SOURCES = \
 	$(generator_built) \
-	$(SHARED_SOURCE_FILES) \
 	alloc.c \
+	config.c \
 	cmds-gperf.h \
 	copy.c \
 	destpaths.c \
@@ -137,6 +94,8 @@ guestfish_SOURCES = \
 	prep-fs.c \
 	prep-lv.c \
 	prep-boot.c \
+	progress.h \
+	progress.c \
 	rc.c \
 	reopen.c \
 	setenv.c \
@@ -160,11 +119,11 @@ cmds-gperf.c: cmds-gperf.gperf
 	mv $@-t $@
 
 guestfish_CPPFLAGS = \
-	-DCOMPILING_GUESTFISH=1 \
 	-DGUESTFS_WARN_DEPRECATED=1 \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish -I$(top_builddir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -177,6 +136,7 @@ guestfish_LDADD = \
 	$(LIBCONFIG_LIBS) \
 	$(LIBREADLINE) \
 	$(LIBTINFO_LIBS) \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
 	$(LIBXML2_LIBS) \
@@ -184,7 +144,7 @@ guestfish_LDADD = \
 	-lm
 
 # Make guestfish use the convenience libraries.
-noinst_LTLIBRARIES = libcmds.la librc_protocol.la libfishcommon.la
+noinst_LTLIBRARIES = libcmds.la librc_protocol.la
 guestfish_LDADD += libcmds.la librc_protocol.la ../gnulib/lib/libgnu.la
 
 if HAVE_RPCGEN
diff --git a/fish/fish.c b/fish/fish.c
index f9271cf..b7d63cf 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -105,6 +105,8 @@ int progress_bars = 0;
 int is_interactive = 0;
 const char *input_file = NULL;
 int input_lineno = 0;
+int in_guestfish = 1;
+int in_virt_rescue = 0;
 
 static void __attribute__((noreturn))
 usage (int status)
diff --git a/format/Makefile.am b/format/Makefile.am
index 85bdb62..2d3cc77 100644
--- a/format/Makefile.am
+++ b/format/Makefile.am
@@ -32,6 +32,7 @@ virt_format_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -41,9 +42,9 @@ virt_format_CFLAGS = \
 	$(LIBVIRT_CFLAGS)
 
 virt_format_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
diff --git a/format/format.c b/format/format.c
index e70f32d..f23113b 100644
--- a/format/format.c
+++ b/format/format.c
@@ -47,6 +47,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 int inspector = 0;
 const char *libvirt_uri = NULL;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static const char *filesystem = NULL;
 static const char *vg = NULL, *lv = NULL;
diff --git a/fuse/Makefile.am b/fuse/Makefile.am
index d234215..3509e77 100644
--- a/fuse/Makefile.am
+++ b/fuse/Makefile.am
@@ -46,6 +46,7 @@ guestmount_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -58,9 +59,9 @@ guestmount_CFLAGS = \
 guestmount_LDADD = \
 	$(FUSE_LIBS) \
 	$(LIBCONFIG_LIBS) \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
@@ -69,14 +70,13 @@ guestmount_LDADD = \
 # guestunmount
 
 guestunmount_SOURCES = \
-	../fish/display-options.c \
-	../fish/display-options.h \
 	guestunmount.c
 
 guestunmount_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -84,6 +84,7 @@ guestunmount_CFLAGS = \
 	$(WARN_CFLAGS) $(WERROR_CFLAGS)
 
 guestunmount_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
 	$(LIBXML2_LIBS) \
diff --git a/fuse/guestmount.c b/fuse/guestmount.c
index 27bda06..3839397 100644
--- a/fuse/guestmount.c
+++ b/fuse/guestmount.c
@@ -84,6 +84,8 @@ int inspector = 0;
 int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static void __attribute__((noreturn))
 fuse_help (void)
diff --git a/inspector/Makefile.am b/inspector/Makefile.am
index 358a3f9..753e2c9 100644
--- a/inspector/Makefile.am
+++ b/inspector/Makefile.am
@@ -60,6 +60,7 @@ virt_inspector_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -68,9 +69,9 @@ virt_inspector_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_inspector_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LIBVIRT_LIBS) \
 	$(LTLIBINTL) \
diff --git a/inspector/inspector.c b/inspector/inspector.c
index 8f9d04d..7a115c0 100644
--- a/inspector/inspector.c
+++ b/inspector/inspector.c
@@ -53,6 +53,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 1;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 static const char *xpath = NULL;
 static int inspect_apps = 1;
 static int inspect_icon = 1;
diff --git a/make-fs/Makefile.am b/make-fs/Makefile.am
index 8d8971a..bef0e7b 100644
--- a/make-fs/Makefile.am
+++ b/make-fs/Makefile.am
@@ -32,6 +32,7 @@ virt_make_fs_CPPFLAGS = \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -40,9 +41,9 @@ virt_make_fs_CFLAGS = \
 	$(LIBXML2_CFLAGS)
 
 virt_make_fs_LDADD = \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
-	$(top_builddir)/fish/libfishcommon.la \
 	$(LIBXML2_LIBS) \
 	$(LTLIBINTL) \
 	../gnulib/lib/libgnu.la
diff --git a/make-fs/make-fs.c b/make-fs/make-fs.c
index 7a3ecd3..4fbef2d 100644
--- a/make-fs/make-fs.c
+++ b/make-fs/make-fs.c
@@ -48,6 +48,8 @@ const char *libvirt_uri;
 int live;
 int read_only;
 int verbose;
+int in_guestfish = 0;
+int in_virt_rescue = 0;
 
 static const char *format = "raw", *label = NULL,
   *partition = NULL, *size_str = NULL, *type = "ext2";
diff --git a/mllib/Makefile.am b/mllib/Makefile.am
index b9a6cf3..9cb244c 100644
--- a/mllib/Makefile.am
+++ b/mllib/Makefile.am
@@ -71,10 +71,10 @@ SOURCES_ML = \
 
 SOURCES_C = \
 	../common/visit/visit.c \
-	../fish/decrypt.c \
-	../fish/keys.c \
+	../common/options/decrypt.c \
+	../common/options/keys.c \
+	../common/options/uri.c \
 	../fish/progress.c \
-	../fish/uri.c \
 	common_utils-c.c \
 	dev_t-c.c \
 	exit-c.c \
@@ -113,6 +113,7 @@ libmllib_a_CPPFLAGS = \
 	-I$(top_srcdir)/common/utils \
 	-I$(top_srcdir)/lib \
 	-I$(top_srcdir)/common/visit \
+	-I$(top_srcdir)/common/options \
 	-I$(top_srcdir)/fish
 libmllib_a_CFLAGS = \
 	$(WARN_CFLAGS) $(WERROR_CFLAGS) \
diff --git a/po/POTFILES b/po/POTFILES
index 2eddd75..f16f321 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -12,6 +12,13 @@ cat/ls.c
 cat/tail.c
 common/errnostring/errnostring-gperf.c
 common/errnostring/errnostring.c
+common/options/decrypt.c
+common/options/display-options.c
+common/options/domain.c
+common/options/inspect.c
+common/options/keys.c
+common/options/options.c
+common/options/uri.c
 common/utils/cleanup.c
 common/utils/structs-cleanup.c
 common/utils/structs-print.c
@@ -156,15 +163,13 @@ erlang/dispatch.c
 erlang/main.c
 erlang/structs.c
 fish/alloc.c
+fish/cmds-gperf.c
 fish/cmds.c
 fish/completion.c
 fish/config.c
 fish/copy.c
-fish/decrypt.c
 fish/destpaths.c
-fish/display-options.c
 fish/display.c
-fish/domain.c
 fish/echo.c
 fish/edit.c
 fish/entries-0.c
@@ -181,12 +186,9 @@ fish/fish.c
 fish/glob.c
 fish/help.c
 fish/hexedit.c
-fish/inspect.c
-fish/keys.c
 fish/lcd.c
 fish/man.c
 fish/more.c
-fish/options.c
 fish/prep-boot.c
 fish/prep-disk.c
 fish/prep-fs.c
@@ -208,7 +210,6 @@ fish/setenv.c
 fish/supported.c
 fish/tilde.c
 fish/time.c
-fish/uri.c
 fish/windows.c
 format/format.c
 fuse/guestmount.c
diff --git a/rescue/Makefile.am b/rescue/Makefile.am
index 92ebc4a..00f965e 100644
--- a/rescue/Makefile.am
+++ b/rescue/Makefile.am
@@ -26,28 +26,18 @@ EXTRA_DIST = \
 bin_PROGRAMS = virt-rescue
 
 SHARED_SOURCE_FILES = \
-	../fish/config.c \
-	../fish/decrypt.c \
-	../fish/display-options.h \
-	../fish/display-options.c \
-	../fish/domain.c \
-	../fish/inspect.c \
-	../fish/keys.c \
-	../fish/options.h \
-	../fish/options.c \
-	../fish/uri.h \
-	../fish/uri.c
+	../fish/config.c
 
 virt_rescue_SOURCES = \
 	$(SHARED_SOURCE_FILES) \
 	rescue.c
 
 virt_rescue_CPPFLAGS = \
-	-DCOMPILING_VIRT_RESCUE=1 \
 	-DGUESTFS_WARN_DEPRECATED=1 \
 	-DLOCALEBASEDIR=\""$(datadir)/locale"\" \
 	-I$(top_srcdir)/common/utils -I$(top_builddir)/common/utils \
 	-I$(top_srcdir)/lib -I$(top_builddir)/lib \
+	-I$(top_srcdir)/common/options -I$(top_builddir)/common/options \
 	-I$(top_srcdir)/fish \
 	-I$(srcdir)/../gnulib/lib -I../gnulib/lib
 
@@ -58,6 +48,7 @@ virt_rescue_CFLAGS = \
 
 virt_rescue_LDADD = \
 	$(LIBCONFIG_LIBS) \
+	$(top_builddir)/common/options/liboptions.la \
 	$(top_builddir)/common/utils/libutils.la \
 	$(top_builddir)/lib/libguestfs.la \
 	$(LIBXML2_LIBS) \
diff --git a/rescue/rescue.c b/rescue/rescue.c
index 6730085..ed40ba6 100644
--- a/rescue/rescue.c
+++ b/rescue/rescue.c
@@ -51,6 +51,8 @@ int keys_from_stdin = 0;
 int echo_keys = 0;
 const char *libvirt_uri = NULL;
 int inspector = 0;
+int in_guestfish = 0;
+int in_virt_rescue = 1;
 
 static void __attribute__((noreturn))
 usage (int status)
-- 
2.9.3




More information about the Libguestfs mailing list