From f501843439c449ca9d9e6d62f804a96886b48b4e Mon Sep 17 00:00:00 2001 From: Rodrigo Mesquita Date: Tue, 3 Sep 2024 16:31:59 +0100 Subject: [PATCH] Custom-build: Document breaking change on built comps. 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 --- release-notes/Cabal-3.12.0.0.md | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/release-notes/Cabal-3.12.0.0.md b/release-notes/Cabal-3.12.0.0.md index 4c4ff805ce9..23c416aab75 100644 --- a/release-notes/Cabal-3.12.0.0.md +++ b/release-notes/Cabal-3.12.0.0.md @@ -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