packages feed

ghcup-0.1.22.0: ghcup.cabal

cabal-version:      2.4
name:               ghcup
version:            0.1.22.0
license:            LGPL-3.0-only
license-file:       LICENSE
copyright:          Julian Ospald 2024
maintainer:         hasufell@posteo.de
author:             Julian Ospald
homepage:           https://github.com/haskell/ghcup-hs
bug-reports:        https://github.com/haskell/ghcup-hs/issues/
synopsis:           ghc toolchain installer
description:
  A rewrite of the shell script ghcup, for providing
  a more stable user experience and exposing an API.

category:           System
build-type:         Simple
extra-doc-files:
  CHANGELOG.md
  data/config.yaml
  README.md

extra-source-files:
  cbits/dirutils.c
  cbits/dirutils.h
  data/build_mk/cross
  data/build_mk/default
  test/ghcup-test/data/dir/.keep
  test/ghcup-test/data/file
  test/ghcup-test/golden/unix/GHCupInfo.json
  test/ghcup-test/golden/windows/GHCupInfo.json

tested-with: GHC==9.4.8
           , GHC==9.2.8
           , GHC==9.0.2
           , GHC==8.10.7

source-repository head
  type:     git
  location: https://github.com/haskell/ghcup-hs.git

flag tui
  description:
    Build the brick powered tui (ghcup tui).

  default:     True
  manual:      True

flag internal-downloader
  description:
    Compile the internal downloader, which links against OpenSSL. This is disabled on windows.

  default:     False
  manual:      True

flag no-exe
  description: Don't build any executables
  default:     False
  manual:      True

flag tar
  description: Use haskell tar instead of libarchive.
  default:     False
  manual:      True

common app-common-depends
  build-depends:
    , aeson                  >=1.4
    , aeson-pretty           ^>=0.8.8
    , async                  ^>=2.2.3
    , base                   >=4.12     && <5
    , bytestring             >=0.10     && <0.12
    , cabal-install-parsers  >=0.4.5
    , cabal-plan             ^>=0.7.2
    , containers             ^>=0.6
    , deepseq                ^>=1.4
    , directory              ^>=1.3.6.0
    , filepath               >=1.4.101.0
    , haskus-utils-types     ^>=1.5
    , haskus-utils-variant   ^>=3.3
    , megaparsec             >=8.0.0    && <9.3
    , mtl                    ^>=2.2
    , optparse-applicative   >=0.15.1.0 && <0.18
    , pretty                 ^>=1.1.3.1
    , pretty-terminal        ^>=0.1.0.0
    , process                ^>=1.6.11.0
    , resourcet              ^>=1.2.2
    , safe                   ^>=0.3.18
    , safe-exceptions        ^>=0.1
    , tagsoup                ^>=0.14
    , template-haskell       >=2.7      && <2.22
    , temporary              ^>=1.3
    , text                   ^>=2.0
    , time                   >=1.9.3    && <1.12
    , unordered-containers   ^>=0.2
    , uri-bytestring         ^>=0.3.2.2
    , utf8-string            ^>=1.0
    , vector                 >=0.12     && <0.14
    , versions               >=6.0.5      && <6.1
    , yaml-streamly          ^>=0.12.0

  if flag(tar)
    cpp-options:   -DTAR
    build-depends:
        tar ^>=0.6.0.0
      , zip ^>=2.0.0

  else
    build-depends: libarchive ^>=3.0.3.0

