#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: 1.2.3.0 Severity: normal | Resolution: Keywords: | Difficulty: very easy (<1 hour) Ghcversion: 6.8.2 | Platform: ---------------------------------+------------------------------------------ Changes (by duncan): * difficulty: normal => very easy (<1 hour) Comment: 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@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@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@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: hackage.haskell.org:http://hackage.haskell.org/packages/archive 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