Cabal-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-9.0 #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-9.0's simplified subsumption.

  • Treat pkg:sublib dependency syntax as is in cabal-version: 3.4 #6083 !6893 !6907

    In cabal-version: 3.4 cabal files the dependency definition

    build-depends: somesublib

    does not use 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 an external library if you had a sublibrary of the same name.

  • Dependency type refactorings #5570 #6894 !6768 !6798 !6895 !6896 !6897 !6898

    With additions of (public) sublibraries, Dependency type use for multiple needs become painful. Therefore a new type PackageVersionConstraint was added to serve constraint on package use-case. Dependency type is dependency on a library component, i.e. representing build-depends entry.

    • Use PackageVersionConstraint more
    • Add NonEmptySet and use it in Dependency

Other changes

  • Tests 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 and OverwritePolicy
    • Make cabal-install compilable with NoImplicitPrelude
    • Refactor shared TargetProblem data types into their own module.
    • Template cabal-install.cabal using zinza
  • 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

  • Fix ghci being launched before other sources are built. !6923

    Related to foreign calls to C-sources.

  • Remove -any and -none syntax for version ranges in cabal-version: 3.4 #6589 !6786

    Use >=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 in source-repository-package.

  • Rename Flag to CompilerFlag and PackageFlag #6710 !6725

    There was three Flag's. Now they are

    • Flag (cli parsing)
    • PackageFlag
    • CompilerFlag

    This allows wild-imports without hiding (Flag).

  • Accept "linux-androideabi" as an alias for Android for determining buildOS !6301 !6949

    Cabal will able to parse linux-androideabi from the value of System.Info.os.

  • Refactor Distribution.PackageDescription module !6855

    Now it re-exports a collection of modules, not individual symbols.

  • 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.

  • Remove AnyVersion and WildcardVersion constructors from Version !6742

    This changes makes Version type less "syntactic", i.e. contains less constructors for semantically same version ranges.

  • Cabal-QuickCheck package with Arbitrary instances #6882 !6557 !6891

  • Create Cabal-tree-diff package with ToExpr instances !6789

  • Cabal.Distribution.Compiler: add Traversable instance for PerCompilerFlavor !6763

  • Improvements to cabal-testsuite framework !6643

  • 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

  • Flag assignment parsing refactorings #6853 !6854 !6858

  • Add foo:bar syntax to mixins #6281 !6912

  • default-language field is optional in cabal-version: 3.4 #6288 !6924 !6926

  • Split KnownRepoType out of RepoType #6432 !6612

  • Include component name in unit-id #6485 !6547

  • Change 'optional-packages' default to empty, when cabal.project is missing. #4797 #6739 !6740

  • Fix rpmvercmp (trailing non-digit characters) #6805 !6808

  • other changes !6556 !6598 !6910

  • Package description parser benchmark !6594

  • Add licenceIsFsfLibre !6878

  • Add +stderr modifier to Verbosity !6929

  • Mark public-libs as experimental feature !6605

  • Add rewriteFileLBS and use it to write setup wrapper !6574

  • Add SPDX License List 3.9 #6879 !6662 !6944

  • Change specVersion to have CabalSpecVersion type !6653

  • Better UTF8 handling, parsed ShortText is now valid. !6588

  • More checks in version range parser !6586

  • Require cabal-versions >=1.25 to be exact !6654

  • Add and use weeder !6779 !6790


Cabal-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-9.0 #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-9.0's simplified subsumption.

  • Treat pkg:sublib dependency syntax as is in cabal-version: 3.4 #6083 !6893 !6907

    In cabal-version: 3.4 cabal files the dependency definition

    build-depends: somesublib

    does not use 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 an external library if you had a sublibrary of the same name.

  • Dependency type refactorings #5570 #6894 !6768 !6798 !6895 !6896 !6897 !6898

    With additions of (public) sublibraries, Dependency type use for multiple needs become painful. Therefore a new type PackageVersionConstraint was added to serve constraint on package use-case. Dependency type is dependency on a library component, i.e. representing build-depends entry.

    • Use PackageVersionConstraint more
    • Add NonEmptySet and use it in Dependency

Other changes

  • Tests 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 and OverwritePolicy
    • Make cabal-install compilable with NoImplicitPrelude
    • Refactor shared TargetProblem data types into their own module.
    • Template cabal-install.cabal using zinza
  • 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

  • Fix ghci being launched before other sources are built. !6923

    Related to foreign calls to C-sources.

  • Remove -any and -none syntax for version ranges in cabal-version: 3.4 #6589 !6786

    Use >=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 in source-repository-package.

  • Rename Flag to CompilerFlag and PackageFlag #6710 !6725

    There was three Flag's. Now they are

    • Flag (cli parsing)
    • PackageFlag
    • CompilerFlag

    This allows wild-imports without hiding (Flag).

  • Accept "linux-androideabi" as an alias for Android for determining buildOS !6301 !6949

    Cabal will able to parse linux-androideabi from the value of System.Info.os.

  • Refactor Distribution.PackageDescription module !6855

    Now it re-exports a collection of modules, not individual symbols.

  • 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.

  • Remove AnyVersion and WildcardVersion constructors from Version !6742

    This changes makes Version type less "syntactic", i.e. contains less constructors for semantically same version ranges.

  • Cabal-QuickCheck package with Arbitrary instances #6882 !6557 !6891

  • Create Cabal-tree-diff package with ToExpr instances !6789

  • Cabal.Distribution.Compiler: add Traversable instance for PerCompilerFlavor !6763

  • Improvements to cabal-testsuite framework !6643

  • 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

  • Flag assignment parsing refactorings #6853 !6854 !6858

  • Add foo:bar syntax to mixins #6281 !6912

  • default-language field is optional in cabal-version: 3.4 #6288 !6924 !6926

  • Split KnownRepoType out of RepoType #6432 !6612

  • Include component name in unit-id #6485 !6547

  • Change 'optional-packages' default to empty, when cabal.project is missing. #4797 #6739 !6740

  • Fix rpmvercmp (trailing non-digit characters) #6805 !6808

  • other changes !6556 !6598 !6910

  • Package description parser benchmark !6594

  • Add licenceIsFsfLibre !6878

  • Add +stderr modifier to Verbosity !6929

  • Mark public-libs as experimental feature !6605

  • Add rewriteFileLBS and use it to write setup wrapper !6574

  • Add SPDX License List 3.9 #6879 !6662 !6944

  • Change specVersion to have CabalSpecVersion type !6653

  • Better UTF8 handling, parsed ShortText is now valid. !6588

  • More checks in version range parser !6586

  • Require cabal-versions >=1.25 to be exact !6654

  • Add and use weeder !6779 !6790