# What's new in Cabal 1.24 — Nix-style local builds, setup dependencies, HTTPS and more!

We’ve just released versions 1.24 of both Cabal and cabal-install. The 1.24 release incorporates more than a thousand commits by 89 different contributors. This post describes what’s new and improved in this version.

## User-visible features

• Nix-style local builds in cabal-install (so far only a technical preview). See this post by Edward Z. Yang for more details.

• Integration of a new security scheme for Hackage based on The Update Framework. So far this is not enabled by default, pending some changes on the Hackage side. See these three posts by Edsko de Vries and Duncan Coutts for more information.

• Support for specifying setup script dependencies in .cabal files. Setup scripts are also now built with the cabal_macros.h-style macros for conditional compilation. See this post by Duncan Coutts for more information.

• Support for HTTPS downloads in cabal-install. HTTPS is now used by default for downloads from Hackage. This uses either curl or wget or, on Windows, PowerShell, under the hood. Install target URLs can now also use HTTPS, e.g. cabal install https://example.com/foo-1.0.tar.gz.

• cabal upload learned how to upload documentation to Hackage (cabal upload --doc) (#2890).

• In related news, cabal haddock now can generate documentation intended for uploading to Hackage (cabal haddock --for-hackage, #2852). cabal upload --doc runs this command automatically if the documentation for current package hasn’t been generated yet.

• New cabal-install command: gen-bounds for easy generation of version bounds. See this post by Doug Beardsley for more information.

• It’s now possible to limit the scope of --allow-newer to single packages in the install plan, both on the command line and in the config file. See here for an example.

• The --allow-newer option can be now used with ./Setup configure (#3163).

• New cabal user-config subcommand: init, which creates a default config file in either the default location (~/.cabal/config) or as specified by --config-file (#2553).

• New config file field extra-framework-dirs for specifying extra locations to find OS X frameworks in (#3158). Can be also specified as an argument for install and configure commands.

• cabal-install solver now takes information about extensions and language flavours into account (#2873). The solver is now also aware of pkg-config constraints (#3023).

• New cabal-install option: --offline, which prevents cabal-install from downloading anything from the Internet.

• New cabal upload option -P/--password-command for reading Hackage password from arbitrary program output.

• New --profiling-detail=$level flag with a default for libraries and executables of ‘exported-functions’ and ‘toplevel-functions’ respectively (GHC’s -fprof-auto-{exported,top} flags) (#193). • New --show-detail mode: --show-detail=direct; like streaming, but allows the test program to detect that is connected to a terminal, and works reliable with a non-threaded runtime (#2911, and serves as a work-around for #2398) • Macros VERSION_$pkgname and MIN_VERSION_\$pkgname are now also generated for the current package (#3235).

• The builddir option can now be specified via the CABAL_BUILDDIR environment variable and in cabal.config (#2484).

• Added a log file message similar to one printed by make when building in another directory (#2642).

## Bug fixes and minor improvements

• Support for GHC 8. NB: pre-1.24 versions of Cabal won’t work with GHC 8.

• Cabal is now aware of extra C sources generated by preprocessors (e.g. c2hs and hsc2hs) (#2467).

• Cabal now includes cabal_macros.h when running c2hs (#2600).

• C sources are now recompiled only when needed (#2601).

• Support Haddock response files to work around command-line length restrictions on Windows (#2746).

• Library support for multi-instance package DBs (#2948).

• Improvements in the ./Setup configure solver (#3082, #3076).

• If there are multiple remote repos, cabal update now updates them in parallel (#2503).

• cabal program itself now can be used as an external setup method. This fixes an issue when Cabal version mismatch caused unnecessary reconfigures (#2633).

• Fixed space leaks in cabal update (#2826) and in the solver (#2916, #2914). Improved performance of --reorder-goals (#3208).

• cabal exec and sandbox hc-pkg now use the configured compiler (#2859).

• The man page for cabal-install is now automatically generated (#2877).

• Miscellaneous minor and/or internal bug fixes and improvements.

## Acknowledgements

Thanks to everyone who contributed code and bug reports, and to Ryan Thomas for helping with release management. Full list of people who contributed patches to Cabal/cabal-install 1.24 is available here.

## Looking forward

We plan to make a new release of Cabal/cabal-install approximately 6 months after 1.24 — that is, in late October or early November 2016. Main features that are currently targeted at 1.26 are:

• Further work on nix-style local builds, perhaps making that code path the default.

• Enabling Hackage Security by default.

• Native suport for foreign libraries: Haskell libraries that are intended to be used by non-Haskell code.

• New Parsec-based parser for .cabal files.

• A revamped homepage for Cabal, rewritten user manual, and automated build bots for binary releases.

We would like to encourage people considering contributing to take a look at the bug tracker on GitHub, take part in discussions on tickets and pull requests, or submit their own. The bug tracker is reasonably well maintained and it should be relatively clear to new contributors what is in need of attention and which tasks are considered relatively easy. For more in-depth discussion there is also the cabal-devel mailing list.