Cabal-Version:      3.0

Name:               cabal-install
Version:            3.12.1.0
Synopsis:           The command-line interface for Cabal and Hackage.
Description:
    The \'cabal\' command-line program simplifies the process of managing
    Haskell software by automating the fetching, configuration, compilation
    and installation of Haskell libraries and programs.
homepage:           http://www.haskell.org/cabal/
bug-reports:        https://github.com/haskell/cabal/issues
License:            BSD-3-Clause
License-File:       LICENSE
Author:             Cabal Development Team (see AUTHORS file)
Maintainer:         Cabal Development Team <cabal-devel@haskell.org>
Copyright:          2003-2024, Cabal Development Team
Category:           Distribution
Build-type:         Simple
Extra-Source-Files:
  bash-completion/cabal
extra-doc-files:
  README.md
  changelog

source-repository head
  type:     git
  location: https://github.com/haskell/cabal/
  subdir:   cabal-install

Flag native-dns
  description:
    Enable use of the [resolv](https://hackage.haskell.org/package/resolv)
    & [windns](https://hackage.haskell.org/package/windns) packages for performing DNS lookups
  default:      True
  manual:       True

Flag lukko
  description:  Use @lukko@ for file-locking
  default:      True
  manual:       True

common warnings
    ghc-options: -Wall -Wcompat -Wnoncanonical-monad-instances -Wincomplete-uni-patterns -Wincomplete-record-updates

    if impl(ghc < 8.8)
      ghc-options: -Wnoncanonical-monadfail-instances

    if impl(ghc >=9.0)
      -- Warning: even though introduced with GHC 8.10, -Wunused-packages
      -- gives false positives with GHC 8.10.
      ghc-options: -Wunused-packages

common base-dep
    build-depends: base >=4.11 && <4.21

common cabal-dep
    build-depends: Cabal ^>=3.12.1.0

common cabal-syntax-dep
    build-depends: Cabal-syntax ^>=3.12.1.0

common cabal-install-solver-dep
    build-depends: cabal-install-solver ^>=3.12.1.0

library
    import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep
    default-language: Haskell2010
    default-extensions: TypeOperators

    hs-source-dirs:   src
    autogen-modules:
        Paths_cabal_install
    other-modules:
        Paths_cabal_install
    exposed-modules:
        -- this modules are moved from Cabal
        -- they are needed for as long until cabal-install moves to parsec parser
        Distribution.Deprecated.ParseUtils
        Distribution.Deprecated.ReadP
        Distribution.Deprecated.ViewAsFieldDescr

        Distribution.Client.BuildReports.Anonymous
        Distribution.Client.BuildReports.Lens
        Distribution.Client.BuildReports.Storage
        Distribution.Client.BuildReports.Types
        Distribution.Client.BuildReports.Upload
        Distribution.Client.Check
        Distribution.Client.CmdBench
        Distribution.Client.CmdBuild
        Distribution.Client.CmdClean
        Distribution.Client.CmdConfigure
        Distribution.Client.CmdErrorMessages
        Distribution.Client.CmdExec
        Distribution.Client.CmdFreeze
        Distribution.Client.CmdHaddock
        Distribution.Client.CmdHaddockProject
        Distribution.Client.CmdInstall
        Distribution.Client.CmdInstall.ClientInstallFlags
        Distribution.Client.CmdInstall.ClientInstallTargetSelector
        Distribution.Client.CmdLegacy
        Distribution.Client.CmdListBin
        Distribution.Client.CmdPath
        Distribution.Client.CmdOutdated
        Distribution.Client.CmdRepl
        Distribution.Client.CmdRun
        Distribution.Client.CmdSdist
        Distribution.Client.CmdTest
        Distribution.Client.CmdUpdate
        Distribution.Client.Compat.Directory
        Distribution.Client.Compat.ExecutablePath
        Distribution.Client.Compat.Orphans
        Distribution.Client.Compat.Prelude
        Distribution.Client.Compat.Semaphore
        Distribution.Client.Compat.Tar
        Distribution.Client.Config
        Distribution.Client.Configure
        Distribution.Client.Dependency
        Distribution.Client.Dependency.Types
        Distribution.Client.DistDirLayout
        Distribution.Client.Errors
        Distribution.Client.Fetch
        Distribution.Client.FetchUtils
        Distribution.Client.FileMonitor
        Distribution.Client.Freeze
        Distribution.Client.GZipUtils
        Distribution.Client.GenBounds
        Distribution.Client.Get
        Distribution.Client.Glob
        Distribution.Client.GlobalFlags
        Distribution.Client.Haddock
        Distribution.Client.HashValue
        Distribution.Client.HttpUtils
        Distribution.Client.IndexUtils
        Distribution.Client.IndexUtils.ActiveRepos
        Distribution.Client.IndexUtils.IndexState
        Distribution.Client.IndexUtils.Timestamp
        Distribution.Client.Init
        Distribution.Client.Init.Defaults
        Distribution.Client.Init.FileCreators
        Distribution.Client.Init.FlagExtractors
        Distribution.Client.Init.Format
        Distribution.Client.Init.Interactive.Command
        Distribution.Client.Init.NonInteractive.Command
        Distribution.Client.Init.NonInteractive.Heuristics
        Distribution.Client.Init.Licenses
        Distribution.Client.Init.Prompt
        Distribution.Client.Init.Simple
        Distribution.Client.Init.Types
        Distribution.Client.Init.Utils
        Distribution.Client.Install
        Distribution.Client.InstallPlan
        Distribution.Client.InstallSymlink
        Distribution.Client.JobControl
        Distribution.Client.List
        Distribution.Client.Main
        Distribution.Client.Manpage
        Distribution.Client.ManpageFlags
        Distribution.Client.Nix
        Distribution.Client.NixStyleOptions
        Distribution.Client.PackageHash
        Distribution.Client.ParseUtils
        Distribution.Client.ProjectBuilding
        Distribution.Client.ProjectBuilding.UnpackedPackage
        Distribution.Client.ProjectBuilding.PackageFileMonitor
        Distribution.Client.ProjectBuilding.Types
        Distribution.Client.ProjectConfig
        Distribution.Client.ProjectConfig.Legacy
        Distribution.Client.ProjectConfig.Types
        Distribution.Client.ProjectFlags
        Distribution.Client.ProjectOrchestration
        Distribution.Client.ProjectPlanOutput
        Distribution.Client.ProjectPlanning
        Distribution.Client.ProjectPlanning.SetupPolicy
        Distribution.Client.ProjectPlanning.Types
        Distribution.Client.RebuildMonad
        Distribution.Client.Reconfigure
        Distribution.Client.ReplFlags
        Distribution.Client.Run
        Distribution.Client.Sandbox
        Distribution.Client.Sandbox.PackageEnvironment
        Distribution.Client.SavedFlags
        Distribution.Client.ScriptUtils
        Distribution.Client.Security.DNS
        Distribution.Client.Security.HTTP
        Distribution.Client.Setup
        Distribution.Client.SetupWrapper
        Distribution.Client.Signal
        Distribution.Client.SolverInstallPlan
        Distribution.Client.SourceFiles
        Distribution.Client.SrcDist
        Distribution.Client.Store
        Distribution.Client.Tar
        Distribution.Client.TargetProblem
        Distribution.Client.TargetSelector
        Distribution.Client.Targets
        Distribution.Client.Types
        Distribution.Client.Types.AllowNewer
        Distribution.Client.Types.BuildResults
        Distribution.Client.Types.ConfiguredId
        Distribution.Client.Types.ConfiguredPackage
        Distribution.Client.Types.Credentials
        Distribution.Client.Types.InstallMethod
        Distribution.Client.Types.OverwritePolicy
        Distribution.Client.Types.PackageLocation
        Distribution.Client.Types.PackageSpecifier
        Distribution.Client.Types.ReadyPackage
        Distribution.Client.Types.Repo
        Distribution.Client.Types.RepoName
        Distribution.Client.Types.SourcePackageDb
        Distribution.Client.Types.SourceRepo
        Distribution.Client.Types.WriteGhcEnvironmentFilesPolicy
        Distribution.Client.Upload
        Distribution.Client.Utils
        Distribution.Client.Utils.Json
        Distribution.Client.Utils.Parsec
        Distribution.Client.VCS
        Distribution.Client.Version
        Distribution.Client.Win32SelfUpgrade

    build-depends:
        async      >= 2.0      && < 2.3,
        array      >= 0.4      && < 0.6,
        base16-bytestring >= 0.1.1 && < 1.1.0.0,
        binary     >= 0.7.3    && < 0.9,
        bytestring >= 0.10.6.0 && < 0.13,
        containers >= 0.5.6.2  && < 0.8,
        cryptohash-sha256 >= 0.11 && < 0.12,
        directory  >= 1.3.7.0  && < 1.4,
        echo       >= 0.1.3    && < 0.2,
        edit-distance >= 0.2.2 && < 0.3,
        exceptions >= 0.10.4   && < 0.11,
        filepath   >= 1.4.0.0  && < 1.6,
        hashable   >= 1.0      && < 1.5,
        HTTP       >= 4000.1.5 && < 4000.5,
        mtl        >= 2.0      && < 2.4,
        network-uri >= 2.6.0.2 && < 2.7,
        pretty     >= 1.1      && < 1.2,
        process    >= 1.2.3.0  && < 1.7,
        random     >= 1.2      && < 1.3,
        stm        >= 2.0      && < 2.6,
        tar        >= 0.5.0.3  && < 0.7,
        time       >= 1.5.0.1  && < 1.15,
        zlib       >= 0.5.3    && < 0.8,
        hackage-security >= 0.6.2.6 && < 0.7,
        text       >= 1.2.3    && < 1.3 || >= 2.0 && < 2.2,
        parsec     >= 3.1.13.0 && < 3.2,
        open-browser >= 0.2.1.0 && < 0.3,
        regex-base  >= 0.94.0.0 && <0.95,
        regex-posix >= 0.96.0.0 && <0.97,
        safe-exceptions >= 0.1.7.0 && < 0.2,
        semaphore-compat >= 1.0.0 && < 1.1

    if flag(native-dns)
      if os(windows)
        build-depends: windns      >= 0.1.0 && < 0.2
      else
        build-depends: resolv      >= 0.1.1 && < 0.3

    if os(windows)
      -- newer directory for symlinks
      build-depends: Win32 >= 2.8 && < 3, directory >=1.3.1.0
    else
      build-depends: unix >= 2.5 && < 2.9

    if flag(lukko)
      build-depends: lukko >= 0.1 && <0.2

    -- pull in process version with fixed waitForProcess error
    if impl(ghc >=8.2)
      build-depends: process >= 1.6.15.0


executable cabal
    import: warnings, base-dep
    main-is: Main.hs
    hs-source-dirs: main
    default-language: Haskell2010

    ghc-options: -rtsopts -threaded

    -- On AIX, some legacy BSD operations such as flock(2) are provided by libbsd.a
    if os(aix)
        extra-libraries: bsd

    build-depends:
        cabal-install

-- Small, fast running tests.
--
test-suite unit-tests
    import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep
    default-language: Haskell2010
    default-extensions: TypeOperators
    ghc-options: -rtsopts -threaded

    type: exitcode-stdio-1.0
    main-is: UnitTests.hs
    hs-source-dirs: tests
    other-modules:
      UnitTests.Distribution.Client.ArbitraryInstances
      UnitTests.Distribution.Client.BuildReport
      UnitTests.Distribution.Client.Configure
      UnitTests.Distribution.Client.FetchUtils
      UnitTests.Distribution.Client.Get
      UnitTests.Distribution.Client.Glob
      UnitTests.Distribution.Client.GZipUtils
      UnitTests.Distribution.Client.IndexUtils
      UnitTests.Distribution.Client.IndexUtils.Timestamp
      UnitTests.Distribution.Client.Init
      UnitTests.Distribution.Client.Init.Golden
      UnitTests.Distribution.Client.Init.Interactive
      UnitTests.Distribution.Client.Init.NonInteractive
      UnitTests.Distribution.Client.Init.Simple
      UnitTests.Distribution.Client.Init.Utils
      UnitTests.Distribution.Client.Init.FileCreators
      UnitTests.Distribution.Client.InstallPlan
      UnitTests.Distribution.Client.JobControl
      UnitTests.Distribution.Client.ProjectConfig
      UnitTests.Distribution.Client.ProjectPlanning
      UnitTests.Distribution.Client.Store
      UnitTests.Distribution.Client.Tar
      UnitTests.Distribution.Client.Targets
      UnitTests.Distribution.Client.TreeDiffInstances
      UnitTests.Distribution.Client.UserConfig
      UnitTests.Distribution.Solver.Modular.Builder
      UnitTests.Distribution.Solver.Modular.RetryLog
      UnitTests.Distribution.Solver.Modular.Solver
      UnitTests.Distribution.Solver.Modular.DSL
      UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils
      UnitTests.Distribution.Solver.Modular.WeightedPSQ
      UnitTests.Distribution.Solver.Types.OptionalStanza
      UnitTests.Options

    build-depends:
          array,
          bytestring,
          cabal-install,
          Cabal-tree-diff,
          Cabal-QuickCheck,
          Cabal-tests,
          containers,
          directory,
          filepath,
          mtl,
          network-uri >= 2.6.2.0 && <2.7,
          random,
          tar,
          time,
          zlib,
          tasty >= 1.2.3 && <1.6,
          tasty-golden >=2.3.1.1 && <2.4,
          tasty-quickcheck <0.11,
          tasty-expected-failure,
          tasty-hunit >= 0.10,
          tree-diff,
          QuickCheck >= 2.14.3 && <2.16


-- Tests to run with a limited stack and heap size
-- The test suite name must be keep short cause a longer one
-- could make the build generating paths which exceeds the windows
-- max path limit (still a problem for some ghc versions)
test-suite mem-use-tests
  import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep
  type: exitcode-stdio-1.0
  main-is: MemoryUsageTests.hs
  hs-source-dirs: tests
  default-language: Haskell2010

  ghc-options: -threaded -rtsopts "-with-rtsopts=-M16M -K1K"

  other-modules:
    UnitTests.Distribution.Solver.Modular.DSL
    UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils
    UnitTests.Distribution.Solver.Modular.MemoryUsage
    UnitTests.Options

  build-depends:
        cabal-install,
        containers,
        tasty >= 1.2.3 && <1.6,
        tasty-hunit >= 0.10


-- Integration tests that use the cabal-install code directly
-- but still build whole projects
test-suite integration-tests2
  import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep
  ghc-options: -rtsopts -threaded
  type: exitcode-stdio-1.0
  main-is: IntegrationTests2.hs
  hs-source-dirs: tests
  default-language: Haskell2010

  build-depends:
        bytestring,
        cabal-install,
        containers,
        directory,
        filepath,
        tasty >= 1.2.3 && <1.6,
        tasty-hunit >= 0.10,
        tagged

test-suite long-tests
  import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep
  ghc-options: -rtsopts -threaded
  type: exitcode-stdio-1.0
  hs-source-dirs: tests
  main-is: LongTests.hs
  default-language: Haskell2010

  other-modules:
    UnitTests.Distribution.Client.ArbitraryInstances
    UnitTests.Distribution.Client.Described
    UnitTests.Distribution.Client.DescribedInstances
    UnitTests.Distribution.Client.FileMonitor
    UnitTests.Distribution.Client.VCS
    UnitTests.Distribution.Solver.Modular.DSL
    UnitTests.Distribution.Solver.Modular.QuickCheck
    UnitTests.Distribution.Solver.Modular.QuickCheck.Utils
    UnitTests.Options

  build-depends:
        Cabal-QuickCheck,
        Cabal-described,
        Cabal-tests,
        cabal-install,
        containers,
        directory,
        filepath,
        hashable,
        mtl,
        network-uri >= 2.6.2.0 && <2.7,
        random,
        tagged,
        tasty >= 1.2.3 && <1.6,
        tasty-expected-failure,
        tasty-hunit >= 0.10,
        tasty-quickcheck <0.11,
        QuickCheck >= 2.14 && <2.16,
        pretty-show >= 1.6.15
