diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index 45abf6e691f..7aebc02edda 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -1,4 +1,5 @@ # 3.12.0.0 [Francesco Ariis](mailto:fa-ml@ariis.it) May 2024 +# 3.12.0.0 [Francesco Ariis](mailto:fa-ml@ariis.it) March 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.0.0.md # 3.10.3.0 [Hécate](mailto:hecate+github@glitchbra.in) January 2024 diff --git a/changelog.d/base16-script-cache b/changelog.d/base16-script-cache deleted file mode 100644 index a2473271635..00000000000 --- a/changelog.d/base16-script-cache +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Script cache dir is the base16 hash of the canonical path of the script. -prs: #9459 -packages: cabal-install - -description: { - -Script cache dir is the base16 hash of the canonical path of the script. - -} diff --git a/changelog.d/die-on-missing-pkg-list b/changelog.d/die-on-missing-pkg-list deleted file mode 100644 index 78e25843197..00000000000 --- a/changelog.d/die-on-missing-pkg-list +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Die if package list is missing -packages: cabal-install -prs: #8944 - -description: { - -If a package list is missing, `cabal` will now die and suggest the user to run -`cabal update` instead of continuing into not being able to find packages coming -from the remote package server. - -} diff --git a/changelog.d/inconsistent-indentation b/changelog.d/inconsistent-indentation deleted file mode 100644 index 0cceee639a1..00000000000 --- a/changelog.d/inconsistent-indentation +++ /dev/null @@ -1,23 +0,0 @@ -synopsis: Warn about inconsistent indentation -packages: Cabal-syntax -prs: #8975 - -description: - Make Cabal warn about inconsistent indentation in .cabal files. - - For example warn about somewhat common decreasing indentation like in - - ```cabal - library - default-language: Haskell2010 - build-depends: base - ghc-options: -Wall - ``` - - The change is `readFields` function. - - This is an effect of using `indentOfAtLeast` method/approach: any indentation greater than current offset is accepted. - - That behavior is desirable to parsing multiline field contents, but it is a bit surprising for fields in sections, which we expect to be aligned. - - Such insonsistency seems to be always a mistake, and it's easy to fix once a machine points it out. diff --git a/changelog.d/index-state-cabal-update b/changelog.d/index-state-cabal-update deleted file mode 100644 index f40ae672709..00000000000 --- a/changelog.d/index-state-cabal-update +++ /dev/null @@ -1,14 +0,0 @@ -synopsis: Reject index-state younger than cached index file -packages: cabal-install -prs: #8944 - -description: { - -Requesting to use an index-state younger than the cached version will now fail, -telling the user to use an index-state older or equal to the cached file, or to -run `cabal update`. - -The warning for a non-existing index-state has been also demoted to appear only -on verbose logging. - -} diff --git a/changelog.d/issue-5993 b/changelog.d/issue-5993 deleted file mode 100644 index 47580dd57cb..00000000000 --- a/changelog.d/issue-5993 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Warn early that overwrite policy is needed -description: - Waiting for a long build and then seeing the install fail because a flag was - missing is frustrating. With this change we skip the wait and warn early, - before the build, that an overwrite policy flag would be needed for the - install to succeed. -packages: cabal-install -prs: #9268 -issues: #5993 diff --git a/changelog.d/issue-6738 b/changelog.d/issue-6738 deleted file mode 100644 index d2bf4053756..00000000000 --- a/changelog.d/issue-6738 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add support for authentication tokens for uploading to Hackage -packages: cabal-install -prs: #9058 -issues: #6738 - -description: { - -A new flag `--token` (`-t`) has been created. Token authentication takes -precedence over username and password meaning that, if a token is set, -the username and password flags are ignored. - -} \ No newline at end of file diff --git a/changelog.d/issue-7817 b/changelog.d/issue-7817 deleted file mode 100644 index 78d18e8d31a..00000000000 --- a/changelog.d/issue-7817 +++ /dev/null @@ -1,15 +0,0 @@ -synopsis: Make --(test-)show-details=direct the default -packages: Cabal cabal-install -prs: #8942 - -description: { - -This option leaves it up to the testing framework to decide what and how to print out, -potentially leading to a prettier output. For example, most of the testing frameworks -use colors, which wouldn't be seen with any other option. - -This comes with a tradeoff, though: Cabal will not create a log file with this option. -If you prefer a log file, consider setting `--test-show-details=streaming` (or something -else) manually. - -} diff --git a/changelog.d/issue-8206 b/changelog.d/issue-8206 deleted file mode 100644 index 09292fd949b..00000000000 --- a/changelog.d/issue-8206 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: cabal init now generates cabal versions older than 1.12 with the correct >= syntax -packages: cabal-install -prs: #8860 -issues: #8206 diff --git a/changelog.d/issue-8270 b/changelog.d/issue-8270 deleted file mode 100644 index b26eec51d18..00000000000 --- a/changelog.d/issue-8270 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add `--haddock-output-dir` flag to `cabal haddock`. -packages: Cabal cabal-install -prs: #8788 -issues: #8720 -significance: significant - -description: { - -- Added `--haddock-output-dir` flag to `cabal haddock`. This flag gives the user full control over the directory where the documentation is placed. It allows both relative and absolute paths. - -} diff --git a/changelog.d/issue-8639 b/changelog.d/issue-8639 deleted file mode 100644 index 18d8606c690..00000000000 --- a/changelog.d/issue-8639 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add support for asm, cmm, and js sources in executable components -packages: Cabal -prs: #9061 -issues: #8639 -significance: significant - -description: { - -Executable components now support the inclusion of asm, cmm, and js source files in a cabal file using the same syntax as is used for these sources in library components, similar to how c and c++ sources are supported in both types of components. This syntax was already parsed in cabal files, but was silently ignored in the build step, so no changes to syntax are made. - -} - diff --git a/changelog.d/issue-8680 b/changelog.d/issue-8680 deleted file mode 100644 index 0511f26fe9d..00000000000 --- a/changelog.d/issue-8680 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: `cabal init` should not suggest Cabal < 2.0 -packages: Cabal -issues: #8680 -prs: #8700 - -description: { - -'cabal init' no longer suggests users to set cabal-version to less than 2.0 - -} diff --git a/changelog.d/issue-8689 b/changelog.d/issue-8689 deleted file mode 100644 index c157bb9eca5..00000000000 --- a/changelog.d/issue-8689 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Make sure Haskell files in explicit source directories take precedence over autogenerated Haskell files -packages: cabal-install -prs: #8690 -issues: #8689 - -description: { - -- Changed order or directories in GHC invocation so that source - directories explicitly specified in cabal file will be considered - before Cabal’s internal build directory. - -} diff --git a/changelog.d/issue-8737 b/changelog.d/issue-8737 deleted file mode 100644 index 3bdabc28e7a..00000000000 --- a/changelog.d/issue-8737 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Document `remote-repo-cache` as implemented. -packages: Cabal -issues: #8737 -prs: #8738 diff --git a/changelog.d/issue-8757 b/changelog.d/issue-8757 deleted file mode 100644 index 82a71c0f935..00000000000 --- a/changelog.d/issue-8757 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: `cabal init`: suggest BSD-3 as default license -packages: cabal-install -prs: #8764 -issues: #8757 diff --git a/changelog.d/issue-8785 b/changelog.d/issue-8785 deleted file mode 100644 index 47238ed20b6..00000000000 --- a/changelog.d/issue-8785 +++ /dev/null @@ -1,17 +0,0 @@ -synopsis: Also render short options with arguments -packages: cabal-install -prs: #9043 -issues: #8785 - -description: { - -Show how arguments are used with both short and long forms of options: - -```diff -< -v, --verbose[=n] Control verbosity (n is 0--3, default -> -v[n], --verbose[=n] Control verbosity (n is 0--3, default -< -w, --with-compiler=PATH give the path to a particular compiler -> -w PATH or -wPATH, --with-compiler=PATH -``` - -} diff --git a/changelog.d/issue-8835 b/changelog.d/issue-8835 deleted file mode 100644 index 587d4e34984..00000000000 --- a/changelog.d/issue-8835 +++ /dev/null @@ -1,6 +0,0 @@ -synopsis: config file: allow more flags in the init section -packages: cabal-install -prs: #8839 -issues: #8835 -description: The init section of config file now allows the following fields: -`no-comments`, `quiet`, `simple` and `minimal` diff --git a/changelog.d/issue-9098-lexbraces b/changelog.d/issue-9098-lexbraces deleted file mode 100644 index b637c08a34b..00000000000 --- a/changelog.d/issue-9098-lexbraces +++ /dev/null @@ -1,19 +0,0 @@ -synopsis: Add LexBraces lexer warning -packages: Cabal-syntax -issues: #9098 -prs: #9099 - -description: { - -LexBraces warning is issued when brace delimiting syntax is used. -This way, using `readFields'`, a low-lever consumer may decide -whether braces were used. - -(Looking for a brace character in the input is imprecise, as braces can occur inside field content). - -This warning is not propagated to parser warnings, -so e.g. readGenericPackageDescription doesn't warn about it. -This is because all parser warnings prevent uploads to Hackage, -and using braces (or not) is opinionated choice. - -} diff --git a/changelog.d/issue-9113 b/changelog.d/issue-9113 deleted file mode 100644 index 8d108c1fba1..00000000000 --- a/changelog.d/issue-9113 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Fix handling of ETag header for remote packages -packages: cabal-install -prs: #9116 -issues: #9113 - -description: { - -Remote packages will now be cached regardless of the capitalization of the -"ETag" header. Previously remote packages would not be cached if the header -name did not match exactly. Now they will be cached even if the header's -capitalization is different. - -} diff --git a/changelog.d/issue-9453 b/changelog.d/issue-9453 deleted file mode 100644 index 16e7a48fa86..00000000000 --- a/changelog.d/issue-9453 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Remove Distribution.Utils.TempTestDir module from Cabal library -packages: Cabal -prs: #9454 -issues: #9453 - -description: { - -This library was only used by internal tests, and now lives in the `Cabal-tests` library -which is shared across test components. - -} - diff --git a/changelog.d/issue-9534 b/changelog.d/issue-9534 deleted file mode 100644 index 3e7a887af71..00000000000 --- a/changelog.d/issue-9534 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Distinguish `powerpc64le`, by adding `PPC64LE` constructor to type `Arch` -packages: Cabal Cabal-syntax -prs: #9535 -issues: #9534 - -description: { - -Adds constructor `PPC64LE` to type `Arch` to distinguish architecture -powerpc64le from powerpc64. Existing constructor `PPC64` now exclusively -represents powerpc64. - -} diff --git a/changelog.d/issue-9578 b/changelog.d/issue-9578 deleted file mode 100644 index 63913b7f675..00000000000 --- a/changelog.d/issue-9578 +++ /dev/null @@ -1,26 +0,0 @@ -synopsis: Show provenance of project constraints -description: - Show imports when the solver rejects a package version due to a project - constraint. Even though imports are relative to their parent when imported, - their paths are shown relative to the directory of the project in the solver - output. - - ``` - $ cabal build all --dry-run - ... - [__1] next goal: hashable - [__1] rejecting: hashable-1.4.3.0 - (constraint from cabal.project requires ==1.4.2.0) - [__1] rejecting: hashable-1.4.2.0 - (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) - imported by: cabal.project - ``` - - Fixes some test failures detecting cycles in imports, when; - - - the wrong import was reported as starting the cycle - - a cycle was reported that wasn't actually a cycle - -packages: cabal-install-solver cabal-install -prs: #9578 -issues: #9562 diff --git a/changelog.d/issue-9678 b/changelog.d/issue-9678 deleted file mode 100644 index cdcf8405311..00000000000 --- a/changelog.d/issue-9678 +++ /dev/null @@ -1,17 +0,0 @@ -synopsis: Clarify the semantics of the -package-db flag -packages: cabal-install -prs: -issues: #9678 -prs: #9683 - -description: { - -The `--package-db` flag now only applies to the default -immutable initial package stack rather than also applying to the store -package database. - -This fixes an assertion failure which was triggered when using -package-db and also -clarifies how it should interact with `--store-dir` and `--dist-dir` flags. - -} - diff --git a/changelog.d/issue-9736 b/changelog.d/issue-9736 deleted file mode 100644 index f5a9dc1abee..00000000000 --- a/changelog.d/issue-9736 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add support for `GHC2024` -packages: Cabal cabal-install -issues: #9736 -prs: #9791 - -description: { - -Support for the `GHC2024` language edition, introduced by GHC 9.10, has been -added. It can now be used in the `default-language` and `other-languages` -fields, and will be offered as an option by `cabal init`. - -} diff --git a/changelog.d/pkgconfig-once b/changelog.d/pkgconfig-once deleted file mode 100644 index bdb8e4b511b..00000000000 --- a/changelog.d/pkgconfig-once +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: PkgConfig individual calls -prs: #9134 -packages: cabal-install-solver - -description: { - -- `cabal` invokes `pkg-config` individually for each lib if querying for all doesn't return the expected result - -} diff --git a/changelog.d/pr-8130 b/changelog.d/pr-8130 deleted file mode 100644 index 70acb4eb52b..00000000000 --- a/changelog.d/pr-8130 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Split up `Distribution.Simple.Setup` -packages: Cabal -prs: #8130 - -description: { - -The external interface of 'Distribution.Simple.Setup' has been kept the same, but internally it has been broken up into smaller modules. -This improves build times in two ways: -1. GHC is superlinear in the size of files, meaning that splitting up a large file can reduce overall compile times. -2. Breaking up the module allows dependent modules to refine their imports to just the parts they require, allowing them to start buildling quicker -when GHC is run in parrallel make mode ('--ghc-options -j'). - -} diff --git a/changelog.d/pr-8427 b/changelog.d/pr-8427 deleted file mode 100644 index 402765942d6..00000000000 --- a/changelog.d/pr-8427 +++ /dev/null @@ -1,19 +0,0 @@ -synopsis: Reimplementing `cabal check` -packages: Cabal -prs: #8427 -issues: #7423 - -description: { - -- For `cabal-install` users: `cabal check` do not warn on -O2 or similar - options if under an off-by-default cabal flag. -- For `Cabal` the library users: `checkPackage` signature has been simplified, - you do not need to pass a specific configuration of the package, since - we do not flatten GenericPackageDescription no more. -- For `Cabal` the library users: `checkPackageFileNames` has been removed, - use `checkPackageFiles` instead. -- For `Cabal` the library users: `checkPackageFilesGPD` has been introduced, - a function similar to `checkPackageFiles` that works on - `GenericPackageDescription`. You do not need to use - `flattenPackageDescription` anymore. -} diff --git a/changelog.d/pr-8454 b/changelog.d/pr-8454 deleted file mode 100644 index 915caf61cc9..00000000000 --- a/changelog.d/pr-8454 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add --project-dir flag -packages: cabal-install -prs: #8454 -issues: #7695 #7940 -significance: significant - -description: { - -- Added --project-dir flag for specifying the project's root directory -- Deprecated using --project-file with an absolute filepath without also using --project-dir - -} diff --git a/changelog.d/pr-8557 b/changelog.d/pr-8557 deleted file mode 100644 index f2f11d2eeac..00000000000 --- a/changelog.d/pr-8557 +++ /dev/null @@ -1,20 +0,0 @@ -synopsis: Add `--semaphore` flag to enable interaction with GHC Job Server protocol -packages: cabal-install -prs: #8557 - -description: { - -When cabal-install is passed the `--semaphore` flag it will now act as a job server -according to the GHC Jobserver Protocol. - -In particular this means that cabal-install will create a semaphore which it then -passes to `./Setup build` (and hence `ghc`) which can be used by `ghc` in order to -control how much paralellism it uses, coordinating with other simultaneously running -processes. - -This feature requires ghc-9.8 in order to use, as this is the first version of GHC -which implements the protocol. - -The protocol is specified by [GHC Proposal #540](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0540-jsem.rst). - -} diff --git a/changelog.d/pr-8557-2 b/changelog.d/pr-8557-2 deleted file mode 100644 index c472f992c31..00000000000 --- a/changelog.d/pr-8557-2 +++ /dev/null @@ -1,16 +0,0 @@ -synopsis: Add --semaphore option to ./Setup build interface -packages: Cabal -prs: #8557 - -description: { - -When `./Setup build --semaphore ` is called, `ghc` will be called with the -`-jsem` option. It is the responsibility of the caller of `./Setup build` to -manage the semaphore according to the GHC Jobserver Protocol. - -This low level interface is intended to be called by a high-level tool such as -`cabal-install` which can create and manage the semaphore appropriately. - -The protocol is specified by [GHC Proposal #540](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0540-jsem.rst). - -} diff --git a/changelog.d/pr-8662 b/changelog.d/pr-8662 deleted file mode 100644 index bfe0512c6f4..00000000000 --- a/changelog.d/pr-8662 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Installation of extra-compilation-artifacts directory -packages: Cabal -prs: #8662 -issues: -description: { - -- GHC plugins now can store custom data in the 'extra-compilation-artifacts' directory which gets installed with the package. - -} diff --git a/changelog.d/pr-8676 b/changelog.d/pr-8676 deleted file mode 100644 index 511a04569e6..00000000000 --- a/changelog.d/pr-8676 +++ /dev/null @@ -1,8 +0,0 @@ -synopsis: Adds functionality for the --offline flag with the "build" command. -packages: cabal-install -prs: #8676 - -description: { - The --offline flag previously created in #2578 but was only implemented for the install command even thought the flag didn't throw an error whenever the build command was run. This PR adds functionality for the --offline flag with the build command. -Additionally there is a new PackageTest for the flag using the build command. -} diff --git a/changelog.d/pr-8709 b/changelog.d/pr-8709 deleted file mode 100644 index f8f31edc269..00000000000 --- a/changelog.d/pr-8709 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add warning for running cabal run, cabal test and cabal bench with +RTS flag -packages: cabal-install -prs: #8709 - -description: { - -This adds a warning when RTS options are passed to cabal instead of the binary -for the commands 'run', 'bench' and 'test', as most users want to pass these -options to their binary. - -} diff --git a/changelog.d/pr-8726 b/changelog.d/pr-8726 deleted file mode 100644 index fa9975a33bb..00000000000 --- a/changelog.d/pr-8726 +++ /dev/null @@ -1,18 +0,0 @@ -synopsis: Add support for loading multiple components into one repl session -packages: cabal-install -prs: #8726 #8238 #8491 - -description: { - -The `repl` command is extended in order to allow starting a repl session with -multiple local components. When a user specifies a target to the "repl" command -which resolves to multiple local components then `cabal` will start a repl session -which loads them all into a single GHC session if the multi-repl is enabled. - -The multi-repl can be enabled by passing `--enable-multi-repl`, or writing `multi-repl: True` in -your cabal.project file. - -The feature is fully explained in [this blog post](https://well-typed.com/blog/2023/03/cabal-multi-unit/). - - -} diff --git a/changelog.d/pr-8726-2 b/changelog.d/pr-8726-2 deleted file mode 100644 index d59a8ac4dc2..00000000000 --- a/changelog.d/pr-8726-2 +++ /dev/null @@ -1,24 +0,0 @@ -synopsis: Add --promised-dependency flag to ./Setup configure interface -packages: Cabal -prs: #8726 - -description: { - -There is a new flag `--promised-dependency` to allow users to -configure a package *without* having previously built the dependency. -Instead, we promise to the configure phase that we will have built it -by the time we build the package. This allows us to configure all the -packages we intend to load into the repl without building any -dependenices which we will load in the same session, because the -promise is satisifed due to loading the package and it's dependency -into one multi-session which ensures the dependency is built before -it is needed. - -A user of ./Setup configure specifies a promised dependency by -using the "--promised-dependency" flag with a normal dependency specification. For example: - -``` - '--promised-dependency=cabal-install-solver=cabal-install-solver-3.9.0.0-inplace' -``` - -} diff --git a/changelog.d/pr-8726-3 b/changelog.d/pr-8726-3 deleted file mode 100644 index 337ad29909e..00000000000 --- a/changelog.d/pr-8726-3 +++ /dev/null @@ -1,16 +0,0 @@ -synopsis: Add option to ./Setup repl to write repl arguments to file -packages: Cabal -prs: #8726 - -description: { - -The `./Setup repl` command is modified to allow a user to defer -starting the repl and instead instruct the command to write the -necessary build flags to a directiory. The option is called -`--repl-multi-file `. - -This is useful when starting multi-component sessions as we want to query Setup.hs -for the arguments which are needed to build each component but not for ./Setup to -start the repl itself. - -} diff --git a/changelog.d/pr-8728 b/changelog.d/pr-8728 deleted file mode 100644 index 8d9b9d14047..00000000000 --- a/changelog.d/pr-8728 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Deduplicate LD_LIBRARY_PATH when running tests -packages: Cabal -prs: #8728 diff --git a/changelog.d/pr-8854 b/changelog.d/pr-8854 deleted file mode 100644 index 8b77d09d3ed..00000000000 --- a/changelog.d/pr-8854 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Add language extension ListTuplePuns -packages: Cabal-syntax -prs: #8854 - -description: { - -- adds support for the `ListTuplePuns` language extension (GHC proposal #475) - -} diff --git a/changelog.d/pr-8879 b/changelog.d/pr-8879 deleted file mode 100644 index 079d642289b..00000000000 --- a/changelog.d/pr-8879 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add `cabal path` command -packages: cabal-install -prs: #8879 - -description: { - -The `cabal path` command prints the file system paths used by Cabal. -It is intended for use by tooling that needs to read or modify Cabal -data, such that it does not need to replicate the complicated logic -for respecting `CABAL_DIR`, `CABAL_CONFIG`, etc. - -} diff --git a/changelog.d/pr-8897 b/changelog.d/pr-8897 deleted file mode 100644 index a89023dc416..00000000000 --- a/changelog.d/pr-8897 +++ /dev/null @@ -1,14 +0,0 @@ -synopsis: Make check comply with Hackage requirements -packages: Cabal cabal-install -prs: #8897 - -description: { - -- `cabal check` will only return exitcode 1 when the package is not fit - for Hackage. E.g. it will not error anymore when your `synopsis:` is - larger than `description:`, just emit a warning. -- Cabal: Distribution.Client.Check now exports `isHackageDistError`, for - third-party tools to know if a specific error will preclude a package - from being uploaded to Hacakge. - -} diff --git a/changelog.d/pr-8908 b/changelog.d/pr-8908 deleted file mode 100644 index 420248944a4..00000000000 --- a/changelog.d/pr-8908 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: `cabal check`: clearly mark Errors -packages: cabal-install -prs: #8908 - -description: { - -- `cabal check` will now mark errors (which make the program return 1 and - Hackage refuse the package) by prepending them with an "Error: " string - in the output. - -} diff --git a/changelog.d/pr-8949 b/changelog.d/pr-8949 deleted file mode 100644 index cbd0859a6eb..00000000000 --- a/changelog.d/pr-8949 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Warn when project configuration options are going to be ignored. -packages: cabal-install -prs: #8949 - -description: { - -Some project configuration options can only be specified from the command line. -If the user specified those options from a project file, cabal-install would -silently ignore them. Now cabal-install will emit a warning. - -} diff --git a/changelog.d/pr-8972 b/changelog.d/pr-8972 deleted file mode 100644 index 04e300ea12e..00000000000 --- a/changelog.d/pr-8972 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Fix precedence for PATH for build-tools-depends -packages: Cabal cabal-install -prs: #8972 - -description: { - -- fixes a bug introduced in #8506 that caused executables in the path to take precedence over those specified in build-tools-depends. - -} diff --git a/changelog.d/pr-8992 b/changelog.d/pr-8992 deleted file mode 100644 index ef74800c430..00000000000 --- a/changelog.d/pr-8992 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Add language extension ExtendedLiterals -packages: Cabal-syntax -prs: #8992 -significance: significant - -description: { - -- adds support for the ExtendedLiterals language extension (GHC proposal #451) - -} diff --git a/changelog.d/pr-9006 b/changelog.d/pr-9006 deleted file mode 100644 index 905a962e646..00000000000 --- a/changelog.d/pr-9006 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Add Haiku as a known platform -packages: Cabal -prs: #9006 - -description: { - -- Cabal: Distribution now recognises Haiku as a valid platform, - and also implements Haiku's unique directory layout. - -} diff --git a/changelog.d/pr-9007 b/changelog.d/pr-9007 deleted file mode 100644 index 0fa699b8344..00000000000 --- a/changelog.d/pr-9007 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Generate cabal-testsuite modules at configure time -packages: cabal-testsuite -prs: #9007 - -description: { - -Generate modules required by cabal-testsuite at configure time rather than build time. -This allows to run `cabal repl cabal-testsuite` out of the box. -In addition, enables HLS support for `cabal-testsuite`. - -} diff --git a/changelog.d/pr-9018 b/changelog.d/pr-9018 deleted file mode 100644 index b823fc4c33a..00000000000 --- a/changelog.d/pr-9018 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Structured Errors and Error Codes for Cabal -packages: cabal -prs: #9018 -issues: #8618 #8543 - - -description: { - -This will replace the `die'` function with `dieWithException` function which will throw structured errors rather than mere strings and also assign codes to corresponding errors that can be added to the error index. - -} diff --git a/changelog.d/pr-9019 b/changelog.d/pr-9019 deleted file mode 100644 index 22dc3723671..00000000000 --- a/changelog.d/pr-9019 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Installation of .hie files -packages: Cabal -prs: #9019 -issues: #8685 -description: { - -- Hie files generated by GHC are now stored in the `extra-compilation-artifacts` directory which gets installed with the package. - -} diff --git a/changelog.d/pr-9034 b/changelog.d/pr-9034 deleted file mode 100644 index 1aae63bb2ab..00000000000 --- a/changelog.d/pr-9034 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add `mkVersionIntervals` for creating a `VersionIntervals` from a list -packages: Cabal-syntax -prs: #9034 - -description: { - -If external tools want to change the version intervals of dependencies, they -need to be able to create a `VersionRange` from a `[VersionInterval]` list. Adding -the function `mkVersionIntervals` makes this possible again. - -} diff --git a/changelog.d/pr-9062 b/changelog.d/pr-9062 deleted file mode 100644 index 1cd4ad3e6e4..00000000000 --- a/changelog.d/pr-9062 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Add support for the 64-bit RISC-V architecture -prs: #9062 -packages: Cabal Cabal-syntax diff --git a/changelog.d/pr-9123 b/changelog.d/pr-9123 deleted file mode 100644 index 17b3b2031c6..00000000000 --- a/changelog.d/pr-9123 +++ /dev/null @@ -1,8 +0,0 @@ -synopsis: Remove --cabal-file flags from v2 commands -packages: cabal-install -prs: #9123 -issues: #8395 #7225 #6880 -description: { - The --cabal-file flag was never meant for public use but only for testing. To - avoid confusing the users any further we removed the flag from v2 commands. -} diff --git a/changelog.d/pr-9155 b/changelog.d/pr-9155 deleted file mode 100644 index db9557feca8..00000000000 --- a/changelog.d/pr-9155 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Do not ask overwrite permissions on blank project -packages: cabal-install -prs: #9155 -issues: #9150 diff --git a/changelog.d/pr-9215 b/changelog.d/pr-9215 deleted file mode 100644 index 3e8b1159f25..00000000000 --- a/changelog.d/pr-9215 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Add support for 64-bit LoongArch architecture -prs: #9215 -packages: Cabal Cabal-syntax diff --git a/changelog.d/pr-9326 b/changelog.d/pr-9326 deleted file mode 100644 index 33350cd86f0..00000000000 --- a/changelog.d/pr-9326 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Include the GHC "Project Unit Id" in the cabal store path -packages: Cabal cabal-install -prs: #9326 -issues: #8114 -description: { -- This allows the use of several **API incompatible builds of the same version - of GHC** without corrupting the cabal store. -- This relies on the "Project Unit Id" which is available since GHC 9.8.1, - older versions of GHC do not benefit from this change. -} diff --git a/changelog.d/pr-9332 b/changelog.d/pr-9332 deleted file mode 100644 index c2851a647d4..00000000000 --- a/changelog.d/pr-9332 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Don't report `index.html` file as created, if not created by Haddock -packages: Cabal cabal-install -prs: #9332 -issues: #5120 diff --git a/changelog.d/pr-9346 b/changelog.d/pr-9346 deleted file mode 100644 index 3f31da43837..00000000000 --- a/changelog.d/pr-9346 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: remove -packages: cabal-install -prs: #9346 -issues: #9151 -significance: significant - -description: { - -- Remove "Log" as a log level in favour of "Info". -- Remove "Show" in Severity and replace by "displaySeverity" function - -} diff --git a/changelog.d/pr-9376 b/changelog.d/pr-9376 deleted file mode 100644 index d85dc9bf49a..00000000000 --- a/changelog.d/pr-9376 +++ /dev/null @@ -1,6 +0,0 @@ -synopsis: Avoid a double space in "Executing install plan ..." -description: - The "Executing·install·plan··serially" and other similar "Executing install - plan··..." outputs no longer contain double spaces. -packages: cabal-install -prs: #9376 \ No newline at end of file diff --git a/changelog.d/pr-9434 b/changelog.d/pr-9434 deleted file mode 100644 index a7872ea3fb3..00000000000 --- a/changelog.d/pr-9434 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Fix the platform string for GNU/Hurd -packages: Cabal -prs: #9434 - -description: { - -Depending who you ask, GNU/Hurd will be labelled "gnu" or "hurd". The autotools -use "gnu", so ghc follows this for installed files, even if the ghc source code -uses OSHurd. We thus need to add the translation between the two. - -} diff --git a/changelog.d/pr-9441 b/changelog.d/pr-9441 deleted file mode 100644 index c47ea10da13..00000000000 --- a/changelog.d/pr-9441 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Enable using $ORIGIN in RPATH on GNU/Hurd -packages: Cabal -prs: #9441 diff --git a/changelog.d/pr-9443 b/changelog.d/pr-9443 deleted file mode 100644 index 353f1fb8cbd..00000000000 --- a/changelog.d/pr-9443 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Use linker capability detection to improve linker use -packages: Cabal -prs: #9443 - -description: { - -- Previously the GHC version number and platform were used as a proxy for whether - the linker can generate relocatable objects. -- Now, the ability of the linker to create relocatable objects is detected. - -} diff --git a/changelog.d/pr-9445 b/changelog.d/pr-9445 deleted file mode 100644 index 37f024ea060..00000000000 --- a/changelog.d/pr-9445 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Add support for 64-bit SPARC as a separate architecture -prs: #9445 -packages: Cabal Cabal-syntax diff --git a/changelog.d/pr-9464 b/changelog.d/pr-9464 deleted file mode 100644 index f1fe8b186f8..00000000000 --- a/changelog.d/pr-9464 +++ /dev/null @@ -1,22 +0,0 @@ -synopsis: Support per-component builds when coverage is enabled -packages: Cabal cabal-install -prs: #9464 -issues: #4798 #5213 #6440 #6397 -significance: significant - -description: { - -Cabal now supports per-component builds when coverage is enabled. This enables -coverage for packages with internal libraries (#6440), and enables coverage for -packages that use backpack (#6397), even though we do not get coverage for -instantiations of an indefinite module (it is not clear what it means for HPC -to support backpack, regardless of Cabal). - -To achieve this, hpc information (`.mix` files) from a library is now written -into the package database of a library under `extraCompilationArtifacts`. - -Cabal configure (via the Setup interface) now accepts --coverage-for=, -a flag which specifies which libraries should be included in the coverage -report for some testsuite. - -} diff --git a/changelog.d/pr-9481 b/changelog.d/pr-9481 deleted file mode 100644 index 5572ad56eab..00000000000 --- a/changelog.d/pr-9481 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Guard PackageInfo_* modules behind `cabal-version` ≥ 3.12 -packages: Cabal cabal-install -prs: #9481 -issues: #9331 - -description: { - -`cabal check` now warns whenever PackageInfo_* autogen modules are -used with `cabal-version` ≥ 3.12. -Additionally, `cabal configure` will fail if you try to use PackageInfo_* -with `cabal-version` < 3.12. - -} diff --git a/changelog.d/pr-9502 b/changelog.d/pr-9502 deleted file mode 100644 index 12e5cc0e47d..00000000000 --- a/changelog.d/pr-9502 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add language extension `TypeAbstractions` -packages: Cabal-syntax -prs: #9502 -issues: #9496 - -description: { - -- Adds support for the TypeAbstractions language extension. - -} - diff --git a/changelog.d/pr-9560 b/changelog.d/pr-9560 deleted file mode 100644 index 9f6ce9a4133..00000000000 --- a/changelog.d/pr-9560 +++ /dev/null @@ -1,22 +0,0 @@ -synopsis: Shorten solver rejection messages by removing repetition -packages: cabal-install-solver -prs: #9560 -issues: #9559 #4251 - -description: { - -As before, we show a single rejection as hyphenated package-version. - -For multiple rejections, we show a list of versions preceded by package -semicolon, a much shorter rendering of the same information. - -```diff -- [__0] rejecting: pandoc-3.1.8, pandoc-3.1.7, pandoc-3.1.6.2, pandoc-3.1.6.1, -- pandoc-3.1.6, pandoc-3.1.5, pandoc-3.1.4, pandoc-3.1.3, pandoc-3.1.2, -- pandoc-3.1.1, pandoc-3.1, pandoc-3.0.1, pandoc-3.0, pandoc-2.19.2, -- pandoc-2.19.1, pandoc-2.19, pandoc-2.18, pandoc-2.17.1.1, pandoc-2.17.1, -+ [__0] rejecting: pandoc; 3.1.8, 3.1.7, 3.1.6.2, 3.1.6.1, 3.1.6, 3.1.5, 3.1.4, -+ 3.1.3, 3.1.2, 3.1.1, 3.1, 3.0.1, 3.0, 2.19.2, 2.19.1, 2.19, 2.18, 2.17.1.1, -``` - -} \ No newline at end of file diff --git a/changelog.d/pr-9583 b/changelog.d/pr-9583 deleted file mode 100644 index 1b9f1caaf33..00000000000 --- a/changelog.d/pr-9583 +++ /dev/null @@ -1,28 +0,0 @@ -synopsis: Redesign 'cabal path' command to account for projects -packages: cabal-install -prs: #9673 - -description: { - -Previously, `cabal path` was only able to query from the global configuration file, e.g., `~/.cabal/config` or the XDG equivalent. -We take the foundations and enhance `cabal path` to take project configuration, such as `cabal.project`, into account. - -Additionally, we add support for multiple output formats, such as key-value pairs and json. - -The key-value pair output prints a line for each queried key and its respective value: - - key1: value2 - key2: value2 - -If only a single key is queried, we print only the value, for example: - - value1 - -The json output format is versioned by the cabal-install version, which is part of the json object. -Thus, all result objects contain at least the key "cabal-install-version". - -We expand the `cabal path` to also produce information of the compiler that is going to be used in a `cabal build` or `cabal repl` invocation. -To do that, we re-configure the compiler program, and outputs the location, version and compiler flavour. -This is helpful for downstream tools, such as HLS, to figure out the GHC version required to compile a project with, without dependency solving. - -} diff --git a/changelog.d/pr-9673 b/changelog.d/pr-9673 deleted file mode 100644 index c14776b0db9..00000000000 --- a/changelog.d/pr-9673 +++ /dev/null @@ -1,19 +0,0 @@ -synopsis: Merge globbing implementations -packages: Cabal cabal-install -prs: #9673 -issues: #5349 - -description: { - -The common aspects of the globbing functionality between `Cabal` and -`cabal-install` have been factored out. The only change in the user-facing API -is that we now record when a glob does not match exactly, but matches a -directory with that same name, with the new constructor `GlobMatchesDirectory` -of `GlobResult`. - -To illustrate, this change means that when `foo/dir` is a directory, the glob -`*/dir/` matches exactly `foo/dir` (as before), but now -`*/dir` produces `GlobMatchesDirectory` instead of failing. -This allows callers to decide whether to allow or discard such inexact matches. - -} diff --git a/changelog.d/pr-9813 b/changelog.d/pr-9813 deleted file mode 100644 index fc6195ac6e5..00000000000 --- a/changelog.d/pr-9813 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Adjust BSD-2-Clause and BSD-3-Clause licence text -packages: cabal-install -prs: #9813 -issues: #9812 - -description: { - -This change matters to BSD-2-Clause and BSD-3-Clause licences. For these two -licences, `cabal init` created a licence file that slightly differed from -wording published at SPDX. This has been rectified. - -} diff --git a/changelog.d/pr-check-ignore b/changelog.d/pr-check-ignore deleted file mode 100644 index 240a03f989b..00000000000 --- a/changelog.d/pr-check-ignore +++ /dev/null @@ -1,18 +0,0 @@ -synopsis: Add `--ignore` to `cabal check` -packages: Cabal cabal-check -prs: #9442 -issues: #8587 - -description: { - -- `cabal check` now ignores specific warnings with `--ignore`. E.g. - `--ignore=missing-upper-bounds` will not display “Missing upper - bounds” warnings. -- `cabal check` output now prints the warning identifier too - (like `[no-category]`). -- `Distribution.PackageDescription.Check.Warning` now exports - `filterPackageChecksById`, this can be used by third-party - tools to filter warnings. - -} - diff --git a/changelog.d/pr-spdx b/changelog.d/pr-spdx deleted file mode 100644 index e2cbdef9373..00000000000 --- a/changelog.d/pr-spdx +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Update SPDX License List to version `3.23 2024-02-08` -packages: Cabal-syntax -prs: #9818 - -description: { - -- LicenseId and LicenseExceptionId now conform to SPDX License List - version 3.23 2024-02-08. - -} diff --git a/release-notes/Cabal-3.12.0.0.md b/release-notes/Cabal-3.12.0.0.md new file mode 100644 index 00000000000..407f88e5aef --- /dev/null +++ b/release-notes/Cabal-3.12.0.0.md @@ -0,0 +1,255 @@ +Cabal and Cabal-syntax 3.12.0.0 changelog and release notes +--- + + +### Significant changes + +- Add support for asm, cmm, and js sources in executable components [#8639](https://github.com/haskell/cabal/issues/8639) [#9061](https://github.com/haskell/cabal/pull/9061) + + Executable components now support the inclusion of asm, cmm, and js source + files in a cabal file using the same syntax as is used for these sources + in library components, similar to how c and c++ sources are supported in + both types of components. This syntax was already parsed in cabal files, + but was silently ignored in the build step, so no changes to syntax are + made. + +- Add `--haddock-output-dir` flag to `cabal haddock`. [#8720](https://github.com/haskell/cabal/issues/8720) [#8788](https://github.com/haskell/cabal/pull/8788) + + This flag gives the user full control over the directory where the documentation is placed. It allows both relative and absolute paths. + +- Add `--semaphore` option to `./Setup build` interface [#8557](https://github.com/haskell/cabal/pull/8557) + + When `./Setup build --semaphore ` is called, `ghc` will be called + with the `-jsem` option. It is the responsibility of the caller of + `./Setup build` to manage the semaphore according to the GHC Jobserver + Protocol. + + This low level interface is intended to be called by a high-level tool + such as `cabal-install` which can create and manage the semaphore + appropriately. + + The protocol is specified by [GHC Proposal #540](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0540-jsem.rst). + +- Add `--promised-dependency` flag to `./Setup configure` interface [#8726](https://github.com/haskell/cabal/pull/8726) + + There is a new flag `--promised-dependency`to allow users to configure a + package *without* having previously built the dependency. Instead, we + promise to the configure phase that we will have built it by the time we + build the package. This allows us to configure all the packages we intend + to load into the repl without building any dependenices which we will load + in the same session, because the promise is satisifed due to loading the + package and its dependency into one multi-session which ensures the + dependency is built before it is needed. + + A user of ./Setup configure specifies a promised dependency by using the + "--promised-dependency" flag with a normal dependency specification. For + example: + + ``` + '--promised-dependency=cabal-install-solver=cabal-install-solver-3.9.0.0-inplace' + ``` + +- Add `--ignore` to `cabal check` [#8587](https://github.com/haskell/cabal/issues/8587) [#9442](https://github.com/haskell/cabal/pull/9442) + + - `Distribution.PackageDescription.Check.Warning` now exports + `filterPackageChecksById`, this can be used by third-party + tools to filter warnings. + +- Add support for `GHC2024` [#9736](https://github.com/haskell/cabal/issues/9736) + + Support for the `GHC2024` language edition, introduced by GHC 9.10, has been + added. It can now be used in the `default-language` and `other-languages` + fields, and will be offered as an option by `cabal init`. + +### Other changes + +- `cabal init` should not suggest Cabal < 2.0 [#8680](https://github.com/haskell/cabal/issues/8680) + + 'cabal init' no longer suggests users to set cabal-version to less than + 2.0. + +- Remove Distribution.Utils.TempTestDir module from Cabal library [#9453](https://github.com/haskell/cabal/issues/9453) [#9454](https://github.com/haskell/cabal/pull/9454) + + This library was only used by internal tests, and now lives in the + `Cabal-tests` library which is shared across test components. + +- PkgConfig individual calls [#9134](https://github.com/haskell/cabal/pull/9134) + + `cabal` invokes `pkg-config` individually for each lib if querying for all + doesn't return the expected result. + +- Split up `Distribution.Simple.Setup` [#8130](https://github.com/haskell/cabal/pull/8130) + + The external interface of 'Distribution.Simple.Setup' has been kept the + same, but internally it has been broken up into smaller modules. This + improves build times in two ways: + + 1. GHC is superlinear in the size of files, meaning that splitting up a + large file can reduce overall compile times. + 2. Breaking up the module allows dependent modules to refine their imports + to just the parts they require, allowing them to start buildling quicker + when GHC is run in parrallel make mode ('--ghc-options -j'). + +- Reimplementing `cabal check` [#7423](https://github.com/haskell/cabal/issues/7423) [#8427](https://github.com/haskell/cabal/pull/8427) + + - `checkPackage` signature has been simplified, + you do not need to pass a specific configuration of the package, since + we do not flatten GenericPackageDescription any more. + - `checkPackageFileNames` has been removed, + use `checkPackageFiles` instead. + - `checkPackageFilesGPD` has been introduced, + a function similar to `checkPackageFiles` that works on + `GenericPackageDescription`. You do not need to use + `flattenPackageDescription` anymore. + +- Installation of extra-compilation-artifacts directory [#8662](https://github.com/haskell/cabal/pull/8662) + + GHC plugins now can store custom data in the 'extra-compilation-artifacts' directory which gets installed with the package. + +- Add option to ./Setup repl to write repl arguments to file [#8726](https://github.com/haskell/cabal/pull/8726) + + The `./Setup repl` command is modified to allow a user to defer starting + the repl and instead instruct the command to write the necessary build + flags to a directiory. The option is called `--repl-multi-file `. + + This is useful when starting multi-component sessions, as we want to query + Setup.hs for the arguments which are needed to build each component but + not for ./Setup to start the repl itself. + +- Add Haiku as a known platform [#9006](https://github.com/haskell/cabal/pull/9006) + + Cabal: Distribution now recognises Haiku as a valid platform, and also + implements Haiku's unique directory layout. + +- Installation of .hie files [#8685](https://github.com/haskell/cabal/issues/8685) [#9019](https://github.com/haskell/cabal/pull/9019) + + Hie files generated by GHC are now stored in the + `extra-compilation-artifacts` directory which gets installed with the + package. + +- Include the GHC "Project Unit Id" in the cabal store path [#8114](https://github.com/haskell/cabal/issues/8114) [#9326](https://github.com/haskell/cabal/pull/9326) + + This allows the use of several **API incompatible builds of the same + version of GHC** without corrupting the cabal store. + + This relies on the "Project Unit Id" which is available since GHC 9.8.1, + older versions of GHC do not benefit from this change. + +- Fix the platform string for GNU/Hurd [#9434](https://github.com/haskell/cabal/pull/9434) + + Depending whom you ask, GNU/Hurd will be labelled "gnu" or "hurd". The + autotools use "gnu", so ghc follows this for installed files, even if the + ghc source code uses OSHurd. We thus need to add the translation between + the two. + +- Use linker capability detection to improve linker use [#9443](https://github.com/haskell/cabal/pull/9443) + + Previously the GHC version number and platform were used as a proxy for + whether the linker can generate relocatable objects. + + Now, the ability of the linker to create relocatable objects is detected. + +- Merge globbing implementations [#5349](https://github.com/haskell/cabal/issues/5349) [#9673](https://github.com/haskell/cabal/pull/9673) + + The common aspects of the globbing functionality between `Cabal` and + `cabal-install` have been factored out. The only change in the user-facing + API is that we now record when a glob does not match exactly, but matches + a directory with that same name, with the new constructor + `GlobMatchesDirectory` of `GlobResult`. + + To illustrate, this change means that when `foo/dir` is a directory, the + glob `*/dir/` matches exactly `foo/dir` (as before), but now `*/dir` + produces `GlobMatchesDirectory` instead of failing. This allows callers + to decide whether to allow or discard such inexact matches. + +- Document `remote-repo-cache` as implemented. [#8737](https://github.com/haskell/cabal/issues/8737) [#8738](https://github.com/haskell/cabal/pull/8738) + +- Deduplicate LD_LIBRARY_PATH when running tests [#8728](https://github.com/haskell/cabal/pull/8728) + +- Add support for a number of architectures: + + - RISC-V [#9062](https://github.com/haskell/cabal/pull/9062) + - 64-bit LoongArch [#9215](https://github.com/haskell/cabal/pull/9215) + - 64-bit SPARC as a separate architecture [#9445](https://github.com/haskell/cabal/pull/9445) + +- Don't report `index.html` file as created, if not created by Haddock [#5120](https://github.com/haskell/cabal/issues/5120) [#9332](https://github.com/haskell/cabal/pull/9332) + +- Enable using $ORIGIN in RPATH on GNU/Hurd [#9441](https://github.com/haskell/cabal/pull/9441) + + +- Make check comply with Hackage requirements [#8897](https://github.com/haskell/cabal/pull/8897) + + - `cabal check` will only return exitcode 1 when the package is not fit + for Hackage. E.g. it will not error anymore when your `synopsis:` is + larger than `description:`, just emit a warning. + - Cabal: Distribution.Client.Check now exports `isHackageDistError`, for + third-party tools to know if a specific error will preclude a package + from being uploaded to Hacakge. + +- Add language extension `ExtendedLiterals` [#8992](https://github.com/haskell/cabal/pull/8992) + + Adds support for the `ExtendedLiterals` language extension (GHC proposal #451) + +- Warn about inconsistent indentation [#8975](https://github.com/haskell/cabal/pull/8975) + + - Make Cabal warn about inconsistent indentation in .cabal files. For + example warn about somewhat common decreasing indentation like in + + ```cabal + library + default-language: Haskell2010 + build-depends: base + ghc-options: -Wall + ``` + + The change is `readFields` function. + + This is an effect of using `indentOfAtLeast` method/approach: any + indentation greater than current offset is accepted. + + That behavior is desirable to parsing multiline field contents, but it is + a bit surprising for fields in sections, which we expect to be aligned. + + Such insonsistency seems to be always a mistake, and it's easy to fix once + a machine points it out. + +- Add `LexBraces` lexer warning [#8577](https://github.com/haskell/cabal/issues/8577) + + `LexBraces` warning is issued when brace delimiting syntax is used. This + way, using `readFields'`, a low-lever consumer may decide whether braces + were used. + + Looking for a brace character in the input is imprecise, as braces can + occur inside field content. + + This warning is not propagated to parser warnings, so e.g. + `readGenericPackageDescription` doesn't warn about it. This is because all + parser warnings prevent uploads to Hackage, and using braces (or not) is + a matter of opinion. + +- Distinguish `powerpc64le`, by adding `PPC64LE` constructor to type `Arch` [#9534](https://github.com/haskell/cabal/issues/9534) [#9535](https://github.com/haskell/cabal/pull/9535) + + Adds constructor `PPC64LE` to type `Arch` to distinguish architecture + powerpc64le from powerpc64. Existing constructor `PPC64` now exclusively + represents powerpc64. + +- PkgConfig individual calls [#9134](https://github.com/haskell/cabal/pull/9134) + + `cabal` invokes `pkg-config` individually for each lib if querying for all doesn't return the expected result + +- Add language extension `ListTuplePuns` [#8854](https://github.com/haskell/cabal/pull/8854) + + Adds support for the `ListTuplePuns` language extension (GHC proposal #475) + +- Add `mkVersionIntervals` for creating a `VersionIntervals` from a list [#9034](https://github.com/haskell/cabal/pull/9034) + + If external tools want to change the version intervals of dependencies, they + need to be able to create a `VersionRange` from a `[VersionInterval]` list. Adding + the function `mkVersionIntervals` makes this possible again. + +- Add language extension `TypeAbstractions` [#9496](https://github.com/haskell/cabal/issues/9496) [#9502](https://github.com/haskell/cabal/pull/9502) + +- Update SPDX License List to version `3.23 2024-02-08` [#9818](https://github.com/haskell/cabal/pull/9818) + + - LicenseId and LicenseExceptionId now conform to SPDX License List + version 3.23 2024-02-08. diff --git a/release-notes/WIP-cabal-install-3.12.x.0.md b/release-notes/WIP-cabal-install-3.12.x.0.md new file mode 100644 index 00000000000..67a04a9203b --- /dev/null +++ b/release-notes/WIP-cabal-install-3.12.x.0.md @@ -0,0 +1,289 @@ +☞ N.B.: this is a WIP release-note file for 3.12.x.0 cabal-install. + +cabal-install and cabal-install-solver 3.12.1.0 changelog and release notes +--- + +- Add `--project-dir` flag [#7695](https://github.com/haskell/cabal/issues/7695) [#7940](https://github.com/haskell/cabal/issues/7940) [#8454](https://github.com/haskell/cabal/pull/8454) + + - Added `--project-dir` flag for specifying the project's root directory + - Deprecated using `--project-file` with an absolute filepath without also using `--project-dir`. + +- Remove useles "Log" log level [#9151](https://github.com/haskell/cabal/issues/9151) [#9346](https://github.com/haskell/cabal/pull/9346) + + - Remove "Log" as a log level in favour of "Info". + - Remove "Show" in Severity and replace by "displaySeverity" function + +- Add `--haddock-output-dir` flag to `cabal haddock`. [#8720](https://github.com/haskell/cabal/issues/8720) [#8788](https://github.com/haskell/cabal/pull/8788) + + This flag gives the user full control over the directory where the documentation is placed. It allows both relative and absolute paths. + +- Support per-component builds when coverage is enabled [#4798](https://github.com/haskell/cabal/issues/4798) [#5213](https://github.com/haskell/cabal/issues/5213) [#6397](https://github.com/haskell/cabal/issues/6397) [#6440](https://github.com/haskell/cabal/issues/6440) [#9464](https://github.com/haskell/cabal/pull/9464) + + Cabal now supports per-component builds when coverage is enabled.This enables + coverage for packages with internal libraries (#6440), and enables coverage for + packages that use backpack (#6397), even though we do not get coverage for + instantiations of an indefinite module (it is not clear what it means for HPC + to support backpack, regardless of Cabal). + + To achieve this, hpc information (`.mix` files) from a library is now written + into the package database of a library under `extraCompilationArtifacts`. + + Cabal configure (via the Setup interface) now accepts --coverage-for=, + a flag which specifies which libraries should be included in the coverage + report for some testsuite. + +- Redesign `cabal path` command to account for projects [#9673](https://github.com/haskell/cabal/pull/9673) + + Previously, `cabal path` was only able to query from the global configuration file, e.g., `~/.cabal/config` or the XDG equivalent. + We take the foundations and enhance `cabal path` to take project configuration, such as `cabal.project`, into account. + + Additionally, we add support for multiple output formats, such as key-value pairs and json. + + The key-value pair output prints a line for each queried key and its respective value: + + key1: value2 + key2: value2 + + If only a single key is queried, we print only the value, for example: + + value1 + + The json output format is versioned by the cabal-install version, which is part of the json object. + Thus, all result objects contain at least the key "cabal-install-version". + + We expand the `cabal path` to also produce information of the compiler that is going to be used in a `cabal build` or `cabal repl` invocation. + To do that, we re-configure the compiler program, and outputs the location, version and compiler flavour. + This is helpful for downstream tools, such as HLS, to figure out the GHC version required to compile a project with, without dependency solving. + +- Add support for authentication tokens for uploading to Hackage [#6738](https://github.com/haskell/cabal/issues/6738) [#9058](https://github.com/haskell/cabal/pull/9058) + + A new flag `--token` (`-t`) has been created. Token authentication takes + precedence over username and password meaning that, if a token is set, + the username and password flags are ignored. + +- Make --(test-)show-details=direct the default [#8942](https://github.com/haskell/cabal/pull/8942) + + This option leaves it up to the testing framework to decide what and how to print out, + potentially leading to a prettier output. For example, most of the testing frameworks + use colors, which wouldn't be seen with any other option. + + This comes with a tradeoff, though: Cabal will not create a log file with this option. + If you prefer a log file, consider setting `--test-show-details=streaming` (or something + else) manually. + +### Other changes + +- Script cache dir is the base16 hash of the canonical path of the script. [#9459](https://github.com/haskell/cabal/pull/9459) + + This fixes sporadic path failures on both Windows and Linux (e.g. [#9334](https://github.com/haskell/cabal/issues/9334)). + +- Die if package list is missing [#8944](https://github.com/haskell/cabal/pull/8944) + + If a package list is missing, `cabal` will now die and suggest the user to run + `cabal update` instead of continuing into not being able to find packages coming + from the remote package server. + +- Reject index-state younger than cached index file [#8944](https://github.com/haskell/cabal/pull/8944) + + Requesting to use an index-state younger than the cached version will now fail, + telling the user to use an index-state older or equal to the cached file, or to + run `cabal update`. + + The warning for a non-existing index-state has been also demoted to appear only + on verbose logging. + +- Warn early that overwrite policy is needed [#5993](https://github.com/haskell/cabal/issues/5993) [#9268](https://github.com/haskell/cabal/pull/9268) + + Waiting for a long build and then seeing the install fail because a flag was + missing is frustrating.With this change we skip the wait and warn early, + before the build, that an overwrite policy flag would be needed for the + install to succeed. + +- Make sure Haskell files in explicit source directories take precedence over autogenerated Haskell files [#8689](https://github.com/haskell/cabal/issues/8689) [#8690](https://github.com/haskell/cabal/pull/8690) + + - Changed order or directories in GHC invocation so that source + directories explicitly specified in cabal file will be considered + before Cabal’s internal build directory. + +- Also render short options with arguments [#8785](https://github.com/haskell/cabal/issues/8785) [#9043](https://github.com/haskell/cabal/pull/9043) + + Show how arguments are used with both short and long forms of options: + + ```diff + <-v, --verbose[=n]Control verbosity (n is 0--3, default + >-v[n], --verbose[=n] Control verbosity (n is 0--3, default + <-w, --with-compiler=PATH give the path to a particular compiler + >-w PATH or -wPATH, --with-compiler=PATH + ``` + +- config file: allow more flags in the init section [#8835](https://github.com/haskell/cabal/issues/8835) [#8839](https://github.com/haskell/cabal/pull/8839) + + The init section of config file now allows the following fields: + +- Fix handling of ETag header for remote packages [#9113](https://github.com/haskell/cabal/issues/9113) [#9116](https://github.com/haskell/cabal/pull/9116) + + Remote packages will now be cached regardless of the capitalization of the + "ETag" header. Previously remote packages would not be cached if the header + name did not match exactly. Now they will be cached even if the header's + capitalization is different. + +- Clarify the semantics of the `--package-db` flag [#9678](https://github.com/haskell/cabal/issues/9678) + + The `--package-db` flag now only applies to the default + immutable initial package stack rather than also applying to the store + package database. + + This fixes an assertion failure which was triggered when using `--package-db` and also + clarifies how it should interact with `--store-dir` and `--dist-dir` flags. + +- PkgConfig individual calls [#9134](https://github.com/haskell/cabal/pull/9134) + +- Add `--semaphore` flag to enable interaction with GHC Job Server protocol [#8557](https://github.com/haskell/cabal/pull/8557) + + When cabal-install is passed the `--semaphore` flag it will now act as a job server + according to the GHC Jobserver Protocol. + + In particular this means that cabal-install will create a semaphore which it then + passes to `./Setup build` (and hence `ghc`) which can be used by `ghc` in order to + control how much paralellism it uses, coordinating with other simultaneously running + processes. + + This feature requires ghc-9.8 in order to use, as this is the first version of GHC + which implements the protocol. + +- Reimplementing `cabal check` [#7423](https://github.com/haskell/cabal/issues/7423) [#8427](https://github.com/haskell/cabal/pull/8427) + + - For `cabal-install` users: `cabal check` do not warn on -O2 or similar + options if under an off-by-default cabal flag. + +- Add `--ignore` to `cabal check` [#8587](https://github.com/haskell/cabal/issues/8587) [#9442](https://github.com/haskell/cabal/pull/9442) + + - `cabal check` now ignores specific warnings with `--ignore`. E.g. + `--ignore=missing-upper-bounds` will not display “Missing upper + bounds” warnings. + - `cabal check` output now prints the warning identifier too + (like `[no-category]`). + +- Adds functionality for the --offline flag with the "build" command. [#8676](https://github.com/haskell/cabal/pull/8676) + + The --offline flag previously created in #2578 but was only implemented + for the install command even thought the flag didn't throw an error + whenever the build command was run. This PR adds functionality for the + --offline flag with the build command. Additionally there is a new + PackageTest for the flag using the build command. + +- Add warning for running cabal run, cabal test and cabal bench with +RTS flag [#8709](https://github.com/haskell/cabal/pull/8709) + + This adds a warning when RTS options are passed to cabal instead of the + binary for the commands 'run', 'bench' and 'test', as most users want to + pass these options to their binary. + +- Add support for loading multiple components into one repl session [#8238](https://github.com/haskell/cabal/pull/8238) [#8491](https://github.com/haskell/cabal/pull/8491) [#8726](https://github.com/haskell/cabal/pull/8726) + + The `repl` command is extended in order to allow starting a repl session + with multiple local components. When a user specifies a target to the + "repl" command which resolves to multiple local components then `cabal` + will start a repl session which loads them all into a single GHC session + if the multi-repl is enabled. + + The multi-repl can be enabled by passing `--enable-multi-repl`, or writing + `multi-repl: True` in your cabal.project file. + + The feature is fully explained in [this blog + post](https://well-typed.com/blog/2023/03/cabal-multi-unit/). + +- Add `cabal path` command [#8879](https://github.com/haskell/cabal/pull/8879) + + The `cabal path` command prints the file system paths used by Cabal. + It is intended for use by tooling that needs to read or modify Cabal + data, such that it does not need to replicate the complicated logic + for respecting `CABAL_DIR`, `CABAL_CONFIG`, etc. + +- `cabal check`: clearly mark Errors [#8908](https://github.com/haskell/cabal/pull/8908) + + `cabal check` will now mark errors (which make the program return 1 and + Hackage refuse the package) by prepending them with an "Error: " string in + the output. + +- Warn when project configuration options are going to be ignored. [#8949](https://github.com/haskell/cabal/pull/8949) + + Some project configuration options can only be specified from the command + line. If the user specified those options from a project file, + cabal-install would silently ignore them. Now cabal-install will emit a + warning. + +- Fix precedence for PATH for `build-tools-depends` [#8972](https://github.com/haskell/cabal/pull/8972) + + Fixes a bug introduced in #8506 that caused executables in the path to + take precedence over those specified in `build-tools-depends`. + +- Remove `--cabal-file` flags from v2 commands [#6880](https://github.com/haskell/cabal/issues/6880) [#7225](https://github.com/haskell/cabal/issues/7225) [#8395](https://github.com/haskell/cabal/issues/8395) [#9123](https://github.com/haskell/cabal/pull/9123) + + The `--cabal-file` flag was never meant for public use but only for testing. + To avoid confusing the users any further we removed the flag from v2 + commands. + +- Avoid a double space in "Executing install plan ..." [#9376](https://github.com/haskell/cabal/pull/9376) + + The "Executing·install·plan··serially" and other similar "Executing + install plan··..." outputs no longer contain double spaces. + +- Guard `PackageInfo_*` modules behind `cabal-version` ≥ 3.12 [#9331](https://github.com/haskell/cabal/issues/9331) [#9481](https://github.com/haskell/cabal/pull/9481) + + `cabal check` now warns whenever `PackageInfo_*` autogen modules are + used with `cabal-version` ≥ 3.12. + Additionally, `cabal configure` will fail if you try to use `PackageInfo_*` + with `cabal-version` < 3.12. + +- cabal init now generates cabal versions older than 1.12 with the correct >= syntax [#8206](https://github.com/haskell/cabal/issues/8206) [#8860](https://github.com/haskell/cabal/pull/8860) + +- `cabal init`: suggest BSD-3 as default license [#8757](https://github.com/haskell/cabal/issues/8757) [#8764](https://github.com/haskell/cabal/pull/8764) + +- Do not ask overwrite permissions on blank project [#9150](https://github.com/haskell/cabal/issues/9150) [#9155](https://github.com/haskell/cabal/pull/9155) + +- Don't report `index.html` file as created, if not created by Haddock [#5120](https://github.com/haskell/cabal/issues/5120) [#9332](https://github.com/haskell/cabal/pull/9332) + +- Shorten solver rejection messages by removing repetition [#4251](https://github.com/haskell/cabal/issues/4251) [#9559](https://github.com/haskell/cabal/issues/9559) [#9560](https://github.com/haskell/cabal/pull/9560) + + As before, we show a single rejection as hyphenated package-version. + + For multiple rejections, we show a list of versions preceded by package + semicolon, a much shorter rendering of the same information. + + ```diff + - [__0] rejecting: pandoc-3.1.8, pandoc-3.1.7, pandoc-3.1.6.2, pandoc-3.1.6.1, + - pandoc-3.1.6, pandoc-3.1.5, pandoc-3.1.4, pandoc-3.1.3, pandoc-3.1.2, + - pandoc-3.1.1, pandoc-3.1, pandoc-3.0.1, pandoc-3.0, pandoc-2.19.2, + - pandoc-2.19.1, pandoc-2.19, pandoc-2.18, pandoc-2.17.1.1, pandoc-2.17.1, + + [__0] rejecting: pandoc; 3.1.8, 3.1.7, 3.1.6.2, 3.1.6.1, 3.1.6, 3.1.5, 3.1.4, + + 3.1.3, 3.1.2, 3.1.1, 3.1, 3.0.1, 3.0, 2.19.2, 2.19.1, 2.19, 2.18, 2.17.1.1, + ``` + +- Show provenance of project constraints [#9562](https://github.com/haskell/cabal/issues/9562) [#9578](https://github.com/haskell/cabal/pull/9578) + + Show imports when the solver rejects a package version due to a project + constraint. Even though imports are relative to their parent when imported, + their paths are shown relative to the directory of the project in the solver + output. + + ``` + $ cabal build all --dry-run + ... + [__1] next goal: hashable + [__1] rejecting: hashable-1.4.3.0 + (constraint from cabal.project requires ==1.4.2.0) + [__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: cabal.project + ``` + + Fixes some test failures detecting cycles in imports, when; + + - the wrong import was reported as starting the cycle + - a cycle was reported that wasn't actually a cycle + +- Adjust BSD-2-Clause and BSD-3-Clause licence text [#9812](https://github.com/haskell/cabal/issues/9812) [#9813](https://github.com/haskell/cabal/pull/9813) + + This change matters to BSD-2-Clause and BSD-3-Clause licences. For these two + licences, `cabal init` created a licence file that slightly differed from + wording published at SPDX. This has been rectified.