From 64307f8d1ce51e4216856292e3646c4e93846658 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Thu, 20 Nov 2025 17:20:53 -0500 Subject: [PATCH 1/2] changelogs for 3.16.1.0 --- Cabal-hooks/CHANGELOG.md | 3 +++ Cabal-syntax/ChangeLog.md | 2 +- Cabal/ChangeLog.md | 3 +++ cabal-install-solver/ChangeLog.md | 2 +- cabal-install/ChangeLog.md | 4 ++++ release-notes/Cabal-3.16.1.0.md | 15 +++++++++++++ release-notes/cabal-install-3.16.1.0.md | 29 +++++++++++++++++++++++++ 7 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 release-notes/Cabal-3.16.1.0.md create mode 100644 release-notes/cabal-install-3.16.1.0.md diff --git a/Cabal-hooks/CHANGELOG.md b/Cabal-hooks/CHANGELOG.md index b25fd04e988..f84d2e0793d 100644 --- a/Cabal-hooks/CHANGELOG.md +++ b/Cabal-hooks/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog for `Cabal-hooks` +## 3.16.1 – November 2025 + * No changes + ## 3.16.0 – July 2025 * No changes diff --git a/Cabal-syntax/ChangeLog.md b/Cabal-syntax/ChangeLog.md index b00ea056e81..b85c112d5d6 100644 --- a/Cabal-syntax/ChangeLog.md +++ b/Cabal-syntax/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.16.0.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.16.1.0.md diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index 11394be5189..e24f3550014 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -1,3 +1,6 @@ +# 3.16.1.0 [Artem Pelenitsyn](mailto:a@pelenitsyn.top) November 2025 +* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.16.1.0.md + # 3.16.0.0 [Artem Pelenitsyn](mailto:a@pelenitsyn.top) July 2025 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.16.0.0.md diff --git a/cabal-install-solver/ChangeLog.md b/cabal-install-solver/ChangeLog.md index 0f5cea55530..42d60794681 100644 --- a/cabal-install-solver/ChangeLog.md +++ b/cabal-install-solver/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.16.0.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.16.1.0.md diff --git a/cabal-install/ChangeLog.md b/cabal-install/ChangeLog.md index f4e9babf7cd..33bfe801854 100644 --- a/cabal-install/ChangeLog.md +++ b/cabal-install/ChangeLog.md @@ -1,5 +1,9 @@ # Change-log +## 3.16.1.0 [Artem Pelenitsyn](mailto:a@pelenitsyn.top) November 2025 + +* See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.16.1.0.md + ## 3.16.0.0 [Artem Pelenitsyn](mailto:a@pelenitsyn.top) July 2025 * See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.16.0.0.md diff --git a/release-notes/Cabal-3.16.1.0.md b/release-notes/Cabal-3.16.1.0.md new file mode 100644 index 00000000000..467a9d17611 --- /dev/null +++ b/release-notes/Cabal-3.16.1.0.md @@ -0,0 +1,15 @@ +Cabal and Cabal-syntax 3.16.1.0 changelog and release notes +--- + +- Always pass `--interactive` as the first ghc argument [#11099](https://github.com/haskell/cabal/issues/11099) [#11101](https://github.com/haskell/cabal/pull/11101) + + We recently changed Cabal to use response files for all GHC arguments by default. + Unfortunately, this broke a couple of downstream consumers of cabal, notably Haskell Language Server and doctest, which both assume that `--interactive` is the first argument of the `ghc` invocation by `cabal repl`. + + This regression was fixed by implementing the `--with-repl` (#9115) argument, and tools, such as hie-bios and doctest, have been updated to take advantage of this. However, this renders already published HLS binaries, so any HLS version <=2.12.0.0, incompatible with `cabal-3.16`, as these old binaries can't be easily updated. + + In other words, no released HLS binary (at the point of this commit), is compatible with the cabal-3.16.0.0. Users have to build HLS from source to have a working toolchain. + + To give us a slightly better migration window, we undo some of the improvements to cabal, and make sure that `--interactive` is always passed as the first argument to the underlying `ghc` invocation. This hack is supposed to be temporary, and removed for cabal 3.18. + + (Ed. note: see https://github.com/haskell/cabal/issues/11305 re deprecation.) diff --git a/release-notes/cabal-install-3.16.1.0.md b/release-notes/cabal-install-3.16.1.0.md new file mode 100644 index 00000000000..bd889e0ee52 --- /dev/null +++ b/release-notes/cabal-install-3.16.1.0.md @@ -0,0 +1,29 @@ +cabal-install and cabal-install-solver 3.16.1.0 changelog and release notes +--- + +### Significant changes + +- Don't pass the executable name to external commands [#10275](https://github.com/haskell/cabal/issues/10275) [#11232](https://github.com/haskell/cabal/pull/11232) + + Previously the executable name of the external command was passed to external commands as the first argument. + + This behaviour was adapted from cargo which does this because of reasons that are internal to rust that do not affect GHC Haskell, and are even orthogonal to patterns that see common use in Haskell. + + Additionally, it complicates the 'simple' case which is what we should optimize for when building such a feature - with this change, for any executable `cabal-foo` in your search-path, `cabal foo` will be a valid invocation of that command. + + The previous use case (one executable that serves multiple external subcommands) is still possible by the following means: + + - using a wrapper around the executable + - using a symlink and check argv\[0\] in the executable + + Additionally, the variable `$CABAL` that was set by `cabal-install` was renamed to `CABAL_EXTERNAL_CABAL_PATH`. This has two reasons: + 1. it makes migration easier for users of the external command feature that were previously expecting the name of the executable to appear in `argv[1]` + + 2. it does not unnecessarily pollute the environment variable namespace as it turns out some other tools have been and are already using this name, historically + +### Other changes + +- Add compiler ABI tag and store path to `cabal path` output [#10165](https://github.com/haskell/cabal/issues/10165) [#11266](https://github.com/haskell/cabal/pull/11266) + + This adds the GHC Project Unit ID (ABI tag) and store path to the cabal path output as "compiler-abi-tag" and "compiler-store-path". These have been used in cabal-install since 3.12.1.0. + From ebf12f2435851c297f77af9b01a0767868a60d82 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Thu, 20 Nov 2025 17:22:21 -0500 Subject: [PATCH 2/2] remove changelog fragments in 3.16.1.0 --- changelog.d/pr-11101 | 14 -------------- changelog.d/pr-11232.md | 24 ------------------------ changelog.d/pr-11266 | 11 ----------- 3 files changed, 49 deletions(-) delete mode 100644 changelog.d/pr-11101 delete mode 100644 changelog.d/pr-11232.md delete mode 100644 changelog.d/pr-11266 diff --git a/changelog.d/pr-11101 b/changelog.d/pr-11101 deleted file mode 100644 index 7db667d5aaf..00000000000 --- a/changelog.d/pr-11101 +++ /dev/null @@ -1,14 +0,0 @@ -synopsis: Always pass '--interactive' as the first ghc argument -packages: Cabal -prs: #11101 -issues: #11099 -description: { -We recently changed Cabal to use response files for all GHC arguments by default. -Unfortunately, this broke a couple of downstream consumers of cabal, notably Haskell Language Server and doctest, which both assume that `--interactive` is the first argument of the `ghc` invocation by `cabal repl`. - -This regression was fixed by implementing the `--with-repl` (#9115) argument, and tools, such as hie-bios and doctest, have been updated to take advantage of this. However, this renders already published HLS binaries, so any HLS version <=2.12.0.0, incompatible with `cabal-3.16`, as these old binaries can't be easily updated. - -In other words, no released HLS binary (at the point of this commit), is compatible with the cabal-3.16.0.0. Users have to build HLS from source to have a working toolchain. - -To give us a slightly better migration window, we undo some of the improvements to cabal, and make sure that `--interactive` is always passed as the first argument to the underlying `ghc` invocation. This hack is supposed to be temporary, and removed for cabal 3.18. -} diff --git a/changelog.d/pr-11232.md b/changelog.d/pr-11232.md deleted file mode 100644 index 4d65d82ecd5..00000000000 --- a/changelog.d/pr-11232.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -synopsis: Don't pass the executable name to external commands -packages: [cabal-install] -prs: 11232 -issues: [10275] -significance: significant ---- - -Previously the executable name of the external command was passed to external commands as the first argument. - -This behaviour was adapted from cargo which does this because of reasons that are internal to rust that do not affect GHC Haskell, and are even orthogonal to patterns that see common use in Haskell. - -Additionally, it complicates the 'simple' case which is what we should optimize for when building such a feature - with this change, for any executable `cabal-foo` in your search-path, `cabal foo` will be a valid invocation of that command. - -The previous use case (one executable that serves multiple external subcommands) is still possible by the following means: - -- using a wrapper around the executable -- using a symlink and check argv\[0\] in the executable - -Additionally, the variable `$CABAL` that was set by `cabal-install` was renamed to `CABAL_EXTERNAL_CABAL_PATH`. This has two reasons: -1. it makes migration easier for users of the external command feature that were previously expecting the name of the executable - to appear in `argv[1]` -2. it does not unnecessarily pollute the environment variable namespace as it turns out some other tools have been and are already - using this name, historically diff --git a/changelog.d/pr-11266 b/changelog.d/pr-11266 deleted file mode 100644 index fa503957869..00000000000 --- a/changelog.d/pr-11266 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: "Add GHC Project Unit ID store to `cabal path` output" -packages: cabal-install -prs: #11266 -issues: #10165 -description: { - -This addds the GHC Project Unit ID store path to the cabal path output as -"project-unit-id". The GHC Project Unit ID store path has been used in cabal-install -since 3.12.1.0. - -}