cabal-install-3.4.0.0
Significant changes
Add cabal-version: 3.4 !6663
See various changes in https://cabal.readthedocs.io/en/latest/file-format-changelog.html#cabal-version-3-4
Support GHC-8.12 #6903 #6904 #6905 !6545 !6552 !6553 !6563 !6735 !6844 !6848 !6865 !6908 !6947
- Support for
-this-package-key
deprecation - Use process
createPipe
- Add support for WINIO to Cabal
- Adopt to simplified subsumption changes
There are no magical
IO = WithCallStack Prelude.IO
alias in Cabal, as it is hard to get working with GHC-8.12's simplified subsumption.- Support for
Treat
pkg:sublib
dependency syntax as is incabal-version: 3.4
#6083 !6893 !6907In
cabal-version: 3.4
cabal files the dependency definitionbuild-depends: somesublib
is not using in-package sublibraries. You have to be explicit and write
build-depends: thispkg:somesublib
This fixes an issue, where it was impossible to refer to external library, if you had sublibrary of the same name.
Add active-repositories configuration #6819 !6724 !6868
New
active-repositories
cabal.project
fields allows specifying an order and ways various package repositories are combined.The active
active-repositories
is saved incabal.project.freeze
.Various
cabal init
improvements #6150 #6675 !6603 !6607 !6619 !6632 !6641 !6650 !6661 !6676 !6677 !6678 !6690 !6705 !6723- Default to
cabal-version: 2.4
cabal
doesn't force a default license choice anymore- Licenses are always asked using SPDX expression
- Fix an infinite loop when invalid license was passed on command line
Setup.hs
is not written anymore- Default to --source-dir=src and --application-dir=app
- Add
FileCreators.generateCabalFile
unit tests. - Default cabal init application-dir to
app
, and source-dir tosrc
. - Default to SPDX.NONE license in cabal init interactive mode.
- Default to
Rework
v2-sdist
command #2940 #5813 #6514 #6611 #6635 !6454 !6637 !6640 !6660 !6666 !6884 !6916v2-sdist
marks all files as readonly in resulting tarballs.The #2940 "cabal sdist should touch preprocessed .hs files" issue is fixed by virtue of not doing any preprocessing anymore. It's responsibility of packager.
The #6611 "v2-sdist includes a file twice in the tarball " issue is fixed as we don't consider only one file list, not two separate executable and ordinary file lists.
The #6514 "unpack doesn't preserve (executable) permissions" issue is partially resolved, as there shouldn't be executable permissions in the tar files.
The rationale for above simplification is simple. The only file Cabal machinery would run is
configure
script. These are run with explicitsh
program. For package internal scripts, maintainers should also use interpreters explicitly as well. Scripts with shebangs are not executable on Windows.The
v1-sdist
command is removed, as its functionality is completely superseded byv2-sdist
.source-repository-package
directories aren't local #5586 !6915 !6917Concretely these means that compiled
source-repository-package
entries used in different projects are stored in the global nix-style store.Add list-bin command #6807 !6931
cabal list-bin executable-component
tells the path to the build artifact.-
Sandbox functionality is remove in favour of now default nix-style builds.
cabal list
accepts regular expression #4267 #6683 !6618 !6806More rich
index-state
syntax.v2-freeze
savesindex-state
. #6728 !6581 !6591 !6596 !6597 !6682 !6733 ### Other changesTests additions #6409 !6753 !6759 !6802 !6842 !6872
- Add shrinker, so writing big non-generic product shrinkers is easier
- Add
hs-source-dirs: NL .
test-case - Add public multilib test(s)
Code organization !6599 !6642 !6734 !6745 !6746 !6817 !6818 !6821 !6867
- Split
Distribution.Client.Types
module - Move cabal-testsuite code into
src/
- Add
ProjectFlags
- Add
NixStyleOptions
- Internal refactorings to install command.
- Make own modules for
InstallMethod
andOverwritePolicy
- Make cabal-install compilable with
NoImplicitPrelude
- Refactor shared
TargetProblem
data types into their own module. - Template
cabal-install.cabal
using zinza
- Split
The grammar of most package description fields is formally documented !6591 !6593 !6704 !6766 !6778 !6780 !6781 !6791 !6800
See https://cabal.readthedocs.io/en/latest/buildinfo-fields-reference.html
Add -fexpose-all-unfoldings to parsec and Cabal in release project !6708
This makes parser faster with acceptable code-size increase.
Fix ghci being launched before other sources are built. !6923
Related to foreign calls to C-sources.
Use default install directory if not specified #5973 !6624
Cabal 3.0.0.0 added the --installdir option to specify the location that binaries should be installed in. Running a cabal user-config update would populate the config file with the default value, but the cabal install program would error if it wasn't set. This change uses the default value that would be written to the config if its unset, and outputs a warning.
Update GHC environment location #6565 !6822
cabal-install currently assumes that the GHC environment files are always located in
$HOME/.ghc/
. However, GHC itself doesn't query the home directory directly. Instead, it usesgetAppUserDataDirectory "ghc"
which happens to coincide with$HOME/.ghc
/ on UNIX systems. On Windows, however, GHC ends up looking in%APPDATA%/ghc/
.Remove
-any
and-none
syntax for version ranges in cabal-version: 3.4 #6589 !6786Use
>=0
(or empty in dependencies) and<0
respectively.Add pijul to known repository type #6610 !6684
Pijul is now explicitly recognized version control system. However
cabal-install
isn't yet able to use it insource-repository-package
.Remove upgrade, uninstall and win32selfupgrade commands #6691 !6707
This commands were not implemented or are special purpose. The removal of
win32selfupgrade
might break self upgrade on windows, whencabal-install
tries to rewrite the binary of itself. This shouldn't be a problem when symlinking is used.-
This functionality was mainly used by removed sandboxes.
file+noindex
repositories are better variant for local package repositories. Add support for multiple public libraries to the solver #6039 !6047 !6812 !6836
cabal-install can now take into account the presence and visibility of sublibraries when solving. This also means that, when using cabal-install, multiple public libraries support is extended to GHCs older than 8.8. The support is limited to source packages for now.
Remove text type-class !6764 !6777 !6784 !6785 !6793 !6794
Text
type-class was removed fromCabal
, but it still lived incabal-install
. Now it is finally removed.cabal-install
is still usingReadP
parsers for various things though.Windows install symlinks !5684 !6506 !6519
cabal-install
will try to infer whether symlinking is supported on Windows, and make symlinks ininstall
. Otherwise it will fallback to copying files. Either way can be forced with--install-method
.Use process jobs when spawning subprocesses !6529 !6536
Many toolchain tools written for POSIX systems rely on the exec system call. Unfortunately, it is not possible to implement exec in a POSIX-compliant manner on Windows. In particular, the semantics of the exec implementation provided by the widely-used msvcrt C runtime will cause process's waiting on the exec'ing process to incorrectly conclude that the process has successfully terminated when in fact it is still running in another process.
For this reason, the process library exposes the use_process_jobs flag to use a more strict (although still not POSIX-compliant) mechanism for tracking process completion. This is explained in the Process.hs comment
Unfortunately, job support in the process library is currently quite broken and was only recently fixed. Consequently, we only enable job object support for process releases >= 1.6.8.
Change
BuildReports
parse/pretty to use FieldGrammar framework !6783Tell users about
cabal.project.local~
incabal v2-configure
!6877Improvements to cabal-testsuite framework !6643
Refactor cabalInstallVersions, add make doctest-cli !6720
Update copyright years to 2020 !6644
Documentation updates and typo-fixes !6504 !6550 !6560 !6613 !6660 !6668 !6669 !6686 !6697 !6761 !6928 !6940 !6951 !6953 !6954
Remove new- command from
--help
output (there are v2-) !6930Installing (copy or symlink) executable message prints destination. !6582 !6590
Check sha256 if
#sha256=...
fragments are given to URIs !6576upload --help
now includespassword-command
as a config file option (#5224) #5224 !6313 !6609 !6680Use PrettyField to format cabal file in
cabal init
#5555 !6718Default to 'NoReports' for remote build reporting #6210 !6625
default-language field is optional in cabal-version: 3.4 #6288 !6924 !6926
cabal v2-install prints copy/symlink destination #6575 !6582 !6890
Prepend hs-source-dir to match-component, fixes
cabal repl file
#6622 !6623 !6826 !6875Change 'optional-packages' default to empty, when cabal.project is missing. #4797 #6739 !6740
Add
-z
/--ignore-project
flag tocabal v2-update
#6809 !6814Adjust message indicating
--lib
is likely desired #6856 !6857cxx-sources, asm-sources and cmm-sources are change-tracked #6869 !6870
Change manpage command to man !6548
Package description parser benchmark !6594
Add
+stderr
modifier toVerbosity
!6929Mark public-libs as experimental feature !6605
More checks in version range parser !6586
Require cabal-versions
>=1.25
to be exact !6654