Closed
Description
Describe the bug
Cabal's multi-repl support requires a version of the Cabal library >=3.11.
This is fine when using cabal-install
's builtin copy of the Cabal library.
But when packages' Custom setups require Cabal as build dependency, we run into problems as this version is not yet released, so not available on Hackage, and it's not the version bundled with the user's GHC.
To Reproduce
Try using a pre-release cabal to run
cabal repl --enable-multi-repl --allow-newer postgresql-libpq
Output
Warning: this is a debug build of cabal-install with assertions enabled.
Resolving dependencies...
Error: [Cabal-7107]
Could not resolve dependencies:
...
[__1] trying: postgresql-libpq-0.10.0.0 (dependency of eventstore)
[__2] next goal: postgresql-libpq:setup.Cabal (dependency of postgresql-libpq)
[__2] rejecting: postgresql-libpq:setup.Cabal-3.10.2.0/installed-inplace, postgresql-libpq:setup.Cabal-3.10.2.1, postgresql-libpq:setup.Cabal-3.10.2.0, postgresql-libpq:setup.Cabal-3.10.1.0, postgresql-libpq:setup.Cabal-3.8.1.0, postgresql-libpq:setup.Cabal-3.6.3.0, postgresql-libpq:setup.Cabal-3.6.2.0, postgresql-libpq:setup.Cabal-3.6.1.0, postgresql-libpq:setup.Cabal-3.6.0.0, postgresql-libpq:setup.Cabal-3.4.1.0, postgresql-libpq:setup.Cabal-3.4.0.0, postgresql-libpq:setup.Cabal-3.2.1.0, postgresql-libpq:setup.Cabal-3.2.0.0, postgresql-libpq:setup.Cabal-3.0.2.0, postgresql-libpq:setup.Cabal-3.0.1.0, postgresql-libpq:setup.Cabal-3.0.0.0, postgresql-libpq:setup.Cabal-2.4.1.0, postgresql-libpq:setup.Cabal-2.4.0.1, postgresql-libpq:setup.Cabal-2.4.0.0, postgresql-libpq:setup.Cabal-2.2.0.1, postgresql-libpq:setup.Cabal-2.2.0.0, postgresql-libpq:setup.Cabal-2.0.1.1, postgresql-libpq:setup.Cabal-2.0.1.0, postgresql-libpq:setup.Cabal-2.0.0.2, postgresql-libpq:setup.Cabal-1.24.2.0, postgresql-libpq:setup.Cabal-1.24.0.0, postgresql-libpq:setup.Cabal-1.22.8.0, postgresql-libpq:setup.Cabal-1.22.7.0, postgresql-libpq:setup.Cabal-1.22.6.0, postgresql-libpq:setup.Cabal-1.22.5.0, postgresql-libpq:setup.Cabal-1.22.4.0, postgresql-libpq:setup.Cabal-1.22.3.0, postgresql-libpq:setup.Cabal-1.22.2.0, postgresql-libpq:setup.Cabal-1.22.1.1, postgresql-libpq:setup.Cabal-1.22.1.0, postgresql-libpq:setup.Cabal-1.22.0.0, postgresql-libpq:setup.Cabal-1.20.0.4, postgresql-libpq:setup.Cabal-1.20.0.3, postgresql-libpq:setup.Cabal-1.20.0.2, postgresql-libpq:setup.Cabal-1.20.0.1, postgresql-libpq:setup.Cabal-1.20.0.0, postgresql-libpq:setup.Cabal-1.18.1.7, postgresql-libpq:setup.Cabal-1.18.1.6, postgresql-libpq:setup.Cabal-1.18.1.5, postgresql-libpq:setup.Cabal-1.18.1.4, postgresql-libpq:setup.Cabal-1.18.1.3, postgresql-libpq:setup.Cabal-1.18.1.2, postgresql-libpq:setup.Cabal-1.18.1.1, postgresql-libpq:setup.Cabal-1.18.1, postgresql-libpq:setup.Cabal-1.18.0, postgresql-libpq:setup.Cabal-1.16.0.3, postgresql-libpq:setup.Cabal-1.16.0.2, postgresql-libpq:setup.Cabal-1.16.0.1, postgresql-libpq:setup.Cabal-1.16.0, postgresql-libpq:setup.Cabal-1.14.0, postgresql-libpq:setup.Cabal-1.12.0, postgresql-libpq:setup.Cabal-1.10.2.0, postgresql-libpq:setup.Cabal-1.10.1.0, postgresql-libpq:setup.Cabal-1.10.0.0, postgresql-libpq:setup.Cabal-1.8.0.6, postgresql-libpq:setup.Cabal-1.8.0.4, postgresql-libpq:setup.Cabal-1.8.0.2, postgresql-libpq:setup.Cabal-1.6.0.3, postgresql-libpq:setup.Cabal-1.6.0.2, postgresql-libpq:setup.Cabal-1.6.0.1, postgresql-libpq:setup.Cabal-1.4.0.2, postgresql-libpq:setup.Cabal-1.4.0.1, postgresql-libpq:setup.Cabal-1.4.0.0, postgresql-libpq:setup.Cabal-1.2.4.0, postgresql-libpq:setup.Cabal-1.2.3.0, postgresql-libpq:setup.Cabal-1.2.2.0, postgresql-libpq:setup.Cabal-1.2.1, postgresql-libpq:setup.Cabal-1.1.6, postgresql-libpq:setup.Cabal-1.24.1.0 (constraint from --enable-multi-repl requires >=3.11)
[__2] fail (backjumping, conflict set: postgresql-libpq, postgresql-libpq:setup.Cabal)
After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: postgresql-libpq:setup.Cabal, eventstore, postgresql-libpq
Expected behavior
This should work fine
Workaround
We can work around this issue by adding Cabal
and Cabal-syntax
to our cabal.project using a source-repository-package, eg:
source-repository-package
type: git
location: https://github.com/haskell/cabal.git
subdir: Cabal
source-repository-package
type: git
location: https://github.com/haskell/cabal.git
subdir: Cabal-syntax