commit:     8ae4c6d315b09451163b0f8fdc95b52ce1f1374c
Author:     hololeap <hololeap <AT> protonmail <DOT> com>
AuthorDate: Sat Apr 12 17:41:40 2025 +0000
Commit:     Arsen Arsenović <arsen <AT> gentoo <DOT> org>
CommitDate: Thu May 15 07:09:53 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8ae4c6d3

haskell-cabal.eclass: Add early check for invalid GHC cache

If the GHC cache is invalid, it can create a confusing error during
src_compile. Add a check in haskell-cabal-pkg_setup that checks for
and fixes an invalid cache.

Closes: https://bugs.gentoo.org/916785
Closes: https://bugs.gentoo.org/916971
Closes: https://bugs.gentoo.org/920879
Closes: https://github.com/gentoo-haskell/gentoo-haskell/issues/1469
Thanks-to: Tom Gillespie <tgbugs <AT> gmail.com>
Signed-off-by: hololeap <hololeap <AT> protonmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/41562
Closes: https://github.com/gentoo/gentoo/pull/41562
Signed-off-by: Arsen Arsenović <arsen <AT> gentoo.org>

 eclass/haskell-cabal.eclass | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/eclass/haskell-cabal.eclass b/eclass/haskell-cabal.eclass
index e228d7fbc1bc..bb73c0e4881d 100644
--- a/eclass/haskell-cabal.eclass
+++ b/eclass/haskell-cabal.eclass
@@ -661,6 +661,23 @@ cabal-is-dummy-lib() {
        return 1
 }
 
+# @FUNCTION: cabal-check-cache
+# @DESCRIPTION:
+# Check the state of the GHC cache by running 'ghc-pkg check' and looking
+# for the string "WARNING: cache is out of date". If the string is not found,
+# the cache is considered valid and the function returns 0. If it is found,
+# the cache is considered invalid and the function returns 1.
+cabal-check-cache() {
+       if $(ghc-getghcpkg) check 2>&1 \
+               | grep -q 'WARNING: cache is out of date'
+       then
+               ewarn 'GHC cache is out of date!'
+               return 1
+       else
+               return 0
+       fi
+}
+
 # exported function: check if cabal is correctly installed for
 # the currently active ghc (we cannot guarantee this with portage)
 haskell-cabal_pkg_setup() {
@@ -672,6 +689,13 @@ haskell-cabal_pkg_setup() {
        fi
        if cabal-is-dummy-lib; then
                einfo "${P} is included in ghc-${CABAL_CORE_LIB_GHC_PV}, 
nothing to install."
+       else
+               # bug 916785
+               if ! cabal-check-cache; then
+                       # avoid running ghc-recache-db so as not to set 
_GHC_RECACHE_CALLED
+                       einfo "Recaching GHC package DB"
+                       $(ghc-getghcpkg) recache
+               fi
        fi
 }
 

Reply via email to