|
| 1 | +Cabal and Cabal-syntax 3.16.0.0 changelog and release notes |
| 2 | +--- |
| 3 | + |
| 4 | +### Significant changes |
| 5 | + |
| 6 | +- Make `Flag a` a type synonym for `Last (Maybe a)` [#10948](https://github.com/haskell/cabal/pull/10948) |
| 7 | + |
| 8 | + Refer to the [Migration guide](#migration-guide) for an upgrade path. |
| 9 | + |
| 10 | +- Add support for Windows Aarch64 [#10705](https://github.com/haskell/cabal/pull/10705) |
| 11 | + |
| 12 | + Adds to preprocessor branches the option to support the `aarch64_HOST_ARCH` platform on the Windows Aarch64 target. |
| 13 | + The `ccall` convention is used on Aarch64, as with `x86_64_HOST_ARCH`. Introduce `zIsAarch64` to make paths generation support the Windows Aarch64 target. |
| 14 | + |
| 15 | +### Other changes |
| 16 | + |
| 17 | +- Add --with-repl flag to specify alternative REPL program [#9115](https://github.com/haskell/cabal/issues/9115) [#10996](https://github.com/haskell/cabal/pull/10996) |
| 18 | + |
| 19 | + Added a new `--with-repl` command-line option that allows specifying an alternative |
| 20 | + program to use when starting a REPL session, instead of the default GHC. |
| 21 | + |
| 22 | + This is particularly useful for tools like `doctest` and `hie-bios` that need to |
| 23 | + intercept the REPL session to perform their own operations. Previously, these tools |
| 24 | + had to use `--with-ghc` which required them to proxy all GHC invocations, including |
| 25 | + dependency compilation, making the implementation more complex. |
| 26 | + |
| 27 | + The `--with-repl` option only affects the final REPL invocation, simplifying the |
| 28 | + implementation of such wrapper tools. |
| 29 | + |
| 30 | + Example usage: |
| 31 | + ```bash |
| 32 | + cabal repl --with-repl=doctest |
| 33 | + cabal repl --with-repl=/path/to/custom/ghc |
| 34 | + ``` |
| 35 | + |
| 36 | + This change also removes the special handling for response files with `--interactive` |
| 37 | + mode, as tools are now expected to handle response files appropriately. |
| 38 | + |
| 39 | +- Don't imply that Haddock docs exist, when warning not installed [#9694](https://github.com/haskell/cabal/issues/9694) [#9695](https://github.com/haskell/cabal/pull/9695) |
| 40 | + |
| 41 | +- Show why `cabal act-as-setup configure` failed [#10273](https://github.com/haskell/cabal/pull/10273) |
| 42 | + |
| 43 | + When `cabal act-as-setup configure` fails, it prints a list of "missing or |
| 44 | + private dependencies". |
| 45 | + |
| 46 | + Now, it will show you if each failing dependency is missing, private, or an |
| 47 | + incompatible version: |
| 48 | + |
| 49 | + ``` |
| 50 | + Error: [Cabal-8010] |
| 51 | + Encountered missing or private dependencies: |
| 52 | + Lib:{bar-internal,foo-internal} (missing :bar-internal), |
| 53 | + base <=1.0 (installed: 4.18.2.1), |
| 54 | + package-that-does-not-exist (missing) |
| 55 | + ``` |
| 56 | + |
| 57 | +- Avoid partial `Data.List.last` in autogenerated `Paths_<pkg>.hs` [#10432](https://github.com/haskell/cabal/pull/10432) |
| 58 | + |
| 59 | + - Autogenerated `Paths_<pkg>.hs` now avoids use of the partial function `Data.List.last`. |
| 60 | + |
| 61 | +- Fix Haddock CSS handling in multi-package projects [#10636](https://github.com/haskell/cabal/issues/10636) [#10637](https://github.com/haskell/cabal/pull/10637) |
| 62 | + |
| 63 | + When the `--css=<css-file>` flag is provided to `cabal haddock-project`: |
| 64 | + |
| 65 | + - the Haddock index is now properly styled by the provided CSS file |
| 66 | + - each package in the project now has its docs properly styled by the provided CSS file |
| 67 | + |
| 68 | +- Add checks for Windows reserved filenames in module paths [#10295](https://github.com/haskell/cabal/issues/10295) [#10816](https://github.com/haskell/cabal/pull/10816) |
| 69 | + |
| 70 | + On Windows, certain filenames are reserved by the operating system such as |
| 71 | + "aux", "con", "prn", "nul", etc. When these names appear in module paths they |
| 72 | + can cause build failures on Windows systems. |
| 73 | + |
| 74 | + `cabal check` now properly warns about module paths that contain Windows reserved |
| 75 | + filenames, not just filepaths which contain these reserved tokens. These warnings |
| 76 | + are controlled by the existing `invalid-win-path` category. |
| 77 | + |
| 78 | + For example, module paths like: |
| 79 | + - `Exe.Aux.Test` |
| 80 | + - `Test.Aux.Module` |
| 81 | + - `Bench.Aux.Helpers` |
| 82 | + |
| 83 | + will now trigger appropriate warnings during `cabal check`. |
| 84 | + |
| 85 | +- Isolate Cabal from the GHC_ENVIRONMENT variable [#10759](https://github.com/haskell/cabal/issues/10759) [#10828](https://github.com/haskell/cabal/pull/10828) [#10990](https://github.com/haskell/cabal/pull/10990) |
| 86 | + |
| 87 | + For GHC 8.4.4 and later, Cabal now passes the `-package-env=-` flag to GHC. |
| 88 | + This prevents the `GHC_ENVIRONMENT` variable or any package environment files |
| 89 | + from affecting Cabal builds. |
| 90 | + |
| 91 | + This change eliminates unexpected build behavior that could occur when users |
| 92 | + had GHC environment files configured in their system that Cabal wasn't aware |
| 93 | + of. |
| 94 | + |
| 95 | +- Set `<pkgname>_datadir` to an absolute path when running tests [#10717](https://github.com/haskell/cabal/issues/10717) [#10830](https://github.com/haskell/cabal/pull/10830) |
| 96 | + |
| 97 | + Fix a regression where `<pkgname>_datadir` was set to a relative path. This |
| 98 | + caused issues when running testsuites which changed the working directory and |
| 99 | + accessed datafiles. |
| 100 | + |
| 101 | +- Pass `CXX` and `CXXFLAGS` to `./configure` scripts run by Configure build-type [#10797](https://github.com/haskell/cabal/issues/10797) [#10844](https://github.com/haskell/cabal/pull/10844) |
| 102 | + |
| 103 | + `./configure` scripts run by `build-type: Configure` will now be passed the CXX and |
| 104 | + `CXXFLAGS` variables. These reflect the path and flags for the C and C++ compilers respectively. |
| 105 | + |
| 106 | + If the compiler is not available, then the flags are not passed. For GHC versions `>= 9.4.*`, |
| 107 | + the `CXX` variable will always be set and available to be used. |
| 108 | + |
| 109 | + This can be useful for implementing something like `system-cxx-std-lib` in user-land. |
| 110 | + |
| 111 | +- Remove dead build-tool greencard [#10908](https://github.com/haskell/cabal/pull/10908) |
| 112 | + |
| 113 | + Remove knowledge of the build-tool `greencard` (non-existing since GHC 7.10) |
| 114 | + and the connect of the `.gc` extension to this build-tool. |
| 115 | + |
| 116 | +- Remove knowledge about hmake and haskell-suite [#10912](https://github.com/haskell/cabal/pull/10912) |
| 117 | + |
| 118 | + The `hmake` tool has long been abandoned, and the `haskell-suite` compiler did not emerge. |
| 119 | + Knowledge about these tools has been removed from `Cabal`. |
| 120 | + |
| 121 | +- Haddock documentation added to Paths_pkgname and PackageInfo_pkgname modules [#10941](https://github.com/haskell/cabal/pull/10941) |
| 122 | + |
| 123 | + The automatically-generated modules `Paths_pkgname` and `PackageInfo_pkgname` |
| 124 | + now include Haddock documentation. |
| 125 | + |
| 126 | +- ghc-options added to js, cmm and asm [#10949](https://github.com/haskell/cabal/pull/10949) |
| 127 | + |
| 128 | + Now we have the ability to pass `ghc-options` flags to all component. |
| 129 | + |
| 130 | + ``` |
| 131 | + js-sources: jsbits/lib.js |
| 132 | + ghc-options: -optJSP-your_flag |
| 133 | + ``` |
| 134 | + |
| 135 | +- Adding JavaScript Preprocessor Support [#10967](https://github.com/haskell/cabal/pull/10967) |
| 136 | + |
| 137 | + Adding new syntax `jspp-options` that would support the `-optJSP` preprocessor flag for js sources. |
| 138 | + |
| 139 | + ``` |
| 140 | + js-sources: jsbits/lib.js |
| 141 | + jspp-options: -DYOUR_FLAG |
| 142 | + ``` |
| 143 | + |
| 144 | +- Fix parsing the AbiTag with development versions of GHC [#10170](https://github.com/haskell/cabal/issues/10170) [#10979](https://github.com/haskell/cabal/pull/10979) |
| 145 | + |
| 146 | + - Allow parsing the AbiTag for developmement versions of GHC. |
| 147 | + |
| 148 | +- Take `--working-dir` into account in runPreProcessorWithHsBootHack [#11000](https://github.com/haskell/cabal/issues/11000) [#10991](https://github.com/haskell/cabal/pull/10991) |
| 149 | + |
| 150 | + The preprocessor hs-boot hack handles the situation in which a file to be |
| 151 | + preprocessed is supplied alongside an hs-boot file, e.g. Foo.x and Foo.hs-boot |
| 152 | + are given together. |
| 153 | + |
| 154 | + This code now respects the `--working-dir` Cabal global argument. This fixes |
| 155 | + build failures of the form: |
| 156 | + |
| 157 | + ``attempting to use module `Foo' (Foo.hs-boot) which is not loaded`` |
| 158 | + |
| 159 | +- Haddock: don't try to copy build dir if it doesn't exist [#11001](https://github.com/haskell/cabal/issues/11001) [#10992](https://github.com/haskell/cabal/pull/10992) |
| 160 | + |
| 161 | + This small patch fixes a little oversight in 'reusingGHCCompilationArtifacts', |
| 162 | + which would unconditionally attempt to copy over the GHC build artifacts to be |
| 163 | + re-used by Haddock, even when those artifacts did not exist (which caused |
| 164 | + an error). |
| 165 | + |
| 166 | +- add SPDX license data version 3.26 [#11014](https://github.com/haskell/cabal/pull/11014) |
| 167 | + |
| 168 | + - Update SPDX license list to version 3.26.0 2024-12-30 |
| 169 | + |
| 170 | +- Use response files when calling `ghc` [#9367](https://github.com/haskell/cabal/pull/9367) |
| 171 | + |
| 172 | + Cabal now passes GHC arguments through a response file. This prevents an error |
| 173 | + where very large packages would fail to build due to the module names exceeding |
| 174 | + the `ARG_MAX` command-line length limit: |
| 175 | + |
| 176 | + ``` |
| 177 | + ghc: createProcess: posix_spawnp: resource exhausted (Argument list too long) |
| 178 | + ``` |
| 179 | + |
| 180 | + Notes: |
| 181 | + - RTS options (like `+RTS -H32m -S -RTS`) will not be included in response |
| 182 | + files. |
| 183 | + - For reproducing commands after Cabal exits, `--keep-temp-files` can be used |
| 184 | + to prevent the response files from being deleted. |
| 185 | + |
| 186 | +- New licence constructors for SPDX licences starting with a digit [#10356](https://github.com/haskell/cabal/pull/10356) |
| 187 | + |
| 188 | + - LicenseId constructor `NullBSD` is now `N_0BSD`. |
| 189 | + - LicenseId constructor `DS389_exception` is now and `N_389_exception`. |
| 190 | + - LicenseId constructor `X3D_Slicer_1_0` is now and `N_3D_Slicer_1_0`. |
| 191 | + |
| 192 | +### Migration guide |
| 193 | + |
| 194 | +- `data Flag a = Flag a | NoFlag` has been replaced with `type Flag = Data.Monoid.Last`, |
| 195 | + while `pattern Flag a = Last (Just a)` and `pattern NoFlag = Last Nothing` are provided |
| 196 | + for backward compatibility. |
| 197 | + Imports of form `import Distribution.Simple.Flag (Flag (..))` should be replaced |
| 198 | + with `import Distribution.Simple.Flag (Flag, pattern Flag, pattern NoFlag)` |
| 199 | + (the latter form is backwards compatible with older versions of Cabal). |
| 200 | + Enable `{-# LANGUAGE PatternSynonyms #-}` if required. In the unlikely case |
| 201 | + of defining instances for `Flag`, `{-# LANGUAGE TypeSynonymInstances #-}` |
| 202 | + is needed. |
0 commit comments