Install this version:
emerge -a =dev-ml/dune-3.23.1
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =dev-ml/dune-3.23.1
Or alternatively:
emerge --autounmask-write -a =dev-ml/dune-3.23.1
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=9
inherit multiprocessing elisp-common
DESCRIPTION="A composable build system for OCaml"
HOMEPAGE="https://github.com/ocaml/dune"
SRC_URI="https://github.com/ocaml/dune/archive/${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="MIT"
SLOT="0/${PV}"
KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64"
IUSE="emacs test"
RESTRICT="strip !test? ( test )"
RDEPEND="
dev-lang/ocaml:=
emacs? ( >=app-editors/emacs-23.1:* )
"
DEPEND="${RDEPEND}"
BDEPEND="
test? (
app-misc/jq
dev-debug/strace
>=dev-lang/ocaml-5.4.0
dev-ml/csexp
dev-ml/lwt
dev-ml/pp
dev-ml/ppx_expect
dev-ml/re
dev-ml/spawn
dev-ml/uutf
dev-vcs/git
)
"
QA_FLAGS_IGNORED="usr/bin/dune"
BYTECOMPFLAGS="-L ${S}/editor-integration/emacs"
SITEFILE="50${PN}-gentoo.el"
src_prepare() {
default
# This allows `dune --version` to output the correct version
# instead of "n/a"
sed -i "/^(name dune)/a (version ${PV})" dune-project || die
# the dune-project file for dune includes generating .opam files,
# but they differ from the committed versions in that they include a
# version entry. Supposedly "dune promote" should be able to update
# these files, but it always fails with an error that the generated
# opam files do not match the committed ones (because of this
# version field). These files are not in the install image, they
# only trip up testing.
find opam -name '*.opam' -exec sed -i "/^opam-version: \"2.0\"/a version: \"${PV}\"" {} + || die
# Remove tests from test/blackbox-tests that don't work for various
# reasons. The majority of these are taken from Debian's testing, but
# the list is expanded with additional tests that fail (for example,
# because unpackaged dependencies like js_of_ocaml)
#
# See: https://salsa.debian.org/ocaml-team/ocaml-dune/-/blob/master/debian/rules?ref_type=heads
# Tests that need melc
rm -r test/blackbox-tests/test-cases/melange || die
rm -r test/blackbox-tests/test-cases/merlin || die
# Tests that need files in /usr/doc
rm -r test/blackbox-tests/test-cases/cinaps || die
rm -r test/blackbox-tests/test-cases/inline-tests || die
rm -r test/blackbox-tests/test-cases/ppx || die
rm -r test/blackbox-tests/test-cases/utop || die
rm -r test/blackbox-tests/test-cases/jsoo || die
rm -r test/blackbox-tests/test-cases/ctypes || die
# Tests with other unsatisfied assumptions
rm -r test/blackbox-tests/test-cases/custom-cross-compilation || die
rm -r test/blackbox-tests/test-cases/subst || die
rm -r test/blackbox-tests/test-cases/pkg || die
rm test/blackbox-tests/test-cases/os-variables.t || die
rm -r test/blackbox-tests/test-cases/cram || die
rm -r test/blackbox-tests/test-cases/actions || die
#rm -r test/blackbox-tests/test-cases/foreign-stubs/github7146.t || die
rm -r test/expect-tests/vcs || die
# Many expect-tests fail, but common and test_scheduler are needed for the rest
mkdir test-libs || die
mv test/expect-tests/{common,test_scheduler} test-libs || die
rm -r test/expect-tests || die
# Flaky tests (to be investigated)
rm -r otherlibs/dune-site/test || die # failed on amd64
rm -r otherlibs/dune-rpc-lwt/examples/rpc_client/test || die # failed on riscv64
rm -r otherlibs/dune-rpc-lwt/test || die # failed on s390x
rm -r otherlibs/stdune/test || die # failed on i386
# requires dev-ml/opam
rm -r test/blackbox-tests/test-cases/stanzas || die
rm test/blackbox-tests/test-cases/empty-meta-version-gh9176.t || die
rm -r test/blackbox-tests/test-cases/workspaces || die
# requires js_of_ocaml
rm -r test/blackbox-tests/test-cases/separate-compilation-github3622 || die
# requires dev-ml/odoc
rm -r test/blackbox-tests/test-cases/odoc || die
rm -r test/blackbox-tests/test-cases/install-mld-pages || die
# requires dev-ml/menhir
rm -r test/blackbox-tests/test-cases/menhir || die
rm -r test/blackbox-tests/test-cases/formatting || die
# fails with a diff
rm -r test/blackbox-tests/test-cases/trace/action-traces || die
rm -r test/blackbox-tests/test-cases/trace/first-last-events.t || die
rm -r test/blackbox-tests/test-cases/tests-locks.t || die
rm -r test/blackbox-tests/test-cases/install-dir || die
# attempts to install outside of build dir
rm -r test/blackbox-tests/test-cases/install || die
# fails with newer versions of dune (> 3.17)
rm -r test/blackbox-tests/test-cases/hidden-deps-unsupported.t || die
# requires fdo
rm -r test/blackbox-tests/test-cases/fdo.t || die
}
src_configure() {
local confargs=(
--libdir="$(ocamlc -where)"
--mandir="${EPREFIX}"/usr/share/man
--docdir="${EPREFIX}"/usr/share/doc
--etcdir="${EPREFIX}"/etc
--datadir="${EPREFIX}"/usr/share
--sbindir="${EPREFIX}"/usr/sbin
--bindir="${EPREFIX}"/usr/bin
)
edo ./configure "${confargs[@]}"
}
src_compile() {
edo ocaml boot/bootstrap.ml -j $(get_makeopts_jobs) --verbose
local buildargs=(
build dune.install
-p "${PN}"
--profile dune-bootstrap
-j "$(get_makeopts_jobs)"
--display short
)
edo ./_boot/dune.exe "${buildargs[@]}"
use emacs && elisp-compile editor-integration/emacs/*.el
}
src_test() {
# Dune's own approach to testing relies on opam switches and
# vendored copies of necessary dependencies. The majority of these
# dependencies require dune itself to build.
#
# We take an approach similar to Debian where we keep the majority
# of the tests and remove those that don't work for whatever reason.
edo ./_boot/dune.exe runtest --display short
}
src_install() {
# OCaml generates textrels on 32-bit arches
if use arm || use ppc || use x86 ; then
export QA_TEXTRELS='.*'
fi
default
mv "${ED}"/usr/share/doc/dune "${ED}"/usr/share/doc/${PF} || die
if use emacs ; then
elisp-install ${PN} editor-integration/emacs/*.el{,c}
elisp-site-file-install "${FILESDIR}/${SITEFILE}"
fi
}
Manage flags for this package:
euse -i <flag> -p dev-ml/dune |
euse -E <flag> -p dev-ml/dune |
euse -D <flag> -p dev-ml/dune
dev-lang/ocaml:= emacs? ( >=app-editors/emacs-23.1:* )
dev-lang/ocaml:= emacs? ( >=app-editors/emacs-23.1:* )
test? ( app-misc/jq dev-debug/strace >=dev-lang/ocaml-5.4.0 dev-ml/csexp dev-ml/lwt dev-ml/pp dev-ml/ppx_expect dev-ml/re dev-ml/spawn dev-ml/uutf dev-vcs/git )
| Type | File | Size | Source URLs |
|---|---|---|---|
| DIST | dune-3.23.1.tar.gz | 3710713 bytes | https://github.com/ocaml/dune/archive/3.23.1.tar.gz |