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(a)redhat.com>
---
.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(a)redhat.com>"
+maintainer: "Richard W.M. Jones <rjones(a)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