[Libguestfs] [common PATCH] mlv2v: build as OCaml library

Pino Toscano ptoscano at redhat.com
Fri Dec 13 10:08:34 UTC 2019


While there is only one OCaml source, build it as small library: this
way it is easier to use, and there is no need to copy the sources from
here.
---
 .gitignore        |  1 +
 mlv2v/Makefile.am | 71 ++++++++++++++++++++++++++++++++++++++++++++---
 mlv2v/dummy.c     |  2 ++
 3 files changed, 70 insertions(+), 4 deletions(-)
 create mode 100644 mlv2v/dummy.c

diff --git a/.gitignore b/.gitignore
index 88c1c63..a788c55 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,6 +60,7 @@ Makefile.in
 /mlutils/.depend
 /mlutils/c_utils_unit_tests
 /mlutils/oUnit-*
+/mlv2v/.depend
 /mlvisit/.depend
 /mlvisit/visit_tests
 /mlxml/.depend
diff --git a/mlv2v/Makefile.am b/mlv2v/Makefile.am
index 9e82148..945f981 100644
--- a/mlv2v/Makefile.am
+++ b/mlv2v/Makefile.am
@@ -18,11 +18,74 @@
 include $(top_srcdir)/subdir-rules.mk
 
 EXTRA_DIST = \
-	$(generator_built)
+	$(generator_built) \
+	$(SOURCES_MLI) \
+	$(SOURCES_ML) \
+	$(SOURCES_C)
 
-# Note: These are not compiled into a library.  They are used directly
-# by virt-v2v and are only located here because the files are
-# generated (since the split).
 generator_built = \
 	uefi.mli \
 	uefi.ml
+
+SOURCES_MLI = \
+	uefi.mli
+
+SOURCES_ML = \
+	uefi.ml
+
+SOURCES_C = \
+	dummy.c
+
+# We pretend that we're building a C library.  automake handles the
+# compilation of the C sources for us.  At the end we take the C
+# objects and OCaml objects and link them into the OCaml library.
+# This C library is never used.
+
+noinst_LIBRARIES = libmlv2v.a
+
+if !HAVE_OCAMLOPT
+MLV2V_CMA = mlv2v.cma
+else
+MLV2V_CMA = mlv2v.cmxa
+endif
+
+noinst_DATA = $(MLV2V_CMA)
+
+libmlv2v_a_SOURCES = $(SOURCES_C)
+libmlv2v_a_CPPFLAGS = \
+	-DCAML_NAME_SPACE \
+	-I. \
+	-I$(top_builddir) \
+	-I$(shell $(OCAMLC) -where)
+libmlv2v_a_CFLAGS = \
+	$(WARN_CFLAGS) $(WERROR_CFLAGS) \
+	-fPIC
+
+BOBJECTS = $(SOURCES_ML:.ml=.cmo)
+XOBJECTS = $(BOBJECTS:.cmo=.cmx)
+
+OCAMLPACKAGES = \
+	-package str,unix \
+	-I $(builddir)
+OCAMLPACKAGES_TESTS = $(MLV2V_CMA)
+
+OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)'
+
+if !HAVE_OCAMLOPT
+OBJECTS = $(BOBJECTS)
+else
+OBJECTS = $(XOBJECTS)
+endif
+
+libmlv2v_a_DEPENDENCIES = $(OBJECTS)
+
+$(MLV2V_CMA): $(OBJECTS) libmlv2v.a
+	$(OCAMLFIND) mklib $(OCAMLPACKAGES) \
+	    $(OBJECTS) $(libmlv2v_a_OBJECTS) -o mlv2v
+
+# OCaml dependencies.
+.depend: $(srcdir)/*.mli $(srcdir)/*.ml
+	$(top_builddir)/ocaml-dep.sh $^
+-include .depend
+
+.PHONY: docs
diff --git a/mlv2v/dummy.c b/mlv2v/dummy.c
new file mode 100644
index 0000000..ebab619
--- /dev/null
+++ b/mlv2v/dummy.c
@@ -0,0 +1,2 @@
+/* Dummy source, to be used for OCaml-based tools with no C sources. */
+enum { foo = 1 };
-- 
2.23.0




More information about the Libguestfs mailing list