commit:     633c73f60097058b43dba7210723af4d84b39008
Author:     Rafael Kitover <rkitover <AT> gmail <DOT> com>
AuthorDate: Thu Jun 11 19:27:14 2020 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 10:25:33 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=633c73f6

dune.eclass: new eclass

New eclass for the Dune build system for OCaml.

https://github.com/ocaml/dune

Based on oasis.eclass and opam.eclass for OCaml.

Signed-off-by: Rafael Kitover <rkitover <AT> gmail.com>
Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 eclass/dune.eclass | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/eclass/dune.eclass b/eclass/dune.eclass
new file mode 100644
index 00000000000..9ab6ec204c2
--- /dev/null
+++ b/eclass/dune.eclass
@@ -0,0 +1,65 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: dune.eclass
+# @MAINTAINER:
+# [email protected]
+# @AUTHOR:
+# Rafael Kitover <[email protected]>
+# @SUPPORTED_EAPIS: 5 6 7
+# @BLURB: Provides functions for installing dune packages.
+# @DESCRIPTION:
+# Provides dependencies on dune and ocaml and default src_compile, src_test and
+# src_install for dune-based packages.
+
+# @ECLASS-VARIABLE: DUNE_PKG_NAME
+# @DESCRIPTION:
+# Sets the actual dune package name, if different from gentoo package name.
+# Set before inheriting the eclass.
+
+case ${EAPI:-0} in
+       5|6|7) ;;
+       *) die "${ECLASS}: EAPI ${EAPI} not supported" ;;
+esac
+
+EXPORT_FUNCTIONS src_compile src_test src_install
+
+RDEPEND=">=dev-lang/ocaml-4:=[ocamlopt?]"
+DEPEND="${RDEPEND}
+       dev-ml/dune"
+
+dune_src_compile() {
+       dune build @install || die
+}
+
+dune_src_test() {
+       dune runtest || die
+}
+
+# @FUNCTION: dune-install
+# @USAGE: <list of packages>
+# @DESCRIPTION:
+# Installs the dune packages given as arguments. For each "${pkg}" element in
+# that list, "${pkg}.install" must be readable from "${PWD}/_build/default"
+dune-install() {
+       local pkg
+       for pkg ; do
+               dune install \
+                       --prefix="${ED%/}/usr" \
+                       --libdir="${D%/}$(ocamlc -where)" \
+                       "${pkg}" || die
+       done
+}
+
+dune_src_install() {
+       local pkg="${1:-${DUNE_PKG_NAME:-${PN}}}"
+
+       dune-install "${pkg}"
+
+       # Move docs to the appropriate place.
+       if [ -d "${ED%/}/usr/doc/${pkg}" ] ; then
+               mkdir -p "${ED%/}/usr/share/doc/${PF}/" || die
+               mv "${ED%/}/usr/doc/${pkg}/"* "${ED%/}/usr/share/doc/${PF}/" || 
die
+               rm -rf "${ED%/}/usr/doc" || die
+       fi
+}

Reply via email to