Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cabal/ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# 3.14.0.0 [Hécate](mailto:[email protected]) September 2024
* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.0.0.md

# 3.12.1.0 [Artem Pelenitsyn](mailto:[email protected]) June 2024
* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.1.0.md

Expand Down
232 changes: 232 additions & 0 deletions release-notes/Cabal-3.14.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
### Significant changes

- Neutral field to add files to sdist [#8817](https://github.com/haskell/cabal/issues/8817) [#10107](https://github.com/haskell/cabal/pull/10107)

Adds the `extra-files` field to the cabal file specification. This is like
the other `extra-*` fields in that it is copied with the `sdist` command,
except there are no other semantics. Compare to:

* `extra-source-files`: Tracked by `cabal build`.

* `extra-doc-files`: Copied by Haddock to the html directory.

### Other changes

- Include package version when passing `--promised-dependency` flag [#10166](https://github.com/haskell/cabal/issues/10166) [#10248](https://github.com/haskell/cabal/pull/10248)

The --promised dependency flag now expects an argument in format

```
NAME-VER[:COMPONENT_NAME]=CID`
```

rather than

```
NAME[:COMPONENT_NAME]=CID
```

- Add support for building profiled dynamic way [#4816](https://github.com/haskell/cabal/issues/4816) [#9900](https://github.com/haskell/cabal/pull/9900)

Add support for profiled dynamic way

New options for cabal.project and ./Setup interface:

* `profiling-shared`: Enable building profiling dynamic way
* Passing `--enable-profiling` and `--enable-executable-dynamic` builds
profiled dynamic executables.

Support for using `profiling-shared` is guarded behind a constraint
which ensures you are using `Cabal >= 3.13`.

In the cabal file:

* `ghc-prof-shared-options`, for passing options when building in
profiling dynamic way

- Working directory support for Cabal [#9702](https://github.com/haskell/cabal/issues/9702) [#9718](https://github.com/haskell/cabal/pull/9718)

The Cabal library is now able to handle a passed-in working directory, instead
of always relying on the current working directory of the parent process.

In order to achieve this, the `SymbolicPath` abstraction was fleshed out, and
all fields of `PackageDescription` that, if relative, should be interpreted
with respect to e.g. the package root, use `SymbolicPath` instead of `FilePath`.

This means that many library functions in `Cabal` take an extra argument of type
`Maybe (SymbolicPath CWD (Dir "Package))`, which is an optional (relative or
absolute) path to the package root (if relative, relative to the current working
directory). In addition, many functions that used to manipulate `FilePath`s now
manipulate `SymbolicPath`s, require explicit conversion using e.g. `getSymbolicPath`.

To illustrate with file searching, the `Cabal` library defines:

```haskell
findFileCwd
:: forall dir1 dir2 file
. Verbosity
-> Maybe (SymbolicPath CWD (Dir dir1))

-> [SymbolicPath dir1 (Dir dir2)]

-> RelativePath dir2 File

-> IO (SymbolicPath dir1 File)
```

See Note [Symbolic paths] in `Distribution.Utils.Path` for further information
on the design of this API.

- Add MultilineStrings extension [#10245](https://github.com/haskell/cabal/pull/10245)

- adds support for the `MultilineStrings` language extension (GHC proposal #637)

- Add language extension NamedDefaults [#9740](https://github.com/haskell/cabal/pull/9740)

- adds support for the `NamedDefaults` language extension (GHC proposal #409)

### Significant changes

- Neutral field to add files to sdist [#8817](https://github.com/haskell/cabal/issues/8817) [#10107](https://github.com/haskell/cabal/pull/10107)

Adds the `extra-files` field to the cabal file specification. This is like
the other `extra-*` fields in that it is copied with the `sdist` command,
except there are no other semantics. Compare to:
Comment on lines +90 to +94
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mhh this seems duplicated (see top-of-file).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. I'm guessing it's because the changes for Cabal and Cabal-syntax get appendent. I should properly merge the sections...

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure they do (or they should do), once the Swedish Francesco is here we can confirm.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's not about changelog-d itself, it's about how we use it. The wiki says:

$ changelog-d --long --package Cabal --prlog 3.10.3.0.prlog >> Cabal.changes
$ changelog-d --long --package Cabal-syntax --prlog 3.10.3.0.prlog >> Cabal.changes


* `extra-source-files`: Tracked by `cabal build`.

* `extra-doc-files`: Copied by Haddock to the html directory.

### Other changes

- Include package version when passing `--promised-dependency` flag [#10166](https://github.com/haskell/cabal/issues/10166) [#10248](https://github.com/haskell/cabal/pull/10248)

The --promised dependency flag now expects an argument in format

```
NAME-VER[:COMPONENT_NAME]=CID`
```

rather than

```
NAME[:COMPONENT_NAME]=CID
```

- Add support for building profiled dynamic way [#4816](https://github.com/haskell/cabal/issues/4816) [#9900](https://github.com/haskell/cabal/pull/9900)

Add support for profiled dynamic way

New options for cabal.project and ./Setup interface:

* `profiling-shared`: Enable building profiling dynamic way
* Passing `--enable-profiling` and `--enable-executable-dynamic` builds
profiled dynamic executables.

Support for using `profiling-shared` is guarded behind a constraint
which ensures you are using `Cabal >= 3.13`.

In the cabal file:

* `ghc-prof-shared-options`, for passing options when building in
profiling dynamic way

- Working directory support for Cabal [#9702](https://github.com/haskell/cabal/issues/9702) [#9718](https://github.com/haskell/cabal/pull/9718)

The Cabal library is now able to handle a passed-in working directory, instead
of always relying on the current working directory of the parent process.

In order to achieve this, the `SymbolicPath` abstraction was fleshed out, and
all fields of `PackageDescription` that, if relative, should be interpreted
with respect to e.g. the package root, use `SymbolicPath` instead of `FilePath`.

This means that many library functions in `Cabal` take an extra argument of type
`Maybe (SymbolicPath CWD (Dir "Package))`, which is an optional (relative or
absolute) path to the package root (if relative, relative to the current working
directory). In addition, many functions that used to manipulate `FilePath`s now
manipulate `SymbolicPath`s, require explicit conversion using e.g. `getSymbolicPath`.

To illustrate with file searching, the `Cabal` library defines:

```haskell
findFileCwd
:: forall dir1 dir2 file
. Verbosity
-> Maybe (SymbolicPath CWD (Dir dir1))

-> [SymbolicPath dir1 (Dir dir2)]

-> RelativePath dir2 File

-> IO (SymbolicPath dir1 File)
```

See Note [Symbolic paths] in `Distribution.Utils.Path` for further information
on the design of this API.

- Add flag ignore-build-tools [#10128](https://github.com/haskell/cabal/pull/10128)

- Adds flag --ignore-build-tools which allows a user to ignore the tool
dependencies declared in build-tool-depends. For general use, this flag
should never be needed, but it may be useful for packagers.

- Do not try to build dynamic executables on Windows [#10217](https://github.com/haskell/cabal/pull/10217)

- Cabal will now exit with a descriptive error message instead of attempting to
build a dynamic executable on Windows.

- Always pass `ghc-options` to GHC [#8717](https://github.com/haskell/cabal/pull/8717)

Previously, options set in the package field `ghc-options` would not be passed
to GHC during the link phase for shared objects (where multiple `.o` or
`.dyn_o` files are merged into a single object file). This made it impossible
to use `ghc-options` to use a different linker by setting (for example)
`ghc-options: -optl-fuse-ld=mold -optlm-fuse-ld=mold`; the options would be
dropped in the link phase, falling back to the default linker.

It was possible to work around this by duplicating the `ghc-options` to
`ghc-shared-options`, which _are_ passed in the shared link phase, but that had
the (undocumented and unfortunate) side-effect of disabling the GHC
`-dynamic-too` flag, effectively doubling compilation times when
`ghc-shared-options` are set.

Now, `ghc-options` are combined with `ghc-shared-options` (to accurately
reflect the documentation on this feature) and the fact that
`ghc-shared-options` disables `-dynamic-too` is documented.

- Introduce SetupHooks [#9551](https://github.com/haskell/cabal/pull/9551)

Introduction of a new build type: Hooks.
This build type, intended as replacement to the Custom build type, integrates
better with the rest of the ecosystem (`cabal-install`, Haskell Language Server).

The motivation and full design of this new build-type are specified in the
Haskell Foundation Tech Proposal
[Replacing the Cabal Custom build-type](https://github.com/haskellfoundation/tech-proposals/pull/60).

Package authors willing to use this feature should declare `build-type: Hooks`
in their `.cabal` file, declare a custom-setup stanza with a dependency on the
`Cabal-hooks` package, and define a module `SetupHooks` that exports a value
`setupHooks :: SetupHooks`, using the API exported by `Distribution.Simple.SetupHooks`
from the `Cabal-hooks` package. Refer to the Haddock documentation of
`Distribution.Simple.SetupHooks` for example usage.

- Configure build-type in terms of Hooks [#9969](https://github.com/haskell/cabal/pull/9969)

The `build-type: Configure` is now implemented in terms of `build-type: Hooks`
rather than in terms of `build-type: Custom`. This moves the `Configure`
build-type away from the `Custom` issues. Eventually, `build-type: Hooks` will
no longer imply packages are built in legacy-fallback mode. Now, when that
happens, `Configure` will also stop implying `legacy-fallback`.

The observable aspect of this change is `runConfigureScript` now having a
different type, and `autoconfSetupHooks` being exposed `Distribution.Simple`.
The former is motivated by internal implementation details, while the latter
provides the `SetupHooks` value for the `Configure` build type, which can be
consumed by other `Hooks` clients (e.g. eventually HLS).

- Cabal can issue a number of error messages referencing "Setup configure",
but it simply references "configure" which could mean any of three
things (Setup configure, the package's "configure" script, or "cabal
configure"). This has recently caught out even Cabal devs. Clarify these
messages. [#9476](https://github.com/haskell/cabal/pull/9476)
Loading