Pino Toscano
2019-Dec-13 10:08 UTC
[Libguestfs] [common PATCH] mlv2v: build as OCaml library
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
Richard W.M. Jones
2019-Dec-13 14:42 UTC
Re: [Libguestfs] [common PATCH] mlv2v: build as OCaml library
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