dev-lang/GHC: initial import
This commit is contained in:
parent
6fa0b20a53
commit
0d8361b925
176
packages/dev-lang/GHC/GHC-8.4.3.exheres-0
Normal file
176
packages/dev-lang/GHC/GHC-8.4.3.exheres-0
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
# 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}"
|
||||||
|
|
||||||
|
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
|
||||||
|
https://downloads.haskell.org/~ghc/${PV}/ghc-${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="
|
||||||
|
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-libs/libxslt[>=1.1.2]
|
||||||
|
dev-python/Sphinx
|
||||||
|
build+run:
|
||||||
|
dev-lang/perl:*[>=5.6.1]
|
||||||
|
dev-libs/gmp:=[>=5]
|
||||||
|
dev-libs/libedit
|
||||||
|
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() {
|
||||||
|
unpack ghc-${PV}-x86_64-fedora27-linux.tar.xz
|
||||||
|
edo mv "${WORK}" "${WORK}-pre"
|
||||||
|
unpack ${MY_PNV}-src.tar.xz
|
||||||
|
unpack ${MY_PNV}-testsuite.tar.xz
|
||||||
|
}
|
||||||
|
|
||||||
|
src_prepare() {
|
||||||
|
# prepare pre-built ghc
|
||||||
|
edo pushd "${WORK}-pre"
|
||||||
|
edo ./configure \
|
||||||
|
--prefix="${TEMP}/ghc-pre" \
|
||||||
|
--target=$(exhost --target)
|
||||||
|
emake install
|
||||||
|
edo popd
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
GHC_SRC_CONFIGURE_OPTIONS+=( --with-ghc=${TEMP}/ghc-pre/bin/ghc )
|
||||||
|
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.
|
||||||
|
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
|
||||||
|
local file alternatives=()
|
||||||
|
for file in "${IMAGE}"/usr/share/man/*/*; do
|
||||||
|
alternatives+=(
|
||||||
|
${file#${IMAGE}}
|
||||||
|
${file#${IMAGE}}-${SLOT}
|
||||||
|
)
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
src_test_expensive() {
|
||||||
|
emake fulltest
|
||||||
|
}
|
||||||
|
|
218
packages/dev-lang/GHC/files/ghc-bash-completion
Normal file
218
packages/dev-lang/GHC/files/ghc-bash-completion
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
# ghc-pkg command line completion for bash
|
||||||
|
#
|
||||||
|
# Copyright 2006-2007 Lennart Kolmodin <kolmodin@dtek.chalmers.se>
|
||||||
|
|
||||||
|
_ghc-pkg-get-ghc-pkg()
|
||||||
|
{
|
||||||
|
echo ghc-pkg
|
||||||
|
}
|
||||||
|
|
||||||
|
_ghc-pkg-pkg-fields()
|
||||||
|
{
|
||||||
|
# usage: _ghc-pkg-pkg-fields pkg-id
|
||||||
|
#
|
||||||
|
# list all fields of the pkg-id
|
||||||
|
|
||||||
|
# same fields for all packages but different in different versions of
|
||||||
|
# ghc-pkg? this can probably be done better/faster
|
||||||
|
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
echo "usage: _ghc-pkg-pkg-fields pkg-id"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local fields
|
||||||
|
|
||||||
|
fields="$( $(_ghc-pkg-get-ghc-pkg) describe $1 )"
|
||||||
|
|
||||||
|
#if [[ fields != *"cannot find package"* ]]; then
|
||||||
|
echo "$fields" | grep ".*:.*" | sed "s/^\(.*\):.*\$/\1/"
|
||||||
|
#fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_ghc-pkg-pkg-ids()
|
||||||
|
{
|
||||||
|
# usage: _ghc-pkg-pkg-ids
|
||||||
|
#
|
||||||
|
# simply lists all package ids known by ghc-pkg.
|
||||||
|
$(_ghc-pkg-get-ghc-pkg) list --simple-output
|
||||||
|
}
|
||||||
|
|
||||||
|
_ghc-pkg-pkgs()
|
||||||
|
{
|
||||||
|
# usage: _ghc-pkg-pkgs [include-pkgs] [include-ids]
|
||||||
|
#
|
||||||
|
# with optional parameter include-pkgs it will list all packages known
|
||||||
|
# to ghc-pkg.
|
||||||
|
# with optional parameter include-ids it will list all package-ids known
|
||||||
|
# to ghc-pkg.
|
||||||
|
local pkgs
|
||||||
|
local result
|
||||||
|
pkgs=( $( _ghc-pkg-pkg-ids ) )
|
||||||
|
result=( )
|
||||||
|
|
||||||
|
local withPkgs="no" withIds="no"
|
||||||
|
while [[ -n "$1" ]]; do
|
||||||
|
case "$1" in
|
||||||
|
include-pkgs)
|
||||||
|
withPkgs="yes" ;;
|
||||||
|
include-ids)
|
||||||
|
withIds="yes" ;;
|
||||||
|
*)
|
||||||
|
echo "unknown parameter '$1' to _ghc-pkg-pkgs"
|
||||||
|
return 1 ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# user must supply either include-pkgs, include-ids or both
|
||||||
|
if [[ $withPkgs != "yes" && $withIds != "yes" ]]; then
|
||||||
|
echo "usage: _ghc-pkg-pkgs [include-pkgs] [include-ids]"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# find all packages if the user requested them
|
||||||
|
if [[ $withPkgs == "yes" ]]; then
|
||||||
|
# O(n^2) algorithm to exclude duplicates
|
||||||
|
for p in ${pkgs[*]}; do
|
||||||
|
p="${p//-[0-9.]*/}"
|
||||||
|
for existing in ${result[*]}; do
|
||||||
|
if [[ "$existing" == "$p" ]]; then
|
||||||
|
continue 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
result=( "${result[@]}" "${p}" )
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# include all pkg-ids if requested
|
||||||
|
if [[ $withIds == "yes" ]]; then
|
||||||
|
result=( "${result[@]}" "${pkgs[@]}" )
|
||||||
|
fi
|
||||||
|
|
||||||
|
# we are finished, echo the result
|
||||||
|
echo "${result[*]}"
|
||||||
|
|
||||||
|
# happy ending
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
_ghc-pkg()
|
||||||
|
{
|
||||||
|
local cur
|
||||||
|
cur=${COMP_WORDS[COMP_CWORD]}
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
local actions flags
|
||||||
|
actions='register update unregister expose hide list latest describe field'
|
||||||
|
dbflags="--user \
|
||||||
|
--global \
|
||||||
|
-f --package-conf= \
|
||||||
|
--global-conf="
|
||||||
|
registerflags="--force \
|
||||||
|
-g --auto-ghci-libs \
|
||||||
|
-D --define-name="
|
||||||
|
listflags="--simple-output"
|
||||||
|
flags="$dbflags \
|
||||||
|
$registerflags \
|
||||||
|
$listflags \
|
||||||
|
-? --help \
|
||||||
|
-V --version"
|
||||||
|
|
||||||
|
# if it's the users first word; complete it and return
|
||||||
|
if (($COMP_CWORD == 1)); then
|
||||||
|
COMPREPLY=( $( compgen -W "$actions $flags" -- $cur ) )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# now we know we have at least one word written
|
||||||
|
|
||||||
|
local action="unknown" \
|
||||||
|
prev numwords \
|
||||||
|
cword act
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
numwords=${#COMP_WORDS[@]}
|
||||||
|
|
||||||
|
# find the action with O(n*m) algorithm
|
||||||
|
# where n = ${#COMP_WORDS[*]}
|
||||||
|
# m = number of actions
|
||||||
|
for cword in ${COMP_WORDS[*]}; do
|
||||||
|
for act in $actions; do
|
||||||
|
if [[ "$cword" == "$act" ]]; then
|
||||||
|
action=$cword
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
case $action in
|
||||||
|
register|update)
|
||||||
|
# we want to complete both flags and paths, how?
|
||||||
|
# we do it by checking if the user has started to write a flag
|
||||||
|
# or a path, and then decide what to complete.
|
||||||
|
# that is, to complete a flag, the user must start to write a '-'
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
# (we assume) it's the start of a flag
|
||||||
|
# set COMPREPLY to flags relevant to these actions
|
||||||
|
COMPREPLY=( $( compgen -W "$dbflags $registerflags" -- $cur ) )
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
unregister|expose|hide|list|describe)
|
||||||
|
# all these actions can be completed with exactly one argument,
|
||||||
|
# a pkg-id.
|
||||||
|
COMPREPLY=( $( compgen -W "$dbflags" -- $cur ) )
|
||||||
|
|
||||||
|
# add special flags for some actions
|
||||||
|
if [[ "$action" == "list" ]]; then
|
||||||
|
COMPREPLY+=( $( compgen -W "$listflags" -- $cur ) )
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMPREPLY+=( $( compgen -W "$( _ghc-pkg-pkgs include-ids )" -- $cur ) )
|
||||||
|
;;
|
||||||
|
latest)
|
||||||
|
# complete only packages, not package ids
|
||||||
|
COMPREPLY=( $( compgen -W "$( _ghc-pkg-pkgs include-pkgs )" -- $cur ) )
|
||||||
|
;;
|
||||||
|
field)
|
||||||
|
# we should always complete on the flags...
|
||||||
|
COMPREPLY=( $( compgen -W "$dbflags" -- $cur ) )
|
||||||
|
|
||||||
|
# then, we should either complete the package name or the field
|
||||||
|
# lets find out which one
|
||||||
|
|
||||||
|
# find the number of words in COMP_WORDS before COMP_CWORD that
|
||||||
|
# isn't flags. it should be 2 or 3 for us to complete it,
|
||||||
|
# exactly 2 if we should complete the package name
|
||||||
|
# exactly 3 if we should complete the field name
|
||||||
|
# otherwise, don't do any additional completion except the
|
||||||
|
# flags
|
||||||
|
|
||||||
|
# count the number of non flags up till the current word
|
||||||
|
local numnonflags=0 lastword i
|
||||||
|
for (( i=0 ; $i < $COMP_CWORD ; i++ )); do
|
||||||
|
if [[ ${COMP_WORDS[$i]} != -* ]]; then
|
||||||
|
lastword=${COMP_WORDS[$i]}
|
||||||
|
numnonflags=$(( ++numnonflags ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
case $numnonflags in
|
||||||
|
2)
|
||||||
|
# complete on pkg-ids
|
||||||
|
COMPREPLY+=( $( compgen -W "$( _ghc-pkg-pkgs include-ids )" -- $cur ) ) ;;
|
||||||
|
3)
|
||||||
|
# complete on fields
|
||||||
|
COMPREPLY+=( $( compgen -W "$( _ghc-pkg-pkg-fields $lastword )" -- $cur ) ) ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# unknown action, not yet given by the user
|
||||||
|
# return all possible completions
|
||||||
|
COMPREPLY=( $( compgen -W "$actions $flags" -- $cur ) )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -F _ghc-pkg -o default ghc-pkg
|
||||||
|
|
||||||
|
# vim: set ft=sh tw=80 sw=4 et :
|
Loading…
Reference in New Issue
Block a user