Merge pull request #10428 from 9999years/add-validate-tasty-arg
[cabal.git] / release-notes / cabal-install-3.14.0.0.md
blob3a890db9acc131cf7d853983f192d2874b1797b2
1 cabal-install 3.14.0.0 changelog and release notes.
2 ---
5 ### Significant changes
7 - `haddock-project` support for subcomponents [#9821](https://github.com/haskell/cabal/pull/9821)
9   - `haddock-project` handles sublibraries, test suites and benchmarks.
10   - `haddock` receives `--package-name` flag which allows to set names of
11     components which are included in the main `index.html` file.
12   - added `--use-unicode` flag to `haddock` and `haddock-project` commands.
13   - The directory structure of `./dist-newstyle` has changed.  `haddock`
14     subcommand will install `package:sublib` component in a directory
15     `package/sublib` under `l/sublib/doc/html/`.  This is important for
16     `haddock-project` command and in the future might will be useful for hackage
17     support of sublibraries.  See
18     https://github.com/haskell/cabal/pull/9821#discussion_r1548557115.
20 - Redefine `build-type: Configure` in terms of `Hooks` [#9969](https://github.com/haskell/cabal/pull/9969)
22   The `build-type: Configure` is now implemented in terms of `build-type: Hooks`
23   rather than in terms of `build-type: Custom`. This moves the `Configure`
24   build-type away from the `Custom` issues. Eventually, `build-type: Hooks` will
25   no longer imply packages are built in legacy-fallback mode. When that
26   happens, `Configure` will also stop implying `legacy-fallback`.
28   The observable aspect of this change is `runConfigureScript` now having a
29   different type, and `autoconfSetupHooks` being exposed from `Distribution.Simple`.
30   The former is motivated by internal implementation details, while the latter
31   provides the `SetupHooks` value for the `Configure` build type, which can be
32   consumed by other `Hooks` clients (e.g. eventually HLS).
34 ### Other changes
36 - Add support for building profiled dynamic way [#4816](https://github.com/haskell/cabal/issues/4816) [#9900](https://github.com/haskell/cabal/pull/9900)
39   New options for `cabal.project` and `./Setup` interface:
41   * `profiling-shared`: Enable building profiling dynamic way
42   * Passing `--enable-profiling` and `--enable-executable-dynamic` builds
43     profiled dynamic executables.
45   Support for using `profiling-shared` is guarded behind a constraint
46   which ensures you are using `Cabal >= 3.13`.
48   In the `.cabal` file:
50   * `ghc-prof-shared-options`, for passing options when building in
51     profiling dynamic way
53 - Fix interaction of `--*-shared` and `--*-executable-dynamic` options. [#10050](https://github.com/haskell/cabal/issues/10050) [#9900](https://github.com/haskell/cabal/pull/9900)
55   If you explicitly request `--disable-shared` it should disable the building of
56   a shared library and override any automatic ways this option is turned on.
58   Passing `--enable-executable-dynamic` turns on `--enable-shared` if the option is
59   not specified explicitly.
61   Before this patch, writing `--disable-shared` on its own would not disable the building of shared libraries. Writing `--disable-shared` and `--disable-executable-dynamic` would disable shared library
62   creation (despite `--disable-executable-dynamic` being the default).
64   Now:
66   * If you specify `--enable-shared` then shared objects are built.
67   * If you specify `--disabled-shared` then shared objects are not built.
68   * If you don't explicitly specify whether you want to build shared libraries then
69     * `--enable-executable-dynamic` will automatically turn on building shared libraries
70     * `--enable-executable-dynamic --enable-profiling` will automatically turn on building
71       shared profiling libraries (if supported by your compiler).
73 - `curl` transport now supports Basic authentication [#10089](https://github.com/haskell/cabal/pull/10089)
75   - The `curl` HTTP transport previously only supported the HTTP Digest
76     authentication scheme.  Basic authentication is now supported
77     when using HTTPS; Curl will use the scheme offered by the server.
78     The `wget` transport already supports HTTPS.
80 - Enhance error detection for cabal root project files, including broken symlinks [#9937](https://github.com/haskell/cabal/issues/9937) [#10103](https://github.com/haskell/cabal/pull/10103)
82   - Added proper detection and reporting for issues with cabal root project files. Previously, these files were silently ignored if they were broken symlinks. Now, `cabal` will exit
83   with an error in such case.
85 - Let cabal init remember chosen language within current session [#10096](https://github.com/haskell/cabal/issues/10096) [#10115](https://github.com/haskell/cabal/pull/10115)
87   When `cabal init` asks for a language, the last choice made will be used as the new default for the current prompt.
89 - Filter out `-dinitial-unique` and `-dunique-increment` from package hash [#10122](https://github.com/haskell/cabal/pull/10122)
91   `-dinitial-unique` and `-dunique-increment` are now filtered out when computing the
92   store hash of a package.
94   These options shouldn't affect the output of the package and hence
95   shouldn't affect the store hash of a package.
97 - Warn about `git://` protocol [#10261](https://github.com/haskell/cabal/pull/10261)
99   `cabal check` will warn about the insecure (and no longer supported by GitHub or Gitlab, among others) `git://` protocol in `source-repository`.
101   See [Git Book](https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols#_the_cons_4)
102   for an explanation.
104 - Enable recompilation avoidance during Haddock generation [#9175](https://github.com/haskell/cabal/issues/9175) [#9177](https://github.com/haskell/cabal/pull/9177)
106   * Haddock no longer writes compilation files by default, so we do not need to
107     pass tmp dirs for `-hidir`, `-stubdir`, and `-odir` via `--optghc`. Indeed, we
108     do not *want* to do so, since it results in recompilation for every invocation
109     of Haddock via Cabal. We now stop this from happening for Haddock versions
110     2.28 and greater, since that is when Hi Haddock was introduced.
112   * We no longer define the `__HADDOCK_VERSION__` macro when invoking GHC through
113     Haddock, since doing so essentially guarantees recompilation during
114     documentation generation. We audited all uses of `__HADDOCK_VERSION__` in
115     hackage, ensuring there was a reasonable path forward to migrate away from
116     using `__HADDOCK_VERSION__` for each, while generating the same documentation
117     as it did before.
118     If you are a user of `__HADDOCK_VERSION__`, please take a look at the
119     discussion in https://github.com/haskell/cabal/pull/9177 and reach out to us
120     if your use case is not covered.
122   * Rename the `--haddock-lib` flag to `--haddock-resources-dir` (and
123     `haddock-lib:` cabal.project field to `haddock-resources-dir:`), and add this
124     flag to the users guide since it was missing an entry.
126   * `documentation: true` or `--enable-documentation` now implies `-haddock` for
127     GHC.
129 - Bug fix - Don't pass `--coverage-for` for non-dependency libs of testsuite [#10046](https://github.com/haskell/cabal/issues/10046) [#10250](https://github.com/haskell/cabal/pull/10250)
131 - Added `--all` and `--haddock-all` switches to `haddock-project` subcommand [#10051](https://github.com/haskell/cabal/issues/10051) [#10163](https://github.com/haskell/cabal/pull/10163)
133 - Clarify error message when `pkg-config` is not found [#10122](https://github.com/haskell/cabal/pull/10122)
135   - The error message when `pkg-config` is not found or querying it fails will no
136   longer incorrectly claim that the package is missing in the database.
138 - Update the SPDX License List to version 3.25
140   The LicenseId and LicenseExceptionId types are updated to reflect the SPDX
141   License List version 3.25 (2024-08-19).