commit:     41d92750d0948ebb53e6d0559ac7d1b378fecc9a
Author:     Mark Wright <gienah <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 10 23:43:42 2018 +0000
Commit:     Mark Wright <gienah <AT> gentoo <DOT> org>
CommitDate: Sat Mar 10 23:43:42 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=41d92750

dev-lang/mlton: Bump to 20180207, fix 295112 and 581128.

Fix 295112, thanks to flameeyes for reporting.  Fix 581128, thanks to
Toralf Forster for reporting.

Closes: https://bugs.gentoo.org/295112
Closes: https://bugs.gentoo.org/581128
Package-Manager: Portage-2.3.24, Repoman-2.3.6

 dev-lang/mlton/Manifest                            |   2 +
 .../mlton/files/mlton-20180207-bootstrap.patch     |  27 +++
 dev-lang/mlton/files/mlton-20180207-paxmark.patch  |  18 ++
 dev-lang/mlton/metadata.xml                        |   9 +-
 dev-lang/mlton/mlton-20130715.ebuild               |   6 +-
 dev-lang/mlton/mlton-20180207.ebuild               | 264 +++++++++++++++++++++
 6 files changed, 322 insertions(+), 4 deletions(-)

diff --git a/dev-lang/mlton/Manifest b/dev-lang/mlton/Manifest
index da29ca5c77d..11ed417f884 100644
--- a/dev-lang/mlton/Manifest
+++ b/dev-lang/mlton/Manifest
@@ -1,3 +1,5 @@
 DIST mlton-20130715-1.amd64-linux.tgz 19512324 BLAKE2B 
972688dcf6fc6ec17146e2597e6f5dab3b5df4e894697a98c68de61cf4728bf7e2e3ef1cee96befae90f9b555bed0b09cef846912225f8b770d20782fa833212
 SHA512 
ac41cf8b2afbba80ed25908b1842348eac1507b2aada103648171db1482358c4176b01d9266dfee053b20fc224653ec58ee9d3265672c02fa3774b7562a319bf
 DIST mlton-20130715-1.x86-linux.tgz 18065793 BLAKE2B 
d05ca4f46fb35b0b819e2678f282943fc9cd8f701bdf2a20da68b285db4618401b4138a227352e8aacef9f604528c7fafc0973631115954cfd91e01e9dd01a9d
 SHA512 
13a996952df27420f05f8290920055231156c8982c1cf3c31259d73e0c534258e2aad91596e51809719ffb0b74652aa052d296000f2ab99462714d4ef9a41859
 DIST mlton-20130715.src.tgz 25606142 BLAKE2B 
3fa3e8cf4991faef98e23ae4cbe9e0db5cae2e46ce27be57b784a81b576eeed17a179018e8b70d1264cb9595a3467900f034a2b4a7c114d1bac74025450741e1
 SHA512 
db273de47dc0059e830332b559918567f5153a0518e067ba71927e3705157f1984d6f6202201cef25aaef29d1a71a637e9a1cb30951e94dbfae4ab1a5e5d40d1
+DIST mlton-20180207-1.amd64-linux.tgz 18772644 BLAKE2B 
7fe2d9db7edfb2d3e301be88e90b7dffe1441ff315ddac1464ef42fb436be1a9dc4e2c03fdb93880779360aed04cb7662a1a5a733f2d4158082d228f718d8b93
 SHA512 
74ab847ff567cde365a113f8819bae69cc18df20c441a6c6666b600980d2687faf143311f42be21a261b2493dc5c45fbecb4737c599cf767c3680afec06c2e0c
+DIST mlton-20180207.src.tgz 25003695 BLAKE2B 
8cddfe83c76e05fda446917ddc85035b3d74534fe4bc597a839cd13cb59a15538f40a3f68bb8f7136f9cf8cb27a582e88ca0d14b8f7a4582a202b3bd075f3c9a
 SHA512 
3599159950e857d257abce92abf5c548dd9c0b0cdc4ba0d7cdf9badb5d997f73386cd1ff79f563221b394dd831cb344e287927f90683b0715678edb3ca0ae15a

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 00000000000..5287a809f5a
--- /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 00000000000..00f4b84c7dc
--- /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
index 6a46dc0bbde..e00a5b040ec 100644
--- a/dev-lang/mlton/metadata.xml
+++ b/dev-lang/mlton/metadata.xml
@@ -6,7 +6,14 @@
                <name>Gentoo ML Project</name>
        </maintainer>
        <use>
-               <flag name="binary">install a binary version (need to do this 
once to bootstrap, until smlnj is supported)</flag>
+               <flag name="binary">install a binary version</flag>
+               <flag name="bootstrap-smlnj">Boostrap mlton with dev-lang/smlnj
+               (takes a long time)</flag>
+               <flag name="stage3">After bootstrap building mlton with
+               dev-lang/smlnj, 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>

diff --git a/dev-lang/mlton/mlton-20130715.ebuild 
b/dev-lang/mlton/mlton-20130715.ebuild
index 8fc9db5dee2..a306bfabb1c 100644
--- a/dev-lang/mlton/mlton-20130715.ebuild
+++ b/dev-lang/mlton/mlton-20130715.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2014 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=5
@@ -21,9 +21,9 @@ SLOT="0/${PV}"
 KEYWORDS="-* ~amd64 ~x86"
 IUSE="binary doc"
 
-DEPEND="dev-libs/gmp
+DEPEND="dev-libs/gmp:*
                doc? ( virtual/latex-base )"
-RDEPEND="dev-libs/gmp"
+RDEPEND="dev-libs/gmp:*"
 
 QA_PRESTRIPPED="binary? (
        usr/bin/mlnlffigen

diff --git a/dev-lang/mlton/mlton-20180207.ebuild 
b/dev-lang/mlton/mlton-20180207.ebuild
new file mode 100644
index 00000000000..b8df540a09f
--- /dev/null
+++ b/dev-lang/mlton/mlton-20180207.ebuild
@@ -0,0 +1,264 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit check-reqs eutils multibuild pax-utils
+
+DESCRIPTION="Standard ML optimizing compiler and libraries"
+BASE_URI="mirror://sourceforge/${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
+               epatch "${FILESDIR}/${PN}-20180207-paxmark.patch"
+               # Fix the bootstrap-smlnj and bootstrap-polyml Makefile targets
+               epatch "${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() {
+       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'
+}

Reply via email to