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

Richard W.M. Jones rjones at redhat.com
Fri Dec 13 14:42:46 UTC 2019


On Fri, Dec 13, 2019 at 11:08:34AM +0100, Pino Toscano wrote:
> 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 };
> -- 

Makes sense, ACK, thanks.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v




More information about the Libguestfs mailing list