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-keydeprecation - Use process
createPipe - Add support for WINIO to Cabal
- Adopt to simplified subsumption changes
There are no magical
IO = WithCallStack Prelude.IOalias in Cabal, as it is hard to get working with GHC-8.12's simplified subsumption.- Support for
Treat
pkg:sublibdependency syntax as is incabal-version: 3.4#6083 !6893 !6907In
cabal-version: 3.4cabal files the dependency definitionbuild-depends: somesublibis not using in-package sublibraries. You have to be explicit and write
build-depends: thispkg:somesublibThis 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-repositoriescabal.projectfields allows specifying an order and ways various package repositories are combined.The active
active-repositoriesis saved incabal.project.freeze.Various
cabal initimprovements #6150 #6675 !6603 !6607 !6619 !6632 !6641 !6650 !6661 !6676 !6677 !6678 !6690 !6705 !6723- Default to
cabal-version: 2.4 cabaldoesn'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.hsis not written anymore- Default to --source-dir=src and --application-dir=app
- Add
FileCreators.generateCabalFileunit 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-sdistcommand #2940 #5813 #6514 #6611 #6635 !6454 !6637 !6640 !6660 !6666 !6884 !6916v2-sdistmarks 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
configurescript. These are run with explicitshprogram. For package internal scripts, maintainers should also use interpreters explicitly as well. Scripts with shebangs are not executable on Windows.The
v1-sdistcommand is removed, as its functionality is completely superseded byv2-sdist.source-repository-packagedirectories aren't local #5586 !6915 !6917Concretely these means that compiled
source-repository-packageentries used in different projects are stored in the global nix-style store.Add list-bin command #6807 !6931
cabal list-bin executable-componenttells the path to the build artifact.-
Sandbox functionality is remove in favour of now default nix-style builds.
cabal listaccepts regular expression #4267 #6683 !6618 !6806More rich
index-statesyntax.v2-freezesavesindex-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.Typesmodule - Move cabal-testsuite code into
src/ - Add
ProjectFlags - Add
NixStyleOptions - Internal refactorings to install command.
- Make own modules for
InstallMethodandOverwritePolicy - Make cabal-install compilable with
NoImplicitPrelude - Refactor shared
TargetProblemdata types into their own module. - Template
cabal-install.cabalusing 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
-anyand-nonesyntax for version ranges in cabal-version: 3.4 #6589 !6786Use
>=0(or empty in dependencies) and<0respectively.Add pijul to known repository type #6610 !6684
Pijul is now explicitly recognized version control system. However
cabal-installisn'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
win32selfupgrademight break self upgrade on windows, whencabal-installtries 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+noindexrepositories 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
Texttype-class was removed fromCabal, but it still lived incabal-install. Now it is finally removed.cabal-installis still usingReadPparsers for various things though.Windows install symlinks !5684 !6506 !6519
cabal-installwill 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
BuildReportsparse/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
--helpoutput (there are v2-) !6930Installing (copy or symlink) executable message prints destination. !6582 !6590
Check sha256 if
#sha256=...fragments are given to URIs !6576upload --helpnow includespassword-commandas 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-projectflag tocabal v2-update#6809 !6814Adjust message indicating
--libis 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
+stderrmodifier toVerbosity!6929Mark public-libs as experimental feature !6605
More checks in version range parser !6586
Require cabal-versions
>=1.25to be exact !6654
