diff options
author | Mark Wright <gienah@gentoo.org> | 2018-03-11 10:29:58 +1100 |
---|---|---|
committer | Mark Wright <gienah@gentoo.org> | 2018-03-11 10:30:52 +1100 |
commit | b740f3f14324d405b1dddf4335e168e1ea2eee21 (patch) | |
tree | 88fa01acb0ddf84a4c4eef7544847ba76dfe11b8 /dev-lang/smlnj/smlnj-110.82.ebuild | |
parent | profiles: Mask app-i18n/libguess for removal (diff) | |
download | gentoo-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.ebuild | 166 |
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/* +} |