Skip to content

Commit

Permalink
dev-lang/mlton: Bump to 20180207, fix 295112 and 581128.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
markwright committed Mar 10, 2018
1 parent 328d04d commit 41d9275
Show file tree
Hide file tree
Showing 6 changed files with 322 additions and 4 deletions.
2 changes: 2 additions & 0 deletions dev-lang/mlton/Manifest
Original file line number Diff line number Diff line change
@@ -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
27 changes: 27 additions & 0 deletions dev-lang/mlton/files/mlton-20180207-bootstrap.patch
Original file line number Diff line number Diff line change
@@ -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:
18 changes: 18 additions & 0 deletions dev-lang/mlton/files/mlton-20180207-paxmark.patch
Original file line number Diff line number Diff line change
@@ -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)))
9 changes: 8 additions & 1 deletion dev-lang/mlton/metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
6 changes: 3 additions & 3 deletions dev-lang/mlton/mlton-20130715.ebuild
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down
264 changes: 264 additions & 0 deletions dev-lang/mlton/mlton-20180207.ebuild
Original file line number Diff line number Diff line change
@@ -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'
}

0 comments on commit 41d9275

Please sign in to comment.