CI GHC 9.6: cabal-plan allow-newer base (TODO: revert)
[cabal.git] / doc / hcar / Cabal-201604.tex
blob74abe2dbde12542457ebb225612346fc38485ed4
1 \documentclass[DIV16,twocolumn,10pt]{scrreprt}
2 \usepackage{paralist}
3 \usepackage{graphicx}
4 \usepackage[final]{hcar}
6 %include polycode.fmt
8 \begin{document}
10 \begin{hcarentry}{Cabal}
11 \report{Mikhail Glushenkov}
12 \status{Active}
13 \participants{\href{https://github.com/haskell/cabal/graphs/contributors}{Cabal contributors}}% optional
14 \makeheader
16 \subsubsection*{Background}
18 Cabal is the standard packaging system for Haskell software. It specifies a
19 standard way in which Haskell libraries and applications can be packaged so that
20 it is easy for consumers to use them, or re-package them, regardless of the
21 Haskell implementation or installation platform.
23 \texttt{cabal-install} is the command line interface for the Cabal and Hackage
24 system. It provides a command line program \texttt{cabal} which has sub-commands
25 for installing and managing Haskell packages.
27 \subsubsection*{Recent Progress}
29 We've just released versions 1.24 of Cabal and \texttt{cabal-install}. 1.24
30 incorporates more than a thousand commits by
31 \href{https://gist.github.com/23Skidoo/62544d7e0352037749eec7344788831c}{89
32 different contributors}. Main user-visible changes in this release are:
34 \begin{itemize}
35 \item Nix-style local builds in \texttt{cabal-install} (so far only a technical
36 preview). See
37 \href{http://blog.ezyang.com/2016/05/announcing-cabal-new-build-nix-style-local-builds/}{this
38 post} by Edward Z. Yang for more details.
39 \item Integration of a new security scheme for Hackage based on
40 \href{https://theupdateframework.github.io/}{The Update Framework}. So far
41 this is not enabled by default, pending some changes on the Hackage side. See
42 \href{http://www.well-typed.com/blog/2015/08/hackage-security-beta/}{these}
43 \href{http://www.well-typed.com/blog/2015/07/hackage-security-alpha/}{three}
44 \href{http://www.well-typed.com/blog/2015/04/improving-hackage-security/}{posts}
45 by Edsko de Vries and Duncan Coutts for more information.
46 \item Support for specifying setup script dependencies in \texttt{.cabal}
47 files. See
48 \href{http://www.well-typed.com/blog/2015/07/cabal-setup-deps/}{this post by
49 Duncan Coutts} for more information.
50 \item Support for HTTPS downloads in \texttt{cabal-install}. HTTPS is now used
51 by default for downloads from Hackage.
52 \item \texttt{cabal upload} learned how to upload documentation to Hackage
53 (\texttt{cabal upload --doc}).
54 \item In related news, \texttt{cabal haddock} now can generate documentation
55 intended for uploading to Hackage (\texttt{cabal haddock
56 --for-hackage}). \texttt{cabal upload --doc} runs this command automatically
57 if the documentation for current package wasn't generated yet.
58 \item New \texttt{cabal-install} command: \texttt{gen-bounds}. See
59 \href{http://softwaresimply.blogspot.se/2015/08/cabal-gen-bounds-easy-generation-of.html}{here}
60 for more information.
61 \item It's now possible to limit the scope of \texttt{--allow-newer} to single
62 packages in the install plan, both on the command line and in the config
63 file. See \href{https://github.com/haskell/cabal/issues/2756}{here} for an
64 example.
65 \item New \texttt{cabal user-config} subcommand: \texttt{init}, which creates a
66 default \texttt{\textasciitilde{}/.cabal/config} file.
67 \item New config file field: \texttt{extra-framework-dirs} (extra locations to
68 find OS X frameworks in).
69 \item \texttt{cabal-install} solver
70 \href{https://github.com/haskell/cabal/pull/2873}{now takes information about
71 extensions and language flavours into account}.
72 \item New \texttt{cabal-install} option:
73 \href{https://github.com/haskell/cabal/pull/2578}{\texttt{--offline}}, which
74 prevents \texttt{cabal-install} from downloading anything from the Internet.
75 \item New \texttt{cabal upload} option
76 \href{https://github.com/haskell/cabal/pull/2506}{\texttt{-P}/\texttt{--password-command}}
77 for reading Hackage password from arbitrary program output.
78 \item Support for GHC 8 (NB: old versions of Cabal won't work with this version
79 of GHC).
80 \end{itemize}
82 Full list of changes in Cabal 1.24 is available
83 \href{http://hackage.haskell.org/package/Cabal-1.24.0.0/changelog}{here}; full
84 list of changes in \texttt{cabal-install} 1.24 is available
85 \href{http://hackage.haskell.org/package/cabal-install-1.24.0.0/changelog}{here}.
87 \subsubsection*{Looking Forward}
89 We plan to make a new release of Cabal/\texttt{cabal-install} approximately 6
90 months after 1.24 -- that is, in late October or early November 2016. Main
91 features that are currently targeted at 1.26 are:
93 \begin{itemize}
94 \item Further work on nix-style local builds, perhaps making that code path the
95 default.
96 \item Enabling Hackage Security by default.
97 \item Native support for
98 \href{https://github.com/haskell/cabal/pull/2540}{``foreign libraries''}:
99 Haskell libraries that are intended to be used by non-Haskell code.
100 \item New Parsec-based parser for \texttt{.cabal} files.
101 \end{itemize}
103 We would like to encourage people considering contributing to take a look at
104 \href{https://github.com/haskell/cabal/issues/}{the bug tracker on GitHub}, take
105 part in discussions on tickets and pull requests, or submit their own. The bug
106 tracker is reasonably well maintained and it should be relatively clear to new
107 contributors what is in need of attention and which tasks are considered
108 relatively easy. For more in-depth discussion there is also the
109 \href{https://mail.haskell.org/mailman/listinfo/cabal-devel}{\texttt{cabal-devel}}
110 mailing list.
112 \FurtherReading
113 Cabal homepage:\hfill\url{https://www.haskell.org/cabal/}\\
114 Cabal on GitHub:\hfill\url{https://github.com/haskell/cabal}
116 \end{hcarentry}
118 \end{document}