Cabal-3.14.0.0
Cabal and Cabal-syntax 3.14.0.0 changelog and release notes
Significant changes
Neutral field to add files to sdist #8817 #10107
Adds the
extra-filesfield to the cabal file specification. This is like the otherextra-*fields in that it is copied with thesdistcommand, except there are no other semantics. Compare to:extra-source-files: Tracked bycabal build.extra-doc-files: Copied by Haddock to the html directory.
Other changes
Include package version when passing
--promised-dependencyflag #10166 #10248The
--promised-dependencyflag now expects an argument in the formatNAME-VER[:COMPONENT_NAME]=CIDrather than
NAME[:COMPONENT_NAME]=CIDAdd support for building profiled dynamic way #4816 #9900
Add support for profiled dynamic way
New options for
cabal.projectand./Setupinterface:profiling-shared: Enable building profiling dynamic way- Passing
--enable-profilingand--enable-executable-dynamicbuilds profiled dynamic executables.
Support for using
profiling-sharedis guarded behind a constraint which ensures you are usingCabal >= 3.13.In the cabal file:
ghc-prof-shared-options, for passing options when building in profiling dynamic way
Working directory support for
Cabal#9702 #9718The
Caballibrary is now able to handle a passed-in working directory, instead of always relying on the current working directory of the parent process.In order to achieve this, the
SymbolicPathabstraction was fleshed out, and all fields ofPackageDescriptionthat, if relative, should be interpreted with respect to e.g. the package root, useSymbolicPathinstead ofFilePath.This means that many library functions in
Cabaltake an extra argument of typeMaybe (SymbolicPath CWD (Dir "Package")), which is an optional (relative or absolute) path to the package root (if relative, relative to the current working directory). In addition, many functions that used to manipulateFilePaths now manipulateSymbolicPaths, require explicit conversion using e.g.getSymbolicPath.To illustrate with file searching, the
Caballibrary defines:findFileCwd :: forall dir1 dir2 file . Verbosity -> Maybe (SymbolicPath CWD (Dir dir1)) -> [SymbolicPath dir1 (Dir dir2)] -> RelativePath dir2 File -> IO (SymbolicPath dir1 File)See Note [Symbolic paths] in
Distribution.Utils.Pathfor further information on the design of this API.Add
MultilineStringsextension (GHC proposal #637) #10245Add
NamedDefaultsextension (GHC proposal #409) #9740Add
OrPatternsextension (GHC proposal #958) #10339
Other changes
Add flag
--ignore-build-tools#10128- Adds flag
--ignore-build-toolswhich allows a user to ignore the tool dependencies declared inbuild-tool-depends. For general use, this flag should never be needed, but it may be useful for packagers.
- Adds flag
Do not try to build dynamic executables on Windows #10217
- Cabal will now exit with a descriptive error message instead of attempting to build a dynamic executable on Windows.
Always pass
ghc-optionsto GHC #8717Previously, options set in the package field
ghc-optionswould not be passed to GHC during the link phase for shared objects (where multiple.oor.dyn_ofiles are merged into a single object file). This made it impossible to useghc-optionsto use a different linker by setting (for example)ghc-options: -optl-fuse-ld=mold -optlm-fuse-ld=mold; the options would be dropped in the link phase, falling back to the default linker.It was possible to work around this by duplicating the
ghc-optionstoghc-shared-options, which are passed in the shared link phase, but that had the undocumented and unfortunate side-effect of disabling the GHC-dynamic-tooflag, effectively doubling compilation times whenghc-shared-optionsare set.Now,
ghc-optionsare combined withghc-shared-options(to accurately reflect the documentation on this feature) and the fact thatghc-shared-optionsdisables-dynamic-toois documented.Introduce
SetupHooks#9551Introduction of a new build type:
Hooks. This build type, intended to eventually replace theCustombuild type, integrates better with the rest of the ecosystem (cabal-install, Haskell Language Server).The motivation and full design of this new build-type are specified in the Haskell Foundation Tech Proposal Replacing the Cabal Custom build-type.
Package authors willing to use this feature should declare
cabal-version: 3.14andbuild-type: Hooksin their.cabalfile, declare acustom-setupstanza with a dependency on theCabal-hookspackage, and define a moduleSetupHooksthat exports a valuesetupHooks :: SetupHooks, using the API exported byDistribution.Simple.SetupHooksfrom theCabal-hookspackage. Refer to the Haddock documentation ofDistribution.Simple.SetupHooksfor example usage.Redefine
build-type: Configurein terms ofHooks#9969The
build-type: Configureis now implemented in terms ofbuild-type: Hooksrather than in terms ofbuild-type: Custom. This moves theConfigurebuild-type away from theCustomissues. Eventually,build-type: Hookswill no longer imply packages are built in legacy-fallback mode. When that happens,Configurewill also stop implyinglegacy-fallback.The observable aspect of this change is
runConfigureScriptnow having a different type, andautoconfSetupHooksbeing exposed byDistribution.Simple. The former is motivated by internal implementation details, while the latter provides theSetupHooksvalue for theConfigurebuild type, which can be consumed by otherHooksclients (e.g. eventually HLS).Cabal can issue a number of error messages referencing "Setup configure", but it simply references "configure" which could mean any of three things (Setup configure, the package's "configure" script, or "cabal configure"). This has recently caught out even Cabal devs. Clarify these messages. #9476
Update the SPDX License List to version 3.25
The LicenseId and LicenseExceptionId types are updated to reflect the SPDX License List version 3.25 (2024-08-19).
