Skip to content

Commit

Permalink
Custom-build: Document breaking change on built comps.
Browse files Browse the repository at this point in the history
As mentioned by e8c9d19, Cabal 3.12 introduced a breaking change where
an unnecessary (not requested) component of a package with a "Custom"
build-type is no longer built.

This caused breakage for Agda, and was undocumented.

The behaviour, despite breaking, is the desired one -- a package
shouldn't assume the executable will be built if only the library was
requested. This commit documents the breaking change to make sure it is
more visible.

In the meantime, we've also patched Agda to no longer expect the
executable to be built when only the library is installed.

Closes #9777 and #10235
  • Loading branch information
alt-romes authored and Mikolaj committed Sep 6, 2024
1 parent 3a6f73e commit f501843
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions release-notes/Cabal-3.12.0.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,42 @@ Cabal and Cabal-syntax 3.12.0.0 changelog and release notes

### Other changes

- Installing a library with a Custom setup no longer requires building the executable [#9777](https://github.com/haskell/cabal/issues/9777) [#9650](https://github.com/haskell/cabal/pull/9650) [#10311](https://github.com/haskell/cabal/pull/10311)

For example, if we have `pkg-a.cabal`:

```
library
build-depends: pkg-b
```

and `pkg-b.cabal`:

```
library
exposed-modules: ...
executable pkg-b-exe
main-is: ...
```


An invocation `cabal build pkg-a` will build `lib:pkg-a` and `lib:pkg-b`, but
not `exe:pkg-b-exe` because it is not needed for building `pkg-a`! Previously the executable would be built unnecessarily.

If the invocation were `cabal build pkg-a exe:pkg-b-exe` then all `lib:pkg-a`, `lib:pkg-b`, and `exe:pkg-b-exe` would be built.

Note: There may be a package whose Custom setup expects the executable to be
built together with the library always. Unfortunately, this is a breaking
change for them. To migrate, packages should no longer assume the executable is
built when only the library is requested (e.g. `cabal install --lib Agda` will
*not* build the `Agda` executable, while `cabal install Agda` will).

Agda is an example of a package which expected in its `Setup.hs` copy hook the
executable to already be built. This was fixed by inspecting the copy arguments
and making sure we only use the executable when it is built, since it is only
needed when the executable too is needed.

- `cabal init` should not suggest Cabal < 2.0 [#8680](https://github.com/haskell/cabal/issues/8680) [#8700](https://github.com/haskell/cabal/pull/8700)

'cabal init' no longer suggests users to set cabal-version to less than
Expand Down

0 comments on commit f501843

Please sign in to comment.