haskell/cabal — pull request #1956 by kosmikus (2014-06-23 06:30:03+00:00)
Title: Treat all flags of a package as interdependent.

This is the fix I made at ZuriHac. I wanted to run a few performance tests, which I didn't get around to for some time. I couldn't easily reproduce a case on current Hackage where this fix causes a significant performance-impact.

To summarize the situation: There was a solver bug triggered by (nested) flag choices that I tried to fix once, but that fix only shifted the bug instead of fixing it. We made a re-release based on that one *and* a flag reordering fix which wasn't quite a bug but also caused trouble. So the re-release wasn't completly for nothing, but still contains a flag-handling bug. This isn't currently as much trouble anymore, because Edward "fixed" the main offending package `transformers-compat` independently. Nevertheless, it's worrying because another package could expose the problem at any time, and this is difficult to work around.

The new fix is relatively conservative. Rather than trying to be clever, I try to do something which should definitely be correct in the situation where one package has several flags. This can potentially cost extra time, but only in a situation where a package has many, many flags, and the default flag setting leads to failure and backtracking. I therefore think this should go in.

We might want to discuss if we should also

* backport again
* re-release again
* get this version into the Haskell Platform