Julian Ospald
f05ef97410
This also introduces the bootstrap option, to use an official bindist for bootstrapping instead of an existing install.
189 lines
5.9 KiB
Bash
189 lines
5.9 KiB
Bash
# Copyright 2008 Santiago M. Mola
|
|
# Copyright 2008, 2009, 2010, 2011 Ingmar Vanhassel
|
|
# Copyright 2011 Markus Rothe
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
# Based in part upon 'ghc-6.8.2.ebuild' from Gentoo, which is:
|
|
# Copyright 1999-2008 Gentoo Foundation
|
|
# Copyright 2018 Julian Ospald <hasufell@posteo.de>
|
|
|
|
MY_PN="ghc"
|
|
MY_PNV="${MY_PN}-${PV}"
|
|
MY_PNVR="${MY_PN}-${PVR}"
|
|
BOOTSTRAP_PV="8.6.5"
|
|
|
|
require bash-completion flag-o-matic alternatives
|
|
require autotools [ supported_autoconf=[ 2.5 ] supported_automake=[ 1.15 ] ]
|
|
|
|
SUMMARY="The Glorious Glasgow Haskell Compilation System (non-haskell packages version)"
|
|
DESCRIPTION="
|
|
GHC is a state-of-the-art, open source, compiler and interactive environment for the functional
|
|
language Haskell.
|
|
"
|
|
HOMEPAGE="https://www.haskell.org/ghc/"
|
|
DOWNLOADS="
|
|
https://downloads.haskell.org/~ghc/${PV}/${MY_PNV}-src.tar.xz
|
|
https://downloads.haskell.org/~ghc/${PV}/${MY_PNV}-testsuite.tar.xz
|
|
bootstrap? ( https://downloads.haskell.org/~ghc/${BOOTSTRAP_PV}/ghc-${BOOTSTRAP_PV}-x86_64-fedora27-linux.tar.xz )
|
|
"
|
|
|
|
PLATFORMS="-* ~amd64"
|
|
|
|
BUGS_TO=""
|
|
REMOTE_IDS="freecode:${MY_PN}"
|
|
UPSTREAM_RELEASE_NOTES="http://www.haskell.org/${MY_PN}/docs/${PV}/html/users_guide/release-${PV//./-}.html"
|
|
|
|
LICENCES="BSD-3"
|
|
SLOT="${PV}"
|
|
MYOPTIONS="
|
|
bootstrap [[ description = [ Use official bindist for bootstrapping ] ]]
|
|
doc
|
|
llvm [[ description = [ Code generation using LLVM ] ]]
|
|
"
|
|
|
|
# `make test` takes really long, so disable it. It also succeeds (i.e. returned value is zero) in
|
|
# case of unexpected failures. There are always unexpected failures.
|
|
# If you really want to run the tests, then enable expensive tests in order to run `make fulltest`,
|
|
# which runs the same tests as `make test`, but includes more test cases per test.
|
|
RESTRICT="test"
|
|
|
|
DEPENDENCIES="
|
|
build:
|
|
dev-python/Sphinx
|
|
!bootstrap? (
|
|
dev-lang/GHC:${BOOTSTRAP_PV}
|
|
)
|
|
build+run:
|
|
dev-lang/perl:*[>=5.6.1]
|
|
dev-libs/gmp:=[>=5]
|
|
dev-libs/libffi
|
|
llvm? ( dev-lang/llvm[>=2.7] )
|
|
!dev-lang/ghc [[ resolution = uninstall-blocked-before ]]
|
|
!dev-lang/ghc-bin [[ resolution = uninstall-blocked-before ]]
|
|
"
|
|
|
|
WORK=${WORKBASE}/${MY_PNV}
|
|
|
|
src_unpack() {
|
|
if option bootstrap ; then
|
|
unpack ghc-${BOOTSTRAP_PV}-x86_64-fedora27-linux.tar.xz
|
|
edo mv ghc-${BOOTSTRAP_PV} "bootstrap-ghc"
|
|
fi
|
|
unpack ${MY_PNV}-src.tar.xz
|
|
unpack ${MY_PNV}-testsuite.tar.xz
|
|
}
|
|
|
|
src_prepare() {
|
|
if option bootstrap ; then
|
|
# prepare pre-built ghc
|
|
edo pushd "${WORKBASE}/bootstrap-ghc"
|
|
edo ./configure \
|
|
--prefix="${TEMP}/ghc-pre" \
|
|
--target=$(exhost --target)
|
|
emake install
|
|
edo popd
|
|
fi
|
|
|
|
autotools_src_prepare
|
|
}
|
|
|
|
src_configure() {
|
|
# Initialize build.mk
|
|
echo '# Exherbo changes' > mk/build.mk
|
|
|
|
cat <<EOF >> mk/build.mk
|
|
# Put docs into the right place
|
|
docdir = /usr/share/doc/${MY_PNVR}
|
|
htmldir = /usr/share/doc/${MY_PNVR}/html
|
|
EOF
|
|
|
|
if option doc; then
|
|
echo "BUILD_SPHINX_HTML=YES" >> mk/build.mk
|
|
echo "BUILD_SPHINX_PDF=NO" >> mk/build.mk
|
|
echo "HADDOCK_DOCS=YES" >> mk/build.mk
|
|
else
|
|
echo "BUILD_SPHINX_HTML=NO" >> mk/build.mk
|
|
echo "BUILD_SPHINX_PDF=NO" >> mk/build.mk
|
|
echo "HADDOCK_DOCS=NO" >> mk/build.mk
|
|
fi
|
|
|
|
export PATH="${WORKBASE}/usr/bin:${PATH}"
|
|
|
|
if option llvm; then
|
|
echo "GhcWithLlvmCodeGen=YES" >> mk/build.mk
|
|
else
|
|
echo "GhcWithLlvmCodeGen=NO" >> mk/build.mk
|
|
fi
|
|
|
|
GHC_SRC_CONFIGURE_OPTIONS+=(
|
|
--with-system-libffi
|
|
--with-ffi-includes=$(${PKG_CONFIG} --variable includedir libffi)
|
|
)
|
|
|
|
# host and build cause compilation (at least for 7.6.1) to fail, as they're intended for
|
|
# cross-compilation.
|
|
GHC=ghc-${BOOTSTRAP_PV} econf \
|
|
AR=${AR} \
|
|
CC=${CC} \
|
|
--target=$(exhost --target) \
|
|
"${GHC_SRC_CONFIGURE_OPTIONS[@]}"
|
|
|
|
# don't strip anything. Very useful when stage2 SIGSEGVs on you
|
|
echo "STRIP_CMD = :" >> mk/build.mk
|
|
}
|
|
|
|
src_install() {
|
|
default
|
|
|
|
# libraries/ is a partial dupe of the html/ dir hierarchy, but
|
|
# containing only LICENSE files
|
|
edo rm -rf "${IMAGE}"/usr/share/doc/${MY_PNVR}/{LICENSE,libraries}
|
|
|
|
dobashcompletion "${FILES}/ghc-bash-completion"
|
|
alternatives_for ghc ${SLOT} ${SLOT} \
|
|
/usr/share/bash-completion/completions/ghc-bin{,-${SLOT}}
|
|
|
|
# some scripts are not versioned, move
|
|
edo mv "${IMAGE}"/usr/$(exhost --target)/bin/{hp2ps,hp2ps-${SLOT}}
|
|
edo mv "${IMAGE}"/usr/$(exhost --target)/bin/{hpc,hpc-${SLOT}}
|
|
edo mv "${IMAGE}"/usr/$(exhost --target)/bin/{hsc2hs,hsc2hs-${SLOT}}
|
|
|
|
# remove unversioned symlinks, we create alternatives later
|
|
local ghc_bin
|
|
for ghc_bin in ghc ghci ghc-pkg $(optionq doc && echo "haddock") runghc runhaskell ; do
|
|
edo rm "${IMAGE}"/usr/$(exhost --target)/bin/${ghc_bin}
|
|
done
|
|
unset ghc_bin
|
|
|
|
# create alternatives for scripts/binaries
|
|
alternatives_for ghc ${SLOT} ${SLOT} \
|
|
/usr/$(exhost --target)/bin/ghc{,-${SLOT}} \
|
|
/usr/$(exhost --target)/bin/ghci{,-${SLOT}} \
|
|
/usr/$(exhost --target)/bin/ghc-pkg{,-${SLOT}} \
|
|
$(optionq doc && echo "/usr/$(exhost --target)/bin/haddock{,-ghc-${SLOT}}") \
|
|
/usr/$(exhost --target)/bin/hp2ps{,-${SLOT}} \
|
|
/usr/$(exhost --target)/bin/hpc{,-${SLOT}} \
|
|
/usr/$(exhost --target)/bin/hsc2hs{,-${SLOT}} \
|
|
/usr/$(exhost --target)/bin/runghc{,-${SLOT}} \
|
|
/usr/$(exhost --target)/bin/runhaskell /usr/$(exhost --target)/bin/runghc-${SLOT}
|
|
|
|
# alternatives for manpages
|
|
if [[ -d ${IMAGE}/usr/share/man ]]; then
|
|
local file alternatives=()
|
|
for file in "${IMAGE}"/usr/share/man/*/*; do
|
|
alternatives+=(
|
|
${file#${IMAGE}}
|
|
${file#${IMAGE}}-${SLOT}
|
|
)
|
|
done
|
|
|
|
alternatives_for \
|
|
ghc ${SLOT} ${SLOT} \
|
|
"${alternatives[@]}"
|
|
fi
|
|
}
|
|
|
|
src_test_expensive() {
|
|
emake fulltest
|
|
}
|
|
|