summaryrefslogtreecommitdiff
path: root/eclass/haskell-cabal.eclass
diff options
context:
space:
mode:
authorhololeap <hololeap@protonmail.com>2025-04-12 11:41:40 -0600
committerArsen Arsenović <arsen@gentoo.org>2025-05-15 09:09:53 +0200
commit8ae4c6d315b09451163b0f8fdc95b52ce1f1374c (patch)
treef712e4b3b3d96dd76e3c6888fc7191c2412c0996 /eclass/haskell-cabal.eclass
parent78beda50cf5b46f553803b31e294569a1317aa1b (diff)
downloadgentoo-8ae4c6d315b09451163b0f8fdc95b52ce1f1374c.tar.gz
gentoo-8ae4c6d315b09451163b0f8fdc95b52ce1f1374c.tar.bz2
gentoo-8ae4c6d315b09451163b0f8fdc95b52ce1f1374c.zip
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@gmail.com> Signed-off-by: hololeap <hololeap@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@gentoo.org>
Diffstat (limited to 'eclass/haskell-cabal.eclass')
-rw-r--r--eclass/haskell-cabal.eclass24
1 files changed, 24 insertions, 0 deletions
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
}