library
  exposed-modules:
    GHCup
    GHCup.Cabal
    GHCup.Download
    GHCup.Download.Utils
    GHCup.Errors
    GHCup.GHC
    GHCup.HLS
    GHCup.List
    GHCup.Platform
    GHCup.Prelude
    GHCup.Prelude.File
    GHCup.Prelude.File.Search
    GHCup.Prelude.Internal
    GHCup.Prelude.Logger
    GHCup.Prelude.Logger.Internal
    GHCup.Prelude.MegaParsec
    GHCup.Prelude.Process
    GHCup.Prelude.String.QQ
    GHCup.Prelude.Version.QQ
    GHCup.Prompts
    GHCup.Requirements
    GHCup.Stack
    GHCup.Types
    GHCup.Types.JSON
    GHCup.Types.JSON.Utils
    GHCup.Types.JSON.Versions
    GHCup.Types.Optics
    GHCup.Types.Stack
    GHCup.Utils
    GHCup.Utils.Dirs
    GHCup.Utils.Tar
    GHCup.Utils.Tar.Types
    GHCup.Utils.URI
    GHCup.Version

  hs-source-dirs:     lib
  other-modules:      Paths_ghcup
  autogen-modules:    Paths_ghcup
  default-language:   Haskell2010
  default-extensions:
    DeriveGeneric
    LambdaCase
    MultiWayIf
    NamedFieldPuns
    PackageImports
    QuasiQuotes
    RecordWildCards
    ScopedTypeVariables
    StrictData
    TupleSections
    TypeApplications
    TypeFamilies
    ViewPatterns

  ghc-options:
    -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns
    -fwarn-incomplete-record-updates

  build-depends:
    , aeson                 >=1.4
    , async                 >=0.8        && <2.3
    , base                  >=4.12       && <5
    , base16-bytestring     >=0.1.1.6    && <1.1
    , binary                ^>=0.8.6.0
    , bytestring            >=0.10       && <0.12
    , bz2                   ^>=1.0.1.1
    , Cabal                 ^>=3.0.0.0 || ^>=3.2.0.0 || ^>=3.4.0.0 || ^>=3.6.0.0 || ^>=3.8.0.0 || ^>= 3.10.0.0
    , case-insensitive      ^>=1.2.1.0
    , casing                ^>=0.1.4.1
    , containers            ^>=0.6
    , cryptohash-sha256     ^>=0.11.101.0
    , deepseq               ^>=1.4.4.0
    , directory             ^>=1.3.6.0
    , disk-free-space       ^>=0.1.0.1
    , exceptions            ^>=0.10
    , filepath              >=1.4.101.0
    , file-uri              ^>=0.1.0.0
    , haskus-utils-types    ^>=1.5
    , haskus-utils-variant  ^>=3.3
    , lzma-static           ^>=5.2.5.3
    , megaparsec            >=8.0.0      && <9.3
    , mtl                   ^>=2.2
    , optics                ^>=0.4
    , os-release            ^>=1.0.0
    , pretty                ^>=1.1.3.1
    , pretty-terminal       ^>=0.1.0.0
    , regex-posix           ^>=0.96
    , resourcet             ^>=1.2.2
    , retry                 >=0.8.1.2    && <0.10
    , safe                  ^>=0.3.18
    , safe-exceptions       ^>=0.1
    , split                 ^>=0.2.3.4
    , streamly              ^>=0.8.2
    , strict-base           ^>=0.4
    , template-haskell       >=2.7      && <2.22
    , temporary             ^>=1.3
    , text                  ^>=2.0
    , time                  >=1.9.3      && <1.12
    , transformers          ^>=0.5
    , unliftio-core         ^>=0.2.0.1
    , unordered-containers  ^>=0.2.10.0
    , uri-bytestring        ^>=0.3.2.2
    , vector                 >=0.12     && <0.14
    , versions               >=6.0.5      && <6.1
    , word8                 ^>=0.1.3
    , yaml-streamly         ^>=0.12.0
    , zlib                  ^>=0.6.2.2

  if flag(tar)
    cpp-options:   -DTAR
    build-depends:
        tar ^>=0.6.0.0
      , zip ^>=2.0.0

  else
    build-depends: libarchive ^>=3.0.3.0

  if (flag(internal-downloader) && !os(windows))
    exposed-modules: GHCup.Download.IOStreams
    cpp-options:     -DINTERNAL_DOWNLOADER
    build-depends:
      , HsOpenSSL              >=0.11.7.2
      , http-io-streams        >=0.1.2.0
      , io-streams             >=1.5.2.1
      , terminal-progress-bar  >=0.4.1

  if os(windows)
    cpp-options:     -DIS_WINDOWS
    other-modules:
      GHCup.Prelude.File.Windows
      GHCup.Prelude.Windows

    -- GHCup.OptParse.Run uses this
    exposed-modules: GHCup.Prelude.Process.Windows
    build-depends:
      , process  ^>=1.6.11.0
      , Win32    >=2.10

  else
    other-modules:
      GHCup.Prelude.File.Posix
      GHCup.Prelude.File.Posix.Foreign
      GHCup.Prelude.Posix
      GHCup.Prelude.Process.Posix

    exposed-modules:  GHCup.Prelude.File.Posix.Traversals
    include-dirs:     cbits
    includes:         dirutils.h
    install-includes: dirutils.h
    c-sources:        cbits/dirutils.c
    build-depends:
      , terminal-size    ^>=0.3.3
      , unix             ^>=2.7 || ^>=2.8
      , unix-bytestring  ^>=0.3.7.3

  if flag(tui)
    cpp-options:   -DBRICK
    build-depends: vty ^>=6.0 || ^>=6.1 || ^>=6.2

