summaryrefslogtreecommitdiff
path: root/dev-lang/mlton
diff options
context:
space:
mode:
authormirror@stealer.net <mirror@stealer.net>2025-01-31 23:30:19 +0000
committermirror@stealer.net <mirror@stealer.net>2025-01-31 23:30:19 +0000
commit5c2c98b0a579c7434b70e2ee8f3c8a7499298dbb (patch)
treeaa0268f668eb35627871a28d13ea8bf04d29d03d /dev-lang/mlton
2025-01-31 23:11:16+00:00grafted
Diffstat (limited to 'dev-lang/mlton')
-rw-r--r--dev-lang/mlton/Manifest6
-rw-r--r--dev-lang/mlton/files/mlton-20180207-bootstrap.patch27
-rw-r--r--dev-lang/mlton/files/mlton-20180207-paxmark.patch18
-rw-r--r--dev-lang/mlton/metadata.xml19
-rw-r--r--dev-lang/mlton/mlton-20180207.ebuild271
5 files changed, 341 insertions, 0 deletions
diff --git a/dev-lang/mlton/Manifest b/dev-lang/mlton/Manifest
new file mode 100644
index 0000000000000..9f5a45dfd1078
--- /dev/null
+++ b/dev-lang/mlton/Manifest
@@ -0,0 +1,6 @@
+AUX mlton-20180207-bootstrap.patch 980 BLAKE2B 4128d0d3aae1e30c6b234e9cc3e0d91ee6de7338e2f8d4e8da7bb5b63ea62138db3148f8ec9ab16966983587dac7c9040a52aea80d21409d5d8fdbb020d13f7f SHA512 7657185d7f4c4e9bff4fd44f3991cd3d115ea0e1e4f6c3b702ecba74a3b2fcb7c1c0c47a814dc26bd3af7a523a92aac50df4d4ddb873eba938c2689ac6b5cf0b
+AUX mlton-20180207-paxmark.patch 728 BLAKE2B 05bb27260dc8007a815ce74276a537a48127b4c336472afca571c39b0e29368be5be79ae03c21940dde6bd37f79613817adc8f22d986d570fab4cb184051b141 SHA512 78526ab383f481663cc892938f74ad1783aa7a2b1fcfd7032a67c4489daa5d141877806fb16232b8f0843e7b4e001d3f76a9a171a8da6413cd921688f493f7f9
+DIST mlton-20180207-1.amd64-linux.tgz 18772644 BLAKE2B 7fe2d9db7edfb2d3e301be88e90b7dffe1441ff315ddac1464ef42fb436be1a9dc4e2c03fdb93880779360aed04cb7662a1a5a733f2d4158082d228f718d8b93 SHA512 74ab847ff567cde365a113f8819bae69cc18df20c441a6c6666b600980d2687faf143311f42be21a261b2493dc5c45fbecb4737c599cf767c3680afec06c2e0c
+DIST mlton-20180207.src.tgz 25003695 BLAKE2B 8cddfe83c76e05fda446917ddc85035b3d74534fe4bc597a839cd13cb59a15538f40a3f68bb8f7136f9cf8cb27a582e88ca0d14b8f7a4582a202b3bd075f3c9a SHA512 3599159950e857d257abce92abf5c548dd9c0b0cdc4ba0d7cdf9badb5d997f73386cd1ff79f563221b394dd831cb344e287927f90683b0715678edb3ca0ae15a
+EBUILD mlton-20180207.ebuild 7126 BLAKE2B faf0969c45b8733f13337ca0df2f5ed24818162f4f8f67fd3ae4d58aa3af3b32680016f320412a642dc4b1aff66dd64f7e270236a1eb7c167cee9cbceacff28c SHA512 c9f792fe9eac895cd98f528d337d3415eb14206ca03ed709c3fdecc24a9c326e0a36f67e9b45cb7a79c8aac62fce7b7d7f793bd146f985cd560f07ecd1723e6e
+MISC metadata.xml 746 BLAKE2B 7a42ac83f43058486cd53bdf20666c2be5b0d02c17aa72cc0c8cdd65915449b345380580af44d0ddd230cc7ceba55c5371dc0f6149689ed6b70ceda6e93a6e12 SHA512 e8fb8097be40cd1d8a0fd06970393fdff95fdf21e56cd059f986bd7b26d3917acfbaec4fe00742c2db81c7791595014ccf93fa6efff44649a5c41ef991474184
diff --git a/dev-lang/mlton/files/mlton-20180207-bootstrap.patch b/dev-lang/mlton/files/mlton-20180207-bootstrap.patch
new file mode 100644
index 0000000000000..5287a809f5aa3
--- /dev/null
+++ b/dev-lang/mlton/files/mlton-20180207-bootstrap.patch
@@ -0,0 +1,27 @@
+--- mlton-20180207-orig/Makefile 2018-02-07 21:22:55.000000000 +1100
++++ mlton-20180207/Makefile 2018-02-28 11:28:00.639642560 +1100
+@@ -137,18 +137,22 @@
+ .PHONY: bootstrap-smlnj
+ bootstrap-smlnj:
+ $(MAKE) smlnj-mlton
+- $(RM) "$(BIN)/mlton"
++ $(MV) "$(BIN)/mlton" "$(BIN)/mlton.mlton"
++ $(CP) "$(BIN)/mlton.smlnj" "$(BIN)/mlton"
+ $(MAKE) BOOTSTRAP_MLTON=mlton.smlnj all
+ smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | sml 2>&1 1> /dev/null` && $(RM) "$(LIB)/mlton/mlton-smlnj.$$smlnj_heap_suffix"
+ $(RM) "$(BIN)/mlton.smlnj"
++ $(MV) "$(BIN)/mlton.mlton" "$(BIN)/mlton"
+
+ .PHONY: bootstrap-polyml
+ bootstrap-polyml:
+ $(MAKE) polyml-mlton
+- $(RM) "$(BIN)/mlton"
++ $(MV) "$(BIN)/mlton" "$(BIN)/mlton.mlton"
++ $(CP) "$(BIN)/mlton.polyml" "$(BIN)/mlton"
+ $(MAKE) BOOTSTRAP_MLTON=mlton.polyml all
+ $(RM) "$(LIB)/mlton-polyml$(EXE)"
+ $(RM) "$(BIN)/mlton.polyml"
++ $(MV) "$(BIN)/mlton.mlton" "$(BIN)/mlton"
+
+ .PHONY: clean
+ clean:
diff --git a/dev-lang/mlton/files/mlton-20180207-paxmark.patch b/dev-lang/mlton/files/mlton-20180207-paxmark.patch
new file mode 100644
index 0000000000000..00f4b84c7dc96
--- /dev/null
+++ b/dev-lang/mlton/files/mlton-20180207-paxmark.patch
@@ -0,0 +1,18 @@
+--- mlton-20180207-orig/Makefile 2018-02-07 21:22:55.000000000 +1100
++++ mlton-20180207/Makefile 2018-02-28 11:27:30.448517470 +1100
+@@ -51,6 +51,7 @@
+ SED := sed
+ TAR := tar
+ XARGS := xargs
++PAXMARK := true
+
+ ######################################################################
+ ######################################################################
+@@ -97,6 +98,7 @@
+ all:
+ $(MAKE) dirs runtime
+ $(MAKE) compiler CHECK_FIXPOINT=false # tools0 + mlton0 -> mlton1
++ $(PAXMARK) -m lib/mlton/mlton-compile bin/mllex bin/mlyacc
+ $(MAKE) script basis-no-check constants basis-check libraries
+ $(MAKE) tools CHECK_FIXPOINT=false # tools0 + mlton1 -> tools1
+ ifeq (true, $(findstring true,$(BOOTSTRAP) $(CHECK_FIXPOINT)))
diff --git a/dev-lang/mlton/metadata.xml b/dev-lang/mlton/metadata.xml
new file mode 100644
index 0000000000000..4b9fb56b4de7d
--- /dev/null
+++ b/dev-lang/mlton/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <use>
+ <flag name="binary">install a binary version</flag>
+ <flag name="bootstrap-smlnj">Boostrap mlton with <pkg>dev-lang/smlnj</pkg>
+ (takes a long time)</flag>
+ <flag name="stage3">After bootstrap building mlton with
+ <pkg>dev-lang/smlnj</pkg>, rebuild mlton with the second stage build of
+ mlton (recommended).</flag>
+ <flag name="pax-kernel">Enable if the user plans to run the
+ package under a pax enabled hardened kernel</flag>
+ </use>
+ <upstream>
+ <remote-id type="sourceforge">mlton</remote-id>
+ <remote-id type="github">MLton/mlton</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-lang/mlton/mlton-20180207.ebuild b/dev-lang/mlton/mlton-20180207.ebuild
new file mode 100644
index 0000000000000..44e66eaa657c0
--- /dev/null
+++ b/dev-lang/mlton/mlton-20180207.ebuild
@@ -0,0 +1,271 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit check-reqs flag-o-matic multibuild pax-utils
+
+DESCRIPTION="Standard ML optimizing compiler and libraries"
+BASE_URI="https://downloads.sourceforge.net/${PN}"
+SRC_URI="!binary? ( ${BASE_URI}/${P}.src.tgz )
+ !bootstrap-smlnj? ( amd64? ( ${BASE_URI}/${P}-1.amd64-linux.tgz ) )"
+HOMEPAGE="http://www.mlton.org"
+
+LICENSE="HPND MIT"
+SLOT="0/${PV}"
+KEYWORDS="~amd64 ~x86"
+IUSE="binary bootstrap-smlnj stage3 doc pax-kernel"
+
+DEPEND="dev-libs/gmp:*
+ bootstrap-smlnj? ( dev-lang/smlnj )
+ !bootstrap-smlnj? (
+ !amd64? ( dev-lang/smlnj )
+ )
+ pax-kernel? ( sys-apps/elfix )
+ doc? ( virtual/latex-base )"
+RDEPEND="dev-libs/gmp:*"
+
+QA_PRESTRIPPED="binary? (
+ usr/lib64/${PN}/bin/mlnlffigen
+ usr/lib64/${PN}/bin/mllex
+ usr/lib64/${PN}/bin/mlprof
+ usr/lib64/${PN}/bin/mlyacc
+ usr/lib64/${PN}/lib/mlton-compile
+ usr/lib/${PN}/bin/mlnlffigen
+ usr/lib/${PN}/bin/mllex
+ usr/lib/${PN}/bin/mlprof
+ usr/lib/${PN}/bin/mlyacc
+ usr/lib/${PN}/lib/mlton-compile
+)"
+
+B="${P}-1.${ARCH}-${KERNEL}"
+R="${WORKDIR}/${B}"
+
+mlton_subdir() {
+ echo $(get_libdir)/${PN}
+}
+
+mlton_dir() {
+ echo "${EPREFIX}"/usr/$(mlton_subdir)
+}
+
+mlton_memory_requirement() {
+ # The resident set size of compiling mlton with mlton is almost 14GB on amd64.
+ # http://mlton.org/SelfCompiling
+ # Compiling MLton requires at least 1GB of RAM for 32-bit platforms (2GB is
+ # preferable) and at least 2GB RAM for 64-bit platforms (4GB is preferable).
+ # If your machine has less RAM, self-compilation will likely fail, or at least
+ # take a very long time due to paging. Even if you have enough memory, there
+ # simply may not be enough available, due to memory consumed by other
+ # processes. In this case, you may see an Out of memory message, or
+ # self-compilation may become extremely slow. The only fix is to make sure
+ # that enough memory is available.
+ [[ ${ARCH} == "x86" ]] && echo "2G" || echo "4G"
+}
+
+pkg_pretend() {
+ if use !binary; then
+ local CHECKREQS_MEMORY=$(mlton_memory_requirement)
+ check-reqs_pkg_pretend
+ fi
+}
+
+pkg_setup() {
+ if use !binary; then
+ local CHECKREQS_MEMORY=$(mlton_memory_requirement)
+ check-reqs_pkg_setup
+ fi
+}
+
+mlton_bootstrap_variant() {
+ local b=""
+ if use bootstrap-smlnj || ! use amd64; then
+ b="bootstrap-smlnj"
+ else
+ b="bootstrap"
+ fi
+ echo "${b}"
+}
+
+mlton_bootstrap_build_dir() {
+ echo "$(basename "${S}")-$(mlton_bootstrap_variant)"
+}
+
+mlton_bootstrap_bin_dir() {
+ local b=$(mlton_bootstrap_build_dir)
+ if use bootstrap-smlnj || ! use amd64; then
+ b+="/build/bin"
+ else
+ b+="/bin"
+ fi
+ echo "${b}"
+}
+
+# Return the array of multilib build variants
+mlton_multibuild_variants() {
+ local MULTIBUILD_VARIANTS=()
+ if ! use binary; then
+ if use bootstrap-smlnj || ! use amd64; then
+ MULTIBUILD_VARIANTS+=( $(mlton_bootstrap_variant) )
+ use stage3 && MULTIBUILD_VARIANTS+=( build-with-mlton )
+ else
+ MULTIBUILD_VARIANTS+=( build-with-mlton )
+ fi
+ fi
+ echo ${MULTIBUILD_VARIANTS[*]}
+}
+
+# Return the last multibuild variant
+mlton_last_multibuild_variant() {
+ local vs=( $(mlton_multibuild_variants) )
+ echo ${vs[${#vs[@]}-1]}
+}
+
+src_unpack() {
+ default
+ if use binary; then
+ mkdir -p "${S}" || die
+ fi
+}
+
+BIN_STUBS=( mllex mlnlffigen mlprof mlton mlyacc )
+
+mlton_create_bin_stubs() {
+ local SUBDIR=$(mlton_subdir)
+ mkdir "${S}"/bin_stubs || die
+ pushd "${S}"/bin_stubs || die
+ for i in ${BIN_STUBS[*]}; do
+ cat <<- EOF >> ${i}
+ #!/bin/bash
+ exec ${EPREFIX}/usr/${SUBDIR}/bin/${i} \$*
+ EOF
+ chmod a+x ${i} || die
+ done
+ popd || die
+}
+
+src_prepare() {
+ if ! use binary; then
+ # For Gentoo hardened: paxmark the mlton-compiler, mllex and mlyacc executables
+ eapply "${FILESDIR}/${PN}-20180207-paxmark.patch"
+ # Fix the bootstrap-smlnj and bootstrap-polyml Makefile targets
+ eapply "${FILESDIR}/${PN}-20180207-bootstrap.patch"
+ fi
+
+ default
+
+ $(mlton_create_bin_stubs)
+
+ if use binary; then
+ pax-mark m "${R}/lib/${PN}/mlton-compile"
+ pax-mark m "${R}/bin/mllex"
+ pax-mark m "${R}/bin/mlyacc"
+ ln -s ${R} ../$(mlton_bootstrap_build_dir) || die
+ gunzip ${R}/share/man/man1/*.gz || die
+ else
+ local MULTIBUILD_VARIANTS=( $(mlton_multibuild_variants) )
+ multibuild_copy_sources
+ if ! use bootstrap-smlnj && [[ ${ARCH} == "amd64" ]]; then
+ ln -s ${B} ../$(mlton_bootstrap_build_dir) || die
+ fi
+ fi
+}
+
+mlton_src_compile() {
+ # produces invalid codegen for twelf
+ # https://bugs.gentoo.org/863266
+ filter-lto
+
+ if [[ ${MULTIBUILD_VARIANT} == $(mlton_bootstrap_variant) ]]; then
+ emake -j1 \
+ "bootstrap-smlnj" \
+ PAXMARK=$(usex pax-kernel "paxmark.sh" "true") \
+ CFLAGS="${CFLAGS}" \
+ WITH_GMP_INC_DIR="${EPREFIX}"/usr/include \
+ WITH_GMP_LIB_DIR="${EPREFIX}"/$(get_libdir)
+ else
+ export PATH="${WORKDIR}/"$(mlton_bootstrap_bin_dir)":${PATH}"
+ einfo "${MULTIBUILD_VARIANT}: Building mlton with mlton in PATH=$PATH"
+ emake -j1 \
+ CFLAGS="${CFLAGS}" \
+ WITH_GMP_INC_DIR="${EPREFIX}"/usr/include \
+ WITH_GMP_LIB_DIR="${EPREFIX}"/$(get_libdir)
+ fi
+ if [[ ${MULTIBUILD_VARIANT} == $(mlton_last_multibuild_variant) ]]; then
+ if use doc; then
+ export VARTEXFONTS="${T}/fonts"
+ emake docs
+ fi
+ fi
+}
+
+src_compile() {
+ if ! use binary; then
+ local MULTIBUILD_VARIANTS=( $(mlton_multibuild_variants) )
+ multibuild_foreach_variant run_in_build_dir mlton_src_compile
+ fi
+}
+
+mlton_src_test() {
+ emake check
+}
+
+src_test() {
+ if ! use binary; then
+ local MULTIBUILD_VARIANTS=( $(mlton_last_multibuild_variant) )
+ multibuild_foreach_variant run_in_build_dir mlton_src_test
+ fi
+}
+
+mlton_src_install() {
+ local DIR=$(mlton_dir)
+ emake \
+ install-no-strip install-strip \
+ DESTDIR="${D}" \
+ PREFIX="${DIR}"
+ if use doc; then
+ emake TDOC="${D}"/usr/share/doc/${PF} install-docs \
+ DESTDIR="${D}" \
+ PREFIX="${DIR}"
+ fi
+}
+
+mlton_install_bin_stubs() {
+ exeinto /usr/bin
+ for i in ${BIN_STUBS[*]}; do
+ doexe "${S}"/bin_stubs/${i}
+ done
+}
+
+src_install() {
+ $(mlton_install_bin_stubs)
+ if use binary; then
+ local DIR=$(mlton_dir)
+ exeinto "${DIR}"/bin
+ doexe "${R}"/bin/*
+ insinto "${DIR}"/lib
+ doins -r "${R}"/lib/${PN}
+ exeinto "${DIR}"/lib/${PN}
+ doexe "${R}"/lib/${PN}/mlton-compile
+ doman "${R}"/share/man/man1/*
+ if use doc; then
+ local DOCS=( "${R}"/share/doc/${PN}/. )
+ einstalldocs
+ fi
+ else
+ local MULTIBUILD_VARIANTS=( $(mlton_last_multibuild_variant) )
+ multibuild_foreach_variant run_in_build_dir mlton_src_install
+ fi
+}
+
+pkg_postinst() {
+ # There are PIC objects in libmlton-pic.a. -link-opt -lmlton-pic does not help as mlton
+ # specifies -lmlton before -lmlton-pic. It appears that it would be necessary to patch mlton
+ # to convince mlton to use the lib*-pic.a libraries when linking an executable.
+ ewarn 'PIE in Gentoo hardened requires executables to be linked with -fPIC. mlton by default links'
+ ewarn 'executables against the non PIC objects in libmlton.a. http://mlton.org/MLtonWorld notes:'
+ ewarn 'Executables that save and load worlds are incompatible with address space layout'
+ ewarn 'randomization (ASLR) of the executable.'
+ ewarn 'To suppress the generation of position-independent executables.'
+ ewarn '-link-opt -fno-PIE'
+}