edune is a thin wrapper for dune, which will help to run special,
uncommon dune commands;
dune-compile is a function to selectively pick which packages will be
compiled "for-release" (as dune call it);
dune-compile without any arguments replaces the current dune_src_compile

Signed-off-by: Maciej Barć <x...@gentoo.org>
---
 eclass/dune.eclass | 47 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 43 insertions(+), 4 deletions(-)

diff --git a/eclass/dune.eclass b/eclass/dune.eclass
index 4bc73eda8..6c760accd 100644
--- a/eclass/dune.eclass
+++ b/eclass/dune.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2022 Gentoo Authors
+# Copyright 1999-2023 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: dune.eclass
@@ -44,15 +44,54 @@ BDEPEND="
        dev-ml/dune
 "
 
+# @FUNCTION: edune
+# @USAGE: <arg> ...
+# @DESCRIPTION:
+# A thin wrapper for the `dune` command.
+# Runs `dune` with given arguments and dies on failure.
+#
+# Example use:
+# @CODE
+# edune clean
+# @CODE
+edune() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       dune "${@}" || die "dune call failed, given arguments: ${@}"
+}
+
+# @FUNCTION: dune-compile
+# @USAGE: [package] ...
+# @DESCRIPTION:
+# Compiles either all of packages sources in current directory or selected
+# packages. In case of all packages the package detection is done via dune
+# itself.
+#
+# Example use:
+# @CODE
+# dune-compile menhir menhirLib menhirSdk
+# @CODE
+dune-compile() {
+       local -a myduneopts=(
+               -j $(makeopts_jobs)
+               --profile release
+       )
+       if [[ -n "${1}" ]] ; then
+               myduneopts+=( --for-release-of-packages="$(IFS="," ; echo 
"${*}")" )
+       fi
+
+       edune build @install "${myduneopts[@]}"
+}
+
 dune_src_compile() {
        ebegin "Building"
-       dune build @install -j $(makeopts_jobs) --profile release
+       dune-compile
        eend $? || die
 }
 
 dune_src_test() {
        ebegin "Testing"
-       dune runtest -j $(makeopts_jobs) --profile release
+       edune runtest -j $(makeopts_jobs) --profile release
        eend $? || die
 }
 
@@ -80,7 +119,7 @@ dune-install() {
        local pkg
        for pkg in "${pkgs[@]}" ; do
                ebegin "Installing ${pkg}"
-               dune install ${myduneopts[@]} ${pkg}
+               edune install ${myduneopts[@]} ${pkg}
                eend $? || die
 
                # Move docs to the appropriate place.
-- 
2.38.2


Reply via email to