[Hackage] #223: allow per-package configuration options in config file

Hackage trac at galois.com
Fri Aug 22 08:24:44 EDT 2008

#223: allow per-package configuration options in config file
  Reporter:  duncan              |        Owner:  mnislaih           
      Type:  enhancement         |       Status:  assigned           
  Priority:  normal              |    Milestone:  Cabal-1.4          
 Component:  cabal-install tool  |      Version:            
  Severity:  normal              |   Resolution:                     
  Keywords:                      |   Difficulty:  very easy (<1 hour)
Ghcversion:  6.8.2               |     Platform:                     
Changes (by duncan):

  * difficulty:  normal => very easy (<1 hour)


 The config file now holds the options for the global command (things like
 repos, cache dir etc), the install/upgrade command and the configure and
 upload commands.

 Thu Aug 21 22:05:55 BST 2008  Duncan Coutts <duncan at haskell.org>
   * Rearrange config settings and global command line settings
   The intention here is to have the config file content and parser
   be derivied from the command line types and flags. Now instead
   of having a saved config type that contains additional
   information to that kept in command line parameters we now put
   all the information in the command line settings type and make
   the saved config just the aggregation of the settings for
   various key commands like configure, install, upload. There's
   also an extended GlobalFlags type with the things like repos,
   cache dir etc. When we generate the initial config file we put
   in commented out versions of all (non-deprecated) valid fields,
   along with their default values. The aim is to make the config
   file self-documenting.


 As before it also has two sets of saved install dirs.

 Fri Aug 22 02:57:02 BST 2008  Duncan Coutts <duncan at haskell.org>
   * Add back separate user and global sets of install dirs
   The user install setting selects between the two sets of dirs.
   At the moment it's just the "user-" and "global-" prefixed field
   names to support existing config files.

 Fri Aug 22 13:00:59 BST 2008  Duncan Coutts <duncan at haskell.org>
   * Add sections for user/global install-dirs to the config file
   So it looks like:
   install-dirs user
     prefix: /home/username/.cabal
   Rather than using user-prefix, global-prefix, etc etc for each
   field. The old field names are still recognised but not added
   into the initial config file.

 The default config file now looks like:

 -- version:
 -- numeric-version:
 -- config-file:
 remote-repo-cache: /home/username/.cabal/packages
 -- local-repo:
 -- documentation: False
 -- dry-run:
 -- reinstall:
 -- root-cmd:
 -- cabal-lib-version:
 -- log-builds:
 -- build-reports:
 -- only:
 -- verbose: 1
 -- distpref: dist
 -- compiler: ghc
 -- with-compiler:
 -- with-hc-pkg:
 -- scratchdir:
 -- program-prefix:
 -- program-suffix:
 -- library-vanilla: True
 -- library-profiling: False
 -- shared: False
 -- executable-profiling: False
 -- optimization: True
 -- library-for-ghci: True
 -- split-objs: False
 -- executable-stripping: True
 -- configure-option:
 user-install: True
 -- package-db:
 -- flags:
 -- extra-include-dirs:
 -- extra-lib-dirs:
 -- constraint:
 -- verbose: 1
 -- check:
 -- username:
 -- password:

 install-dirs user
   prefix: /home/username/.cabal
   -- bindir: $prefix/bin
   -- libdir: $prefix/lib
   -- libsubdir: $pkgid/$compiler
   -- libexecdir: $prefix/libexec
   -- datadir: $prefix/share
   -- datasubdir: $pkgid
   -- docdir: $datadir/doc/$pkgid
   -- htmldir: $docdir/html
   -- haddockdir: $htmldir

 install-dirs global
   -- prefix: /usr/local
   -- bindir: $prefix/bin
   -- libdir: $prefix/lib
   -- libsubdir: $pkgid/$compiler
   -- libexecdir: $prefix/libexec
   -- datadir: $prefix/share
   -- datasubdir: $pkgid
   -- docdir: $datadir/doc/$pkgid
   -- htmldir: $docdir/html
   -- haddockdir: $htmldir

 There are some fields there that come from command line flags that do not
 really apply to the config file and so should be filtered out.

 This syntax will allow us to to per-package config options, like:

 package foo
   extra-lib-dirs: /some/thing

 But actually adding that feature is not the top priority. Having a more
 self-documenting config file that contains all the options that can be
 specified on the command line is top priority.

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

More information about the cabal-devel mailing list