Wishlist
What does darcs need that Cabal doesn't yet offer?
Ability to build individual module targets (which is nice for developers) #15
Parallel builds (will also be addressed by #15)
Ability to automatically decide a configuration on non-Haskell build-depends. Also needs to decide on the basis of other deps declared in the .cabal file, like c libs, build-tools, compiler extensions. #342 mailing list thread Ability to build documentation #330, changelog #299 #224, etc.
Avoid recompiling common code between libdarcs and the darcs binary #89
General notes
I care about my users--and thus like to give them options and reduce the dependencies of my software - DavidRoundy
- Note that the first two issues above are part of a substantial internal change targeted for Cabal-2.0. We have a GSoC project that has been working on this issue over the summer.
- Optional or optionally bundled dependencies are already possible from Cabal-1.2 onwards using Cabal configurations (relating to David's quote about options to reduce the deps of software.).
- Cabal does not aspire to replace the use of autoconf, which is the ugly part of darcs' build system.
- I think it does aspire to provide parts of what autoconf does, namely selecting a configuration based on what is available on the system; but it queries databases (so far just ghc-pkg) and checks version numbers rather than doing feature tests.
Background
Discussion by Duncan on the philosophical differences between cabal and autoconf (2008-04)
follow-up thread in May archives
Discussion on darcs-devel Curl build issues (2008-04)
Discussion
- Cabal advantage: works when GHC does, particularly on non-cygwin/mingw windows
- Cabal advantage: metadata (particularly explicit dependency declaration) makes distro packaging much simpler
- autoconf advantage: feature tests are very portable
- autoconf advantage: feature tests are very flexible (arbitrary shell if necessary)
- autoconf disadvantage: feature tests are very slow because they run GHC each time
- autoconf disadvantage: information about how to satisfy missing dependencies is ad-hoc and might be completely missing if a feature test fails for an unexplained reason
