summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wright <gienah@gentoo.org>2018-03-11 10:29:58 +1100
committerMark Wright <gienah@gentoo.org>2018-03-11 10:30:52 +1100
commitb740f3f14324d405b1dddf4335e168e1ea2eee21 (patch)
tree88fa01acb0ddf84a4c4eef7544847ba76dfe11b8 /dev-lang/smlnj/smlnj-110.82.ebuild
parentprofiles: Mask app-i18n/libguess for removal (diff)
downloadgentoo-b740f3f14324d405b1dddf4335e168e1ea2eee21.tar.gz
gentoo-b740f3f14324d405b1dddf4335e168e1ea2eee21.tar.bz2
gentoo-b740f3f14324d405b1dddf4335e168e1ea2eee21.zip
dev-lang/smlnj: Bump to 110.82, fix install dirs, build on pax kernels.
Bump to 110.82, fixes 487064 , thanks to Keshav Kini and OGINO Masanori for reporting. Install to the smlnj subdirectory underneath the 32 bit lib directory if it exists, or the 64 bit lib directory otherwise, and create symlinks in /usr/bin to point to the executables. Fixes 248162, thanks to flameeyes for reporting, xmv and hkbst for helping. Fix build on pax kernels, fixes 564132, thanks to Fedja Beader for reporting. Closes: https://bugs.gentoo.org/487064 Closes: https://bugs.gentoo.org/248162 Closes: https://bugs.gentoo.org/564132 Package-Manager: Portage-2.3.24, Repoman-2.3.6
Diffstat (limited to 'dev-lang/smlnj/smlnj-110.82.ebuild')
-rw-r--r--dev-lang/smlnj/smlnj-110.82.ebuild166
1 files changed, 166 insertions, 0 deletions
diff --git a/dev-lang/smlnj/smlnj-110.82.ebuild b/dev-lang/smlnj/smlnj-110.82.ebuild
new file mode 100644
index 000000000000..1df1108e8973
--- /dev/null
+++ b/dev-lang/smlnj/smlnj-110.82.ebuild
@@ -0,0 +1,166 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="6"
+
+inherit eutils multilib toolchain-funcs
+
+DESCRIPTION="Standard ML of New Jersey compiler and libraries"
+HOMEPAGE="http://www.smlnj.org"
+
+BASE_URI="http://smlnj.cs.uchicago.edu/dist/working/${PV}"
+
+FILES="
+doc.tgz
+
+config.tgz
+
+cm.tgz
+compiler.tgz
+runtime.tgz
+system.tgz
+MLRISC.tgz
+smlnj-lib.tgz
+old-basis.tgz
+
+ckit.tgz
+nlffi.tgz
+
+cml.tgz
+eXene.tgz
+
+ml-lpt.tgz
+ml-lex.tgz
+ml-yacc.tgz
+ml-burg.tgz
+
+pgraph.tgz
+trace-debug-profile.tgz
+
+heap2asm.tgz
+
+smlnj-c.tgz
+"
+
+#use amd64 in 32-bit mode
+SRC_URI="amd64? ( ${BASE_URI}/boot.x86-unix.tgz -> ${P}-boot.x86-unix.tgz )
+ ppc? ( ${BASE_URI}/boot.ppc-unix.tgz -> ${P}-boot.ppc-unix.tgz )
+ sparc? ( ${BASE_URI}/boot.sparc-unix.tgz -> ${P}-boot.sparc-unix.tgz )
+ x86? ( ${BASE_URI}/boot.x86-unix.tgz -> ${P}-boot.x86-unix.tgz )"
+
+for file in ${FILES}; do
+ SRC_URI+=" ${BASE_URI}/${file} -> ${P}-${file} "
+done
+
+LICENSE="BSD"
+SLOT="0"
+
+#sparc support should be there but is untested
+KEYWORDS="-* ~amd64 ~ppc ~x86"
+IUSE="pax_kernel"
+DEPEND="pax_kernel? ( sys-apps/elfix )"
+RDEPEND=""
+
+S=${WORKDIR}
+
+src_unpack() {
+ mkdir -p "${S}"
+ for file in ${A}; do
+ [[ ${file} != ${P}-config.tgz ]] && cp "${DISTDIR}/${file}" "${S}/${file#${P}-}"
+ done
+
+# make sure we don't use the internet to download anything
+ unpack ${P}-config.tgz && rm config/*.bat
+ echo SRCARCHIVEURL=\"file:/${S}\" > "${S}"/config/srcarchiveurl
+}
+
+src_prepare() {
+ # respect CC et al. (bug 243886)
+ mkdir base || die # without this unpacking runtime will fail
+ ./config/unpack "${S}" runtime || die
+ epatch "${FILESDIR}/${PN}-110.82-pax-p1.patch"
+ epatch "${FILESDIR}/${PN}-110.82-pax-p2.patch"
+ epatch "${FILESDIR}/${PN}-110.82-pax-p3.patch"
+ default
+ for file in mk.*; do
+ sed -e "/^AS/s:as:$(tc-getAS):" \
+ -e "/^CC/s:gcc:$(tc-getCC):" \
+ -e "/^CPP/s:gcc:$(tc-getCC):" \
+ -e "/^CFLAGS/{s:-O[0123s]:: ; s:=:= ${CFLAGS}:}" \
+ -e "/^PAXMARK/s:true:"$(usex pax_kernel "paxmark.sh" "true")":" \
+ -i base/runtime/objs/${file}
+ done
+}
+
+src_compile() {
+ SMLNJ_HOME="${S}" \
+ ./config/install.sh || die "compilation failed"
+}
+
+# Return an array which has the element $1 removed from the array $[@]:1
+# i.e. return an array where the first function argument $1 removed from
+# the array consisting of the rest of the function arguments.
+remove_element_from_array() {
+ local args=("$@")
+ local e=${args[0]}
+ local oa=()
+ for x in "${args[@]:1}"; do
+ if [ ${x} != ${e} ]; then
+ oa+=( ${x} )
+ fi
+ done
+ echo "${oa[@]}"
+}
+
+# smlnj 110.82 is still only 32 bit. On a multilib 64 bit system
+# smlnj_get_libdir tries to find the 32 bit lib directory. Or otherwise,
+# just return the system lib directory $(get_libdir).
+smlnj_get_libdir() {
+ local x=$(get_all_libdirs)
+ # Remove the native lib dir
+ local y=$(remove_element_from_array $(get_libdir) ${x[@]})
+ # Remove libx32 if it exists
+ local z=$(remove_element_from_array "libx32" ${y[@]})
+ # However if the system is not multlib, then we still need to install
+ # the 32 bit smlnj executables and libraries somewhere, so I guess we
+ # just have to put them under the system lib directory. Put the
+ # native lib dir back on the end of the array.
+ z+=( $(get_libdir) )
+ # Then return the first element of the array, which should be the 32 bit
+ # lib directory on multilib systems, or the 32 bit lib directory on
+ # 32 bit systems, or the system 64 bit lib directory on non-multilib
+ # 64 bit systems.
+ echo ${z[0]}
+}
+
+src_install() {
+ SUBDIR=$(smlnj_get_libdir)/${PN}
+ DIR=/usr/${SUBDIR}
+ for file in bin/{*,.*}; do
+ [[ -f ${file} ]] && sed -e "2iSMLNJ_HOME=${EPREFIX%/}/${DIR}" \
+ -e "s:${WORKDIR}:${EPREFIX%/}/${DIR}:" -i ${file}
+ done
+ dodir ${DIR}/bin
+ exeinto ${DIR}/bin
+ pushd bin || die
+ for i in .arch-n-opsys .link-sml .run-sml heap2exec ml-* sml; do
+ doexe ${i}
+ done
+ for i in heap2exec ml-* sml; do
+ dosym ../${SUBDIR}/bin/${i} /usr/bin/${i}
+ done
+ popd || die
+ dodir ${DIR}/bin/.heap
+ insinto ${DIR}/bin/.heap
+ doins bin/.heap/*
+ dodir ${DIR}/bin/.run
+ exeinto ${DIR}/bin/.run
+ pushd bin/.run || die
+ for i in run*; do
+ doexe ${i}
+ done
+ popd || die
+ insinto ${DIR}
+ doins -r lib
+ dodoc -r doc/*
+}