summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2010-11-11 11:51:02 +0000
committerRichard W.M. Jones <rjones@redhat.com>2010-11-11 11:51:02 +0000
commit6263da7474c6e7818b025979712c9c5d7108640d (patch)
treec7cb9b69c0bbd1685d9ccd0914326092fc3d7549
parent4a3726d5ed0dd3174b46ec574eaf4f4140cb193b (diff)
downloadlibguestfs-6263da7474c6e7818b025979712c9c5d7108640d.tar.gz
libguestfs-6263da7474c6e7818b025979712c9c5d7108640d.tar.xz
libguestfs-6263da7474c6e7818b025979712c9c5d7108640d.zip
lib: Make <guestfs.h> be completely generated.
This removes the 'not-quite-separate' guestfs-actions.h and guestfs-structs.h files.
-rw-r--r--.gitignore3
-rw-r--r--generator/generator_c.ml131
-rw-r--r--generator/generator_main.ml3
-rw-r--r--src/Makefile.am7
-rw-r--r--src/guestfs.h102
5 files changed, 114 insertions, 132 deletions
diff --git a/.gitignore b/.gitignore
index bf49d56a..180e17e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -259,12 +259,11 @@ src/errnostring_gperf.c
src/errnostring_gperf.gperf
src/errnostring.c
src/errnostring.h
-src/guestfs-actions.h
+src/guestfs.h
src/guestfs-internal-actions.h
src/guestfs_protocol.c
src/guestfs_protocol.h
src/guestfs_protocol.x
-src/guestfs-structs.h
src/.libs/libguestfs.so
src/libguestfs.syms
*.swp
diff --git a/generator/generator_c.ml b/generator/generator_c.ml
index a2f40da3..d9d6055e 100644
--- a/generator/generator_c.ml
+++ b/generator/generator_c.ml
@@ -229,8 +229,7 @@ I<The caller must free the strings and the array after use>.\n\n"
or NULL if there was an error.
I<The caller must call C<guestfs_free_%s> after use>.\n\n" typ typ
| RStructList (_, typ) ->
- pr "This function returns a C<struct guestfs_%s_list *>
-(see E<lt>guestfs-structs.hE<gt>),
+ pr "This function returns a C<struct guestfs_%s_list *>,
or NULL if there was an error.
I<The caller must call C<guestfs_free_%s_list> after use>.\n\n" typ typ
| RHashtable _ ->
@@ -337,22 +336,91 @@ and generate_availability_pod () =
pr "=back\n";
pr "\n"
-(* Generate the guestfs-structs.h file. *)
-and generate_structs_h () =
+(* Generate the guestfs.h file. *)
+and generate_guestfs_h () =
generate_header CStyle LGPLv2plus;
- (* This is a public exported header file containing various
- * structures. The structures are carefully written to have
- * exactly the same in-memory format as the XDR structures that
- * we use on the wire to the daemon. The reason for creating
- * copies of these structures here is just so we don't have to
- * export the whole of guestfs_protocol.h (which includes much
- * unrelated and XDR-dependent stuff that we don't want to be
- * public, or required by clients).
- *
- * To reiterate, we will pass these structures to and from the
- * client with a simple assignment or memcpy, so the format
- * must be identical to what rpcgen / the RFC defines.
+ pr "\
+/* ---------- IMPORTANT NOTE ----------
+ *
+ * All API documentation is in the manpage, 'guestfs(3)'.
+ * To read it, type: man 3 guestfs
+ * Or read it online here: http://libguestfs.org/guestfs.3.html
+ *
+ * Go and read it now, I'll be right here waiting for you
+ * when you come back.
+ *
+ * ------------------------------------
+ */
+
+#ifndef GUESTFS_H_
+#define GUESTFS_H_
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#include <stdint.h>
+#include <stdarg.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+
+/* The handle. */
+typedef struct guestfs_h guestfs_h;
+
+/* Connection management. */
+extern guestfs_h *guestfs_create (void);
+extern void guestfs_close (guestfs_h *g);
+
+/* Error handling. */
+extern const char *guestfs_last_error (guestfs_h *g);
+#define LIBGUESTFS_HAVE_LAST_ERRNO 1
+extern int guestfs_last_errno (guestfs_h *g);
+
+typedef void (*guestfs_error_handler_cb) (guestfs_h *g, void *opaque, const char *msg);
+typedef void (*guestfs_abort_cb) (void) __attribute__((__noreturn__));
+
+extern void guestfs_set_error_handler (guestfs_h *g, guestfs_error_handler_cb cb, void *opaque);
+extern guestfs_error_handler_cb guestfs_get_error_handler (guestfs_h *g, void **opaque_rtn);
+
+extern void guestfs_set_out_of_memory_handler (guestfs_h *g, guestfs_abort_cb);
+extern guestfs_abort_cb guestfs_get_out_of_memory_handler (guestfs_h *g);
+
+/* Events. */
+typedef void (*guestfs_log_message_cb) (guestfs_h *g, void *opaque, char *buf, int len);
+typedef void (*guestfs_subprocess_quit_cb) (guestfs_h *g, void *opaque);
+typedef void (*guestfs_launch_done_cb) (guestfs_h *g, void *opaque);
+typedef void (*guestfs_close_cb) (guestfs_h *g, void *opaque);
+typedef void (*guestfs_progress_cb) (guestfs_h *g, void *opaque, int proc_nr, int serial, uint64_t position, uint64_t total);
+
+extern void guestfs_set_log_message_callback (guestfs_h *g, guestfs_log_message_cb cb, void *opaque);
+extern void guestfs_set_subprocess_quit_callback (guestfs_h *g, guestfs_subprocess_quit_cb cb, void *opaque);
+extern void guestfs_set_launch_done_callback (guestfs_h *g, guestfs_launch_done_cb cb, void *opaque);
+#define LIBGUESTFS_HAVE_SET_CLOSE_CALLBACK 1
+extern void guestfs_set_close_callback (guestfs_h *g, guestfs_close_cb cb, void *opaque);
+#define LIBGUESTFS_HAVE_SET_PROGRESS_CALLBACK 1
+extern void guestfs_set_progress_callback (guestfs_h *g, guestfs_progress_cb cb, void *opaque);
+
+/* Private data area. */
+#define LIBGUESTFS_HAVE_SET_PRIVATE 1
+extern void guestfs_set_private (guestfs_h *g, const char *key, void *data);
+#define LIBGUESTFS_HAVE_GET_PRIVATE 1
+extern void *guestfs_get_private (guestfs_h *g, const char *key);
+
+/* Structures. */
+";
+
+ (* The structures are carefully written to have exactly the same
+ * in-memory format as the XDR structures that we use on the wire to
+ * the daemon. The reason for creating copies of these structures
+ * here is just so we don't have to export the whole of
+ * guestfs_protocol.h (which includes much unrelated and
+ * XDR-dependent stuff that we don't want to be public, or required
+ * by clients).
+ *
+ * To reiterate, we will pass these structures to and from the client
+ * with a simple assignment or memcpy, so the format must be
+ * identical to what rpcgen / the RFC defines.
*)
(* Public structures. *)
@@ -383,11 +451,12 @@ and generate_structs_h () =
pr "extern void guestfs_free_%s (struct guestfs_%s *);\n" typ typ;
pr "extern void guestfs_free_%s_list (struct guestfs_%s_list *);\n" typ typ;
pr "\n"
- ) structs
+ ) structs;
+
+ pr "\
+/* Actions. */
+";
-(* Generate the guestfs-actions.h file. *)
-and generate_actions_h () =
- generate_header CStyle LGPLv2plus;
List.iter (
fun (shortname, (ret, args, optargs as style), _, flags, _, _, _) ->
let deprecated =
@@ -435,7 +504,27 @@ and generate_actions_h () =
~prefix:"guestfs_" ~suffix:"_argv" ~optarg_proto:Argv
shortname style;
);
- ) all_functions_sorted
+ ) all_functions_sorted;
+
+ pr "\
+
+/* Private functions.
+ *
+ * These are NOT part of the public, stable API, and can change at any
+ * time! We export them because they are used by some of the language
+ * bindings.
+ */
+extern void *guestfs_safe_malloc (guestfs_h *g, size_t nbytes);
+extern void *guestfs_safe_calloc (guestfs_h *g, size_t n, size_t s);
+extern const char *guestfs_tmpdir (void);
+/* End of private functions. */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GUESTFS_H_ */
+"
(* Generate the guestfs-internal-actions.h file. *)
and generate_internal_actions_h () =
diff --git a/generator/generator_main.ml b/generator/generator_main.ml
index f384fac0..bf1e8e0b 100644
--- a/generator/generator_main.ml
+++ b/generator/generator_main.ml
@@ -77,8 +77,7 @@ Run it from the top source directory using the command
load_api_versions "src/api-support/added";
output_to "src/guestfs_protocol.x" generate_xdr;
- output_to "src/guestfs-structs.h" generate_structs_h;
- output_to "src/guestfs-actions.h" generate_actions_h;
+ output_to "src/guestfs.h" generate_guestfs_h;
output_to "src/guestfs-internal-actions.h" generate_internal_actions_h;
output_to "src/actions.c" generate_client_actions;
output_to "src/bindtests.c" generate_bindtests;
diff --git a/src/Makefile.am b/src/Makefile.am
index 5f796a03..87812741 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -19,8 +19,7 @@ include $(top_srcdir)/subdir-rules.mk
generator_built = \
guestfs_protocol.x \
- guestfs-structs.h \
- guestfs-actions.h \
+ guestfs.h
guestfs-internal-actions.h \
actions.c \
bindtests.c \
@@ -47,7 +46,7 @@ EXTRA_DIST = \
api-support/README \
api-support/update-from-tarballs.sh
-include_HEADERS = guestfs.h guestfs-actions.h guestfs-structs.h
+include_HEADERS = guestfs.h
lib_LTLIBRARIES = libguestfs.la
@@ -120,9 +119,7 @@ libguestfs_la_LDFLAGS += $(VERSION_SCRIPT_FLAGS)libguestfs.syms
libguestfs_la_SOURCES = \
guestfs.c \
guestfs.h \
- guestfs-actions.h \
guestfs-internal.h \
- guestfs-structs.h \
guestfs_protocol.h \
gettext.h \
actions.c \
diff --git a/src/guestfs.h b/src/guestfs.h
deleted file mode 100644
index 0f4f9fde..00000000
--- a/src/guestfs.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* libguestfs
- * Copyright (C) 2009-2010 Red Hat Inc.
- *
- * 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 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/* IMPORTANT NOTE:
- *
- * All API documentation is in the manpage, 'guestfs(3)'.
- * To read it, type:
- * man 3 guestfs
- * Or read it online here:
- * http://libguestfs.org/guestfs.3.html
- *
- * Go and read it now, I'll wait for you to come back.
- */
-
-#ifndef GUESTFS_H_
-#define GUESTFS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-#include <stdarg.h>
-
-typedef struct guestfs_h guestfs_h;
-
-/*--- Connection management ---*/
-extern guestfs_h *guestfs_create (void);
-extern void guestfs_close (guestfs_h *g);
-
-/*--- Error handling ---*/
-extern const char *guestfs_last_error (guestfs_h *g);
-#define LIBGUESTFS_HAVE_LAST_ERRNO 1
-extern int guestfs_last_errno (guestfs_h *g);
-
-typedef void (*guestfs_error_handler_cb) (guestfs_h *g, void *opaque, const char *msg);
-typedef void (*guestfs_abort_cb) (void) __attribute__((__noreturn__));
-
-extern void guestfs_set_error_handler (guestfs_h *g, guestfs_error_handler_cb cb, void *opaque);
-extern guestfs_error_handler_cb guestfs_get_error_handler (guestfs_h *g, void **opaque_rtn);
-
-extern void guestfs_set_out_of_memory_handler (guestfs_h *g, guestfs_abort_cb);
-extern guestfs_abort_cb guestfs_get_out_of_memory_handler (guestfs_h *g);
-
-/*--- Events ---*/
-typedef void (*guestfs_log_message_cb) (guestfs_h *g, void *opaque, char *buf, int len);
-typedef void (*guestfs_subprocess_quit_cb) (guestfs_h *g, void *opaque);
-typedef void (*guestfs_launch_done_cb) (guestfs_h *g, void *opaque);
-typedef void (*guestfs_close_cb) (guestfs_h *g, void *opaque);
-typedef void (*guestfs_progress_cb) (guestfs_h *g, void *opaque, int proc_nr, int serial, uint64_t position, uint64_t total);
-
-extern void guestfs_set_log_message_callback (guestfs_h *g, guestfs_log_message_cb cb, void *opaque);
-extern void guestfs_set_subprocess_quit_callback (guestfs_h *g, guestfs_subprocess_quit_cb cb, void *opaque);
-extern void guestfs_set_launch_done_callback (guestfs_h *g, guestfs_launch_done_cb cb, void *opaque);
-#define LIBGUESTFS_HAVE_SET_CLOSE_CALLBACK 1
-extern void guestfs_set_close_callback (guestfs_h *g, guestfs_close_cb cb, void *opaque);
-#define LIBGUESTFS_HAVE_SET_PROGRESS_CALLBACK 1
-extern void guestfs_set_progress_callback (guestfs_h *g, guestfs_progress_cb cb, void *opaque);
-
-/*--- Private data area ---*/
-#define LIBGUESTFS_HAVE_SET_PRIVATE 1
-extern void guestfs_set_private (guestfs_h *g, const char *key, void *data);
-#define LIBGUESTFS_HAVE_GET_PRIVATE 1
-extern void *guestfs_get_private (guestfs_h *g, const char *key);
-
-/*--- Structures and actions ---*/
-#include <rpc/types.h>
-#include <rpc/xdr.h>
-#include <guestfs-structs.h>
-#include <guestfs-actions.h>
-
-/*--- Private ---
- *
- * These are NOT part of the public, stable API, and can change at any
- * time! We export them because they are used by some of the language
- * bindings.
- */
-extern void *guestfs_safe_malloc (guestfs_h *g, size_t nbytes);
-extern void *guestfs_safe_calloc (guestfs_h *g, size_t n, size_t s);
-extern const char *guestfs_tmpdir (void);
-/* End of private functions. */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GUESTFS_H_ */