[Hackage] #753: cabal configure choosing base 3 is confusing (was: cabal executable chooses different versions of libraries than cabal library)

Hackage cvs-ghc at haskell.org
Thu Nov 11 09:06:36 EST 2010

#753: cabal configure choosing base 3 is confusing
  Reporter:  guest               |        Owner:         
      Type:  defect              |       Status:  new    
  Priority:  normal              |    Milestone:         
 Component:  cabal-install tool  |      Version:
  Severity:  normal              |     Keywords:         
Difficulty:  unknown             |   Ghcversion:         
  Platform:                      |  

Comment(by duncan):

 This behaviour is due to backward compatibility hacks in cabal-install.
 When you run `cabal configure` it uses its constraint solver and various
 preferences to decide what dependencies to pick. When you run `rughc Setup
 configure` it just blindly picks the latest version of everything (whether
 or not the set of versions it picks have consistent dependencies).

 One of the things that `cabal configure` does is to make lots of old
 packages work that never specified what version of base they want. They
 were written when base 3 was around and so were not tested with base 4,
 but they specified:
 build-depends: base >= 3
 Normally we would interpret this as allowing any version greater than 3,
 but the problem when base 4 came out was that all these packages broke,
 because cabal would pick base 4. The hack was to reinterpret what an
 upwards open constraint means on base. If the range is open we apply a
 preference for base 3. If it is closed we treat it normally.

 So if you write:
 build-depends: base >= 3 && < 5
 then cabal will pick base 4, if it's available.

 The problem now is new packages where people just list:
 build-depends: base
 They expect the latest version to be picked. I think what we need to do is
 to add a warning that they should specify an upper bound and that the
 older version is being defaulted to.

 Note that it is not practical to make `cabal configure` and `runghc Setup
 configure` do exactly the same thing, because that either means making
 `cabal configure` dumb, or it means moving the constraint solver into the
 Cabal library. I think the right solution to this inconsistency is to
 encourage users to use the cabal program as the main UI, and stop using
 `runghc Setup`, leaving that interface just as a machine interface for
 things like distro packaging scripts.

Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/753#comment:1>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects

More information about the cabal-devel mailing list