diff --git a/cabal-install/src/Distribution/Client/Dependency.hs b/cabal-install/src/Distribution/Client/Dependency.hs index afc77c032aa..04815cea7d5 100644 --- a/cabal-install/src/Distribution/Client/Dependency.hs +++ b/cabal-install/src/Distribution/Client/Dependency.hs @@ -445,13 +445,16 @@ setSolverVerbosity verbosity params = } dependOnWiredIns :: CompilerInfo -> DepResolverParams -> DepResolverParams -dependOnWiredIns compiler params = addConstraints extraConstraints params +dependOnWiredIns compiler params = + case compilerInfoWiredInUnitIds compiler of + Nothing -> params + Just wiredInUnitIds -> addConstraints (extraConstraints wiredInUnitIds) params where - extraConstraints = + extraConstraints wiredInUnitIds = [ LabeledPackageConstraint (PackageConstraint (ScopeAnyQualifier pkgName) (PackagePropertyInstalledSpecificUnitId unitId)) ConstraintSourceNonReinstallablePackage - | (pkgName, unitId) <- fromMaybe [] $ compilerInfoWiredInUnitIds compiler + | (pkgName, unitId) <- wiredInUnitIds ] ++ -- Old versions of `base` must be excluded from build plans still as they do not depend on any version of a wired-in unit. diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs index d76928e982f..cdacc2ee44b 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs @@ -218,6 +218,13 @@ tests = allowBootLibInstalls $ mkTest dbBase "Install base with --allow-boot-library-installs" ["base"] $ solverSuccess [("base", 5), ("ghc-prim", 1), ("integer-gmp", 1), ("integer-simple", 1)] + , -- The base >= 4.22 constraint only makes sense alongside the wired-in + -- unit id constraints. A compiler that reports none has no installed + -- base satisfying it, so it must not be added here. + runTest $ + allowBootLibInstalls $ + mkTest dbBaseOld "Install old base with --allow-boot-library-installs" ["base"] $ + solverSuccess [("base", 1)] ] , testGroup "Reinstallable base, template-haskell, but not ghc{,-internal} (GHC with wiredInUnitIds)" diff --git a/changelog.d/base-422-wired-in-guard.md b/changelog.d/base-422-wired-in-guard.md new file mode 100644 index 00000000000..cdcb654fd59 --- /dev/null +++ b/changelog.d/base-422-wired-in-guard.md @@ -0,0 +1,10 @@ +--- +synopsis: Fix `--allow-boot-library-installs` on GHC < 9.14 +packages: [cabal-install] +prs: 12301 +issues: 12328 +--- + +`--allow-boot-library-installs` made builds fail on compilers that report no +wired-in unit ids, because `base` was constrained to version 4.22 or later +regardless of the compiler.