library ghcup-optparse
  import:             app-common-depends
  exposed-modules:
    GHCup.OptParse
    GHCup.OptParse.ChangeLog
    GHCup.OptParse.Common
    GHCup.OptParse.Compile
    GHCup.OptParse.Config
    GHCup.OptParse.DInfo
    GHCup.OptParse.GC
    GHCup.OptParse.Install
    GHCup.OptParse.List
    GHCup.OptParse.Nuke
    GHCup.OptParse.Prefetch
    GHCup.OptParse.Rm
    GHCup.OptParse.Run
    GHCup.OptParse.Set
    GHCup.OptParse.Test
    GHCup.OptParse.ToolRequirements
    GHCup.OptParse.UnSet
    GHCup.OptParse.Upgrade
    GHCup.OptParse.Whereis

  hs-source-dirs:     lib-opt
  default-language:   Haskell2010
  default-extensions:
    LambdaCase
    MultiWayIf
    NamedFieldPuns
    PackageImports
    RecordWildCards
    ScopedTypeVariables
    StrictData
    TupleSections

  ghc-options:
    -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns
    -fwarn-incomplete-record-updates

  build-depends:      ghcup

  if flag(internal-downloader)
    cpp-options: -DINTERNAL_DOWNLOADER

  if flag(tui)
    cpp-options:   -DBRICK

  if os(windows)
    cpp-options: -DIS_WINDOWS

  else
    build-depends:  unix ^>=2.7 || ^>=2.8

executable ghcup
  import:             app-common-depends
  main-is:            Main.hs

  hs-source-dirs:     app/ghcup
  default-language:   Haskell2010
  default-extensions:
    LambdaCase
    MultiWayIf
    NamedFieldPuns
    PackageImports
    RecordWildCards
    ScopedTypeVariables
    StrictData
    TupleSections

  ghc-options:
    -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns
    -fwarn-incomplete-record-updates -threaded

  build-depends:
    , ghcup
    , ghcup-optparse

  if flag(internal-downloader)
    cpp-options: -DINTERNAL_DOWNLOADER

  if flag(tui)
    cpp-options:   -DBRICK
    other-modules: BrickMain
    build-depends:
      , brick         ^>=2.1
      , transformers  ^>=0.5
      , vty           ^>=6.0 || ^>=6.1 || ^>=6.2
      , optics        ^>=0.4

  if os(windows)
    cpp-options: -DIS_WINDOWS
  else
    build-depends: unix ^>=2.7 || ^>=2.8

  if flag(no-exe)
    buildable: False

test-suite ghcup-test
  type:               exitcode-stdio-1.0
  main-is:            Main.hs
  build-tool-depends: hspec-discover:hspec-discover -any
  hs-source-dirs:     test/ghcup-test
  other-modules:
    GHCup.ArbitraryTypes
    GHCup.Prelude.File.Posix.TraversalsSpec
    GHCup.Types.JSONSpec
    GHCup.Utils.FileSpec
    Spec

  default-language:   Haskell2010
  default-extensions:
    LambdaCase
    MultiWayIf
    PackageImports
    RecordWildCards
    ScopedTypeVariables
    TupleSections

  ghc-options:
    -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns
    -fwarn-incomplete-record-updates

  build-depends:
    , base                      >=4.12    && <5
    , bytestring                >=0.10    && <0.12
    , containers                ^>=0.6
    , directory                 ^>=1.3.6.0
    , filepath                  >=1.4.101.0
    , generic-arbitrary         >=0.1.0   && <0.2.1 || >=0.2.2 && <0.3
    , ghcup
    , hspec                     >=2.7.10  && <2.11
    , hspec-golden-aeson        ^>=0.9
    , QuickCheck                ^>=2.14.1
    , quickcheck-arbitrary-adt  ^>=0.3.1.0
    , streamly                  ^>=0.8.2
    , text                      ^>=2.0
    , time                      >=1.9.3   && <1.12
    , uri-bytestring            ^>=0.3.2.2
    , versions                   >=6.0.5      && <6.1

  if os(windows)
    cpp-options: -DIS_WINDOWS

  else
    build-depends: unix ^>=2.7 || ^>=2.8

test-suite ghcup-optparse-test
  type:             exitcode-stdio-1.0
  hs-source-dirs:   test/optparse-test
  main-is:          Main.hs
  other-modules:
    ChangeLogTest
    CompileTest
    ConfigTest
    GCTest
    InstallTest
    ListTest
    OtherCommandTest
    RmTest
    RunTest
    SetTest
    UnsetTest
    UpgradeTest
    Utils
    WhereisTest

  if os(windows)
    cpp-options: -DIS_WINDOWS

  default-language: Haskell2010
  ghc-options:      -Wall
  build-depends:
    , base
    , ghcup
    , ghcup-optparse
    , optparse-applicative
    , tasty
    , tasty-hunit
    , template-haskell
    , text
    , uri-bytestring
    , versions