#3896: Make the GHC build system accommodate extra packages
---------------------------------+------------------------------------------
    Reporter:  simonpj           |        Owner:              
        Type:  task              |       Status:  new         
    Priority:  normal            |    Milestone:  6.14 branch 
   Component:  Build System      |      Version:              
    Keywords:                    |   Difficulty:              
          Os:  Unknown/Multiple  |     Testcase:              
Architecture:  Unknown/Multiple  |      Failure:  None/Unknown
---------------------------------+------------------------------------------
 Simon and I discussed the extra-packages story in GHC's build system.
 Here's a summary:

  * Simon added these 'extra-packages' stuff to help automate the
    process of downloading and building packages
    - that are not boot packages
    - but which we want to test regularly

  * DPH is another such package.  It's not really a boot package, in the
   sense that (a) it's not necessary to build GHC and (b) it can only
   be built with a stage-2 compiler.  The main reason it's treated as a
   boot package today is so that new patches are validated against it;
   it is a particularly good stress test.  But it seems a bit overkill
   for it to masquerade as a boot package for that reason alone.

  * The current extra-packages story is a bit of a mess:
    - The extra packages are listed in $(TOP)/packages
    - But they are, quite separately listed in a make variable
      EXTRA_PACKAGES, and then stuffed into PACKAGES by 'addPackage' in
      $(TOP)/ghc.mk.
    - A series of addPackage calls in ghc.mk duplicates the list of
      boot packages in $(TOP)/packages.
    - Moreover, the list in EXTRA_PACKAGES must be in dependency order.

 We propose the following plan

  * Make the list in $(TOP)/packages the authoritative list.

  * Make 'sh boot' construct the list $(PACKAGES) from $(TOP)/packages
   and stuff it somewhere appropriate.  ['sh boot' has to iterate over
   the packages anyhow, to boot them, but doesn't currently consult
   $(TOP)/packages to do so; it looks a the file system, which is less
   good.]

  * Make DPH into an extra package

  * And/or add a tag 'validated' to mean "this is an extra package,
   not a boot package, but it should be validated before pushing patches".
   That doesn't necessarily apply to all extra packages (eg stm).

  * The list in $(TOP)/packages is really a list of '''repositories''' not
 a list
   of '''packages'''.  For example, utils/hcs2hs isn't a package.  We
 probably
   want a tag ("util"?) to distinguish non-packages from packages.

  * DPH is unusual because it is a '''single repository''' that contains
 '''several packages'''.
   We can tell this because it has a file ghc-packages in its root
 directory,
   that lists the packages it contains.  'sh boot' must understand this
 when
   constructing $(PACKAGES); indeed it already does understand this.

  * Packages must be built in dependency order, and the build system has
   no way of figuring out the right order.  But it would be easy to
   stipulate that $(TOP)/packages (and the ghc-packages file, if any,
   in the repo) should list the packages in dependency order.


 We don't need to execute this plan right away, but would be a very
 nice clean-up if anyone felt up to doing something about it.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3896>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to