[PATCH ocaml 1/1] Add dune build system
Richard W.M. Jones
rjones at redhat.com
Tue Apr 14 10:33:49 UTC 2020
On Tue, Apr 14, 2020 at 12:22:49PM +0200, Pino Toscano wrote:
> Introduce the dune build system to build ocaml-libvirt, providing
> everything that the current autoconf-based build system has.
>
> Add also an opam configuration files, as it is mandatory with dune.
>
> Signed-off-by: Pino Toscano <ptoscano at redhat.com>
ACK
You might want to drop -safe-string since it's been the default
for a while (since OCaml 4.06 / Nov 2017).
Rich.
> .gitignore | 3 +++
> dune | 18 +++++++++++++
> dune-project | 1 +
> dune.inc | 22 ++++++++++++++++
> examples/dune | 50 ++++++++++++++++++++++++++++++++++++
> libvirt/discover.ml | 40 +++++++++++++++++++++++++++++
> libvirt/dune | 57 ++++++++++++++++++++++++++++++++++++++++++
> libvirt/dune-project | 2 ++
> libvirt/mllibvirt.opam | 33 ++++++++++++++++++++++++
> 9 files changed, 226 insertions(+)
> create mode 100644 dune
> create mode 100644 dune-project
> create mode 100644 dune.inc
> create mode 100644 examples/dune
> create mode 100644 libvirt/discover.ml
> create mode 100644 libvirt/dune
> create mode 100644 libvirt/dune-project
> create mode 100644 libvirt/mllibvirt.opam
>
> diff --git a/.gitignore b/.gitignore
> index c52c1b8..814457b 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -10,10 +10,12 @@
> *.opt
> *.so
> *~
> +.merlin
> Make.rules
> Makefile
> core
> core.*
> +/_build/
> /META
> /aclocal.m4
> /autom4te.cache
> @@ -30,5 +32,6 @@ core.*
> /html/
> /libvirt/libvirt_generated.c
> /libvirt/libvirt_version.ml
> +/libvirt/mllibvirt.install
> /ocaml-libvirt-*.exe
> /ocaml-libvirt-*.tar.gz
> diff --git a/dune b/dune
> new file mode 100644
> index 0000000..5002345
> --- /dev/null
> +++ b/dune
> @@ -0,0 +1,18 @@
> +; OCaml bindings for libvirt.
> +; (C) Copyright 2020 Pino Toscano, Red Hat Inc.
> +;
> +; This library is free software; you can redistribute it and/or
> +; modify it under the terms of the GNU Lesser General Public
> +; License as published by the Free Software Foundation; either
> +; version 2 of the License, or (at your option) any later version.
> +;
> +; This library is distributed in the hope that it will be useful,
> +; but WITHOUT ANY WARRANTY; without even the implied warranty of
> +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +; Lesser General Public License for more details.
> +;
> +; You should have received a copy of the GNU Lesser General Public
> +; License along with this library; if not, write to the Free Software
> +; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +(include dune.inc)
> diff --git a/dune-project b/dune-project
> new file mode 100644
> index 0000000..de4fc20
> --- /dev/null
> +++ b/dune-project
> @@ -0,0 +1 @@
> +(lang dune 1.0)
> diff --git a/dune.inc b/dune.inc
> new file mode 100644
> index 0000000..2cfb767
> --- /dev/null
> +++ b/dune.inc
> @@ -0,0 +1,22 @@
> +; OCaml bindings for libvirt.
> +; (C) Copyright 2020 Pino Toscano, Red Hat Inc.
> +;
> +; This library is free software; you can redistribute it and/or
> +; modify it under the terms of the GNU Lesser General Public
> +; License as published by the Free Software Foundation; either
> +; version 2 of the License, or (at your option) any later version.
> +;
> +; This library is distributed in the hope that it will be useful,
> +; but WITHOUT ANY WARRANTY; without even the implied warranty of
> +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +; Lesser General Public License for more details.
> +;
> +; You should have received a copy of the GNU Lesser General Public
> +; License along with this library; if not, write to the Free Software
> +; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +(env
> + (dev
> + (flags (:standard -g -warn-error CDEFLMPSUVYZX-3 -w -9-27-34-37-50 -safe-string)))
> + (release
> + (flags (:standard -g -warn-error CDEFLMPSUVYZX-3 -w -9-27-34-37-50 -safe-string))))
> diff --git a/examples/dune b/examples/dune
> new file mode 100644
> index 0000000..219727c
> --- /dev/null
> +++ b/examples/dune
> @@ -0,0 +1,50 @@
> +; OCaml bindings for libvirt.
> +; (C) Copyright 2020 Pino Toscano, Red Hat Inc.
> +;
> +; This library is free software; you can redistribute it and/or
> +; modify it under the terms of the GNU Lesser General Public
> +; License as published by the Free Software Foundation; either
> +; version 2 of the License, or (at your option) any later version.
> +;
> +; This library is distributed in the hope that it will be useful,
> +; but WITHOUT ANY WARRANTY; without even the implied warranty of
> +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +; Lesser General Public License for more details.
> +;
> +; You should have received a copy of the GNU Lesser General Public
> +; License along with this library; if not, write to the Free Software
> +; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +(executable
> + (name domain_events)
> + (modules Domain_events)
> + (libraries mllibvirt))
> +
> +(executable
> + (name get_all_domain_stats)
> + (modules Get_all_domain_stats)
> + (libraries mllibvirt unix))
> +
> +(executable
> + (name get_cpu_stats)
> + (modules Get_cpu_stats)
> + (libraries mllibvirt))
> +
> +(executable
> + (name list_domains)
> + (modules List_domains)
> + (libraries mllibvirt))
> +
> +(executable
> + (name list_secrets)
> + (modules List_secrets)
> + (libraries mllibvirt))
> +
> +(executable
> + (name node_info)
> + (modules Node_info)
> + (libraries mllibvirt))
> +
> +(alias
> + (name examples)
> + (deps domain_events.exe get_all_domain_stats.exe get_cpu_stats.exe list_domains.exe list_secrets.exe node_info.exe))
> diff --git a/libvirt/discover.ml b/libvirt/discover.ml
> new file mode 100644
> index 0000000..a49ae7a
> --- /dev/null
> +++ b/libvirt/discover.ml
> @@ -0,0 +1,40 @@
> +(* OCaml bindings for libvirt.
> + (C) Copyright 2020 Pino Toscano, Red Hat Inc.
> + https://libvirt.org/
> +
> + This library is free software; you can redistribute it and/or
> + modify it under the terms of the GNU Lesser General Public
> + License as published by the Free Software Foundation; either
> + version 2 of the License, or (at your option) any later version.
> +
> + This library is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + Lesser General Public License for more details.
> +
> + You should have received a copy of the GNU Lesser General Public
> + License along with this library; if not, write to the Free Software
> + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +*)
> +
> +module C = Configurator.V1
> +
> +let discover c =
> + let package = "libvirt" in
> + let minversion = "1.2.8" in
> + let expr = package ^ " >= " ^ minversion in
> + let pkgconfig =
> + match C.Pkg_config.get c with
> + | None -> C.die "pkg-config not available"
> + | Some pc -> pc in
> + let conf =
> + match C.Pkg_config.query_expr pkgconfig ~package ~expr with
> + | None -> C.die "%s not found" package
> + | Some deps -> deps in
> + C.Flags.write_sexp "c_flags.sexp" conf.cflags;
> + C.Flags.write_sexp "c_library_flags.sexp" conf.libs;
> + if C.which c "perl" = None then
> + C.die "perl not found"
> +
> +let () =
> + C.main ~name:"discover" discover
> diff --git a/libvirt/dune b/libvirt/dune
> new file mode 100644
> index 0000000..7e31a8e
> --- /dev/null
> +++ b/libvirt/dune
> @@ -0,0 +1,57 @@
> +; OCaml bindings for libvirt.
> +; (C) Copyright 2020 Pino Toscano, Red Hat Inc.
> +;
> +; This library is free software; you can redistribute it and/or
> +; modify it under the terms of the GNU Lesser General Public
> +; License as published by the Free Software Foundation; either
> +; version 2 of the License, or (at your option) any later version.
> +;
> +; This library is distributed in the hope that it will be useful,
> +; but WITHOUT ANY WARRANTY; without even the implied warranty of
> +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +; Lesser General Public License for more details.
> +;
> +; You should have received a copy of the GNU Lesser General Public
> +; License along with this library; if not, write to the Free Software
> +; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +(include ../dune.inc)
> +
> +(library
> + (name mllibvirt)
> + (synopsis "libvirt bindings for OCaml")
> + (public_name mllibvirt)
> + (modules Libvirt Libvirt_version)
> + (wrapped false)
> + (c_names libvirt_c_common libvirt_generated libvirt_c_oneoffs)
> + (c_flags (:include c_flags.sexp) -DCAML_NAME_SPACE -fPIC -Wall -g)
> + (c_library_flags (:include c_library_flags.sexp)))
> +
> +(executable
> + (name discover)
> + (modules Discover)
> + (libraries dune.configurator))
> +
> +(rule
> + (targets c_flags.sexp c_library_flags.sexp)
> + (deps (:discover discover.exe))
> + (action (run %{discover})))
> +
> +(rule
> + (targets libvirt_generated.c)
> + (deps (:generator generator.pl))
> + (action (run %{generator})))
> +
> +(rule
> + (targets libvirt_version.ml)
> + (deps (:version_in libvirt_version.ml.in))
> + (action (with-stdout-to %{targets}
> + (run sed "s/@PACKAGE_NAME@/ocaml-libvirt/;s/@PACKAGE_VERSION@/%{version:mllibvirt}/;" %{version_in}))))
> +
> +(alias
> + (name htmldoc)
> + (deps (universe)) ; let it run everytime
> + (action (progn
> + (run rm -rf html)
> + (run mkdir html)
> + (run ocamldoc -html -sort -colorize-code -d html %{dep:libvirt.mli} %{dep:libvirt_version.mli}))))
> diff --git a/libvirt/dune-project b/libvirt/dune-project
> new file mode 100644
> index 0000000..5ede662
> --- /dev/null
> +++ b/libvirt/dune-project
> @@ -0,0 +1,2 @@
> +(lang dune 1.0)
> +(version 0.6.1.5)
> diff --git a/libvirt/mllibvirt.opam b/libvirt/mllibvirt.opam
> new file mode 100644
> index 0000000..23eee04
> --- /dev/null
> +++ b/libvirt/mllibvirt.opam
> @@ -0,0 +1,33 @@
> +opam-version: "2.0"
> +name: "mllibvirt"
> +authors: "Richard W.M. Jones <rjones at redhat.com>"
> +maintainer: "Richard W.M. Jones <rjones at redhat.com>"
> +homepage: "https://libvirt.org/ocaml/"
> +dev-repo: "https://gitlab.com/libvirt/libvirt-ocaml.git"
> +bug-reports: "https://libvirt.org/bugs.html"
> +synopsis: "Libvirt bindings for OCaml"
> +description: """libvirt bindings for OCaml
> +
> +Libvirt is a C toolkit to interact with the virtualization capabilities
> +of recent versions of Linux (and other OSes)."""
> +license: "LGPL-2+"
> +tags: [
> + "libvirt"
> +]
> +build: [
> + ["dune" "build"]
> +]
> +depends: [
> + "conf-pkg-config" {build}
> + "ocamlfind" {build}
> +]
> +depexts: [
> + ["libvirt-dev"] {os-family = "debian"}
> + ["libvirt-devel"] {os-family = "rhel"}
> + ["libvirt-devel"] {os-family = "suse"}
> + ["libvirt-devel"] {os-distribution = "mageia"}
> + ["libvirt"] {os = "macos" & os-distribution = "homebrew"}
> + ["libvirt-dev"] {os-distribution = "alpine"}
> + ["libvirt"] {os-distribution = "nixos"}
> + ["libvirt"] {os-distribution = "arch"}
> +]
> --
> 2.25.2
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
More information about the libvir-list
mailing list