Added OCaml examples.
authorRichard Jones <rjones@redhat.com>
Wed, 8 Apr 2009 22:06:51 +0000 (23:06 +0100)
committerRichard Jones <rjones@redhat.com>
Wed, 8 Apr 2009 22:06:51 +0000 (23:06 +0100)
.gitignore
configure.ac
libguestfs.spec.in
ocaml/Makefile.am
ocaml/examples/LICENSE [new file with mode: 0644]
ocaml/examples/Makefile.am [new file with mode: 0644]
ocaml/examples/README [new file with mode: 0644]
ocaml/examples/lvs.ml [new file with mode: 0644]

index 6f8d612..90a3b52 100644 (file)
@@ -50,6 +50,10 @@ ocaml/*.cma
 ocaml/*.cmxa
 ocaml/*.a
 ocaml/*.so
+ocaml/examples/*.cmi
+ocaml/examples/*.cmo
+ocaml/examples/*.cmx
+ocaml/examples/lvs
 perl/Guestfs.c
 perl/Guestfs.bs
 perl/Makefile-pl
index 29ab3ce..e0cdcde 100644 (file)
@@ -120,7 +120,9 @@ AC_CONFIG_SUBDIRS([daemon])
 dnl Produce output files.
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_FILES([Makefile src/Makefile fish/Makefile examples/Makefile
-                images/Makefile ocaml/Makefile perl/Makefile
+                images/Makefile
+                ocaml/Makefile ocaml/examples/Makefile
+                perl/Makefile
                 python/Makefile
                 make-initramfs.sh update-initramfs.sh
                 libguestfs.spec
index f719c05..bc611ef 100644 (file)
@@ -151,6 +151,12 @@ rm Makefile*
 rm -rf .deps .libs
 popd
 
+# Same for ocaml/examples.
+pushd ocaml/examples
+make clean
+rm Makefile*
+popd
+
 find $RPM_BUILD_ROOT -name perllocal.pod -delete
 find $RPM_BUILD_ROOT -name .packlist -delete
 
@@ -200,6 +206,7 @@ rm -rf $RPM_BUILD_ROOT
 
 %files ocaml-devel
 %defattr(-,root,root,-)
+%doc ocaml/examples
 %{_libdir}/ocaml/guestfs/*.a
 %{_libdir}/ocaml/guestfs/*.cmxa
 %{_libdir}/ocaml/guestfs/*.cmx
index ca8a0ac..00e8027 100644 (file)
@@ -20,6 +20,8 @@ EXTRA_DIST = \
        guestfs_c.c guestfs_c.h guestfs_c_actions.c \
        .depend META.in
 
+SUBDIRS = examples
+
 if HAVE_OCAML
 
 noinst_DATA = mlguestfs.cma mlguestfs.cmxa META
diff --git a/ocaml/examples/LICENSE b/ocaml/examples/LICENSE
new file mode 100644 (file)
index 0000000..8f0b20b
--- /dev/null
@@ -0,0 +1,2 @@
+All the examples in the ocaml/examples/ subdirectory may be freely
+copied without any restrictions.
diff --git a/ocaml/examples/Makefile.am b/ocaml/examples/Makefile.am
new file mode 100644 (file)
index 0000000..48191e7
--- /dev/null
@@ -0,0 +1,10 @@
+EXTRA_DIST = LICENSE README lvs.ml
+
+if HAVE_OCAML
+
+lvs:   lvs.ml
+       $(OCAMLFIND) ocamlopt -I .. mlguestfs.cmxa $< -o $@
+
+CLEANFILES = *.cmi *.cmo *.cmx *.o *~ lvs
+
+endif
\ No newline at end of file
diff --git a/ocaml/examples/README b/ocaml/examples/README
new file mode 100644 (file)
index 0000000..679f506
--- /dev/null
@@ -0,0 +1,9 @@
+This directory contains various example programs which use the OCaml
+Guestfs bindings to the libguestfs API.
+
+As they are examples, these are licensed so they can be freely copied
+and used without any restrictions.
+
+Tips:
+
+(1) To enable verbose messages, set environment variable LIBGUESTFS_DEBUG=1
diff --git a/ocaml/examples/lvs.ml b/ocaml/examples/lvs.ml
new file mode 100644 (file)
index 0000000..12c7c15
--- /dev/null
@@ -0,0 +1,26 @@
+(* An example using the OCaml bindings. *)
+
+open Printf
+
+let () =
+  if Array.length Sys.argv <= 1 || not (Sys.file_exists Sys.argv.(1)) then (
+    eprintf "Usage: lvs guest.img\n";
+    exit 1
+  );
+
+  let h = Guestfs.create () in
+  Guestfs.add_drive h Sys.argv.(1);
+  Guestfs.launch h;
+  Guestfs.wait_ready h;
+
+  let pvs = Guestfs.pvs h in
+  printf "PVs found: [ %s ]\n" (String.concat "; " (Array.to_list pvs));
+
+  let vgs = Guestfs.vgs h in
+  printf "VGs found: [ %s ]\n" (String.concat "; " (Array.to_list vgs));
+
+  let lvs = Guestfs.lvs h in
+  printf "LVs found: [ %s ]\n" (String.concat "; " (Array.to_list lvs));
+
+  (* Helps to find any allocation errors. *)
+  Gc.compact ()