mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-06 00:48:18 -07:00
184 lines
5.7 KiB
Bash
184 lines
5.7 KiB
Bash
# 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
|
|
}
|