[Hackage] #788: Optionally exposed modules / APIs should be banned

Hackage cvs-ghc at haskell.org
Tue Jan 11 02:38:23 CET 2011


#788: Optionally exposed modules / APIs should be banned
----------------------------+-----------------------------------------------
  Reporter:  duncan         |        Owner:         
      Type:  defect         |       Status:  new    
  Priority:  normal         |    Milestone:         
 Component:  Cabal library  |      Version:  1.8.0.6
  Severity:  normal         |     Keywords:         
Difficulty:  unknown        |   Ghcversion:         
  Platform:                 |  
----------------------------+-----------------------------------------------
 It is a deliberate decision that packages cannot depend on package + flag
 combinations, only on packages. The point is that flags are not supposed
 to change the API of a package.

 This needs to be enforced.

 Consider a real example (from Chart package:
 http://hackage.haskell.org/packages/archive/Chart/0.14/Chart.cabal)
 {{{
   if flag(gtk)
     build-depends: gtk >= 0.9.11
     exposed-modules: Graphics.Rendering.Chart.Gtk
 }}}
 The criterion package depends on Chart and imports
 `Graphics.Rendering.Chart.Gtk` meaning that it breaks if you build Chart
 with the gtk flag turned off.

 The solution is that Chart should be prevented from conditionally exposing
 modules. We should add a QA check that looks for exposed modules that are
 conditional on a flag. It is annoying but somewhat less bad for modules to
 change between platforms.

 Should it be a hard failure or just a warning?

-- 
Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/788>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects



More information about the cabal-devel mailing list