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