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