commit:     2db4176c329e5e99e68f47dcb058c55d434bb64e
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Tue May 31 21:35:32 2016 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Tue May 31 21:37:16 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2db4176c

haskell-cabal.eclass: add basic support for ROOT!=/, bug #534194

Reported-by: Dennis Schridde
Bug: https://bugs.gentoo.org/534194
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>

 eclass/ghc-package.eclass   | 12 +++++++++++-
 eclass/haskell-cabal.eclass | 26 ++++++++++++++++++++++----
 2 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/eclass/ghc-package.eclass b/eclass/ghc-package.eclass
index 5466c0b..ccc6d6f 100644
--- a/eclass/ghc-package.eclass
+++ b/eclass/ghc-package.eclass
@@ -62,6 +62,16 @@ ghc-getghcpkgbin() {
        fi
 }
 
+# @FUNCTION: ghc-host-prefix
+# @DESCRIPTION:
+# Returns root of installed ghc.
+# Some helpers (like best_version) require reference
+# host system as they are tied to compiler bing executed.
+ghc-host-root() {
+       has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
+       echo "${EPREFIX}/"
+}
+
 # @FUNCTION: ghc-version
 # @DESCRIPTION:
 # returns upstream version of ghc
@@ -85,7 +95,7 @@ ghc-pm-version() {
        local pm_ghc_p
 
        if [[ -z "${_GHC_PM_VERSION_CACHE}" ]]; then
-               pm_ghc_p=$(best_version dev-lang/ghc)
+               pm_ghc_p=$(ROOT=$(ghc-host-root) best_version dev-lang/ghc)
                _GHC_PM_VERSION_CACHE="PM:${pm_ghc_p#dev-lang/ghc-}"
        fi
        echo "${_GHC_PM_VERSION_CACHE}"

diff --git a/eclass/haskell-cabal.eclass b/eclass/haskell-cabal.eclass
index 3735079..a568bf4 100644
--- a/eclass/haskell-cabal.eclass
+++ b/eclass/haskell-cabal.eclass
@@ -59,6 +59,13 @@ inherit eutils ghc-package multilib multiprocessing
 # linking 'setup' faster.
 : ${GHC_BOOTSTRAP_FLAGS:=}
 
+# @ECLASS-VARIABLE: CABAL_EXTRA_TEST_FLAGS
+# @DESCRIPTION:
+# User-specified additional parameters passed to 'setup test'.
+# example: /etc/portage/make.conf:
+#    CABAL_EXTRA_TEST_FLAGS="-v3 --show-details=streaming"
+: ${CABAL_EXTRA_TEST_FLAGS:=}
+
 # @ECLASS-VARIABLE: CABAL_DEBUG_LOOSENING
 # @DESCRIPTION:
 # Show debug output for 'cabal_chdeps' function if set.
@@ -118,8 +125,7 @@ if [[ -n "${CABAL_USE_HSCOLOUR}" ]]; then
 fi
 
 if [[ -n "${CABAL_USE_HOOGLE}" ]]; then
-       # enabled only in ::haskell
-       CABAL_USE_HOOGLE=
+       IUSE="${IUSE} hoogle"
 fi
 
 if [[ -n "${CABAL_USE_ALEX}" ]]; then
@@ -169,7 +175,7 @@ cabal-version() {
                else
                        # We ask portage, not ghc, so that we only pick up
                        # portage-installed cabal versions.
-                       _CABAL_VERSION_CACHE="$(ghc-extractportageversion 
dev-haskell/cabal)"
+                       _CABAL_VERSION_CACHE="$(ROOT=$(ghc-host-root) 
ghc-extractportageversion dev-haskell/cabal)"
                fi
        fi
        echo "${_CABAL_VERSION_CACHE}"
@@ -602,13 +608,25 @@ haskell-cabal_src_compile() {
 }
 
 haskell-cabal_src_test() {
+       local cabaltest=()
+
        pushd "${S}" > /dev/null || die
 
        if cabal-is-dummy-lib; then
                einfo ">>> No tests for dummy library: ${CATEGORY}/${PF}"
        else
                einfo ">>> Test phase [cabal test]: ${CATEGORY}/${PF}"
-               set -- test "$@"
+
+               # '--show-details=streaming' appeared in Cabal-1.20
+               if ./setup test --help | grep -q -- "'streaming'"; then
+                       cabaltest+=(--show-details=streaming)
+               fi
+
+               set -- test \
+                       "${cabaltest[@]}" \
+                       ${CABAL_TEST_FLAGS} \
+                       ${CABAL_EXTRA_TEST_FLAGS} \
+                       "$@"
                echo ./setup "$@"
                ./setup "$@" || die "cabal test failed"
        fi

Reply via email to