cabal-version:      3.0
name:               ghcup
version:            0.1.11
synopsis:           ghc toolchain installer as an exe/library
description:
  A rewrite of the shell script ghcup, for providing
  a more stable user experience and exposing an API.

homepage:           https://gitlab.haskell.org/haskell/ghcup-hs
bug-reports:        https://gitlab.haskell.org/haskell/ghcup-hs/issues
license:            LGPL-3.0-only
license-file:       LICENSE
author:             Julian Ospald
maintainer:         hasufell@posteo.de
copyright:          Julian Ospald 2020
category:           System
build-type:         Simple
extra-source-files: CHANGELOG.md

source-repository head
  type:     git
  location: https://gitlab.haskell.org/haskell/ghcup-hs.git

flag tui
  description: Build the brick powered tui (ghcup tui)
  default:     False
  manual:      True

flag internal-downloader
  description: Compile the internal downloader, which links against OpenSSL
  default:     False
  manual:      True

flag tar
  description: Use tar-bytestring instead of libarchive
  default:     False
  manual:      True

common HsOpenSSL
  build-depends: HsOpenSSL >=0.11.4.18

common aeson
  build-depends: aeson >=1.4

common aeson-pretty
  build-depends: aeson-pretty >=0.8.8

common ascii-string
  build-depends: ascii-string >=1.0

common async
  build-depends: async >=0.8

common base
  build-depends: base >=4.12 && <5

common base16-bytestring
  build-depends: base16-bytestring >= 0.1.1.6

common binary
  build-depends: binary >=0.8.6.0

common brick
  build-depends: brick >=0.54

common bytestring
  build-depends: bytestring >=0.10

common bz2
  build-depends: bz2 >=0.5.0.5

common case-insensitive
  build-depends: case-insensitive >=1.2.1.0

common concurrent-output
  build-depends: concurrent-output >=1.10.11

common containers
  build-depends: containers >=0.6

common cryptohash-sha256
  build-depends: cryptohash-sha256 >= 0.11.101.0

common generic-arbitrary
  build-depends: generic-arbitrary >=0.1.0

common generics-sop
  build-depends: generics-sop >=0.5

common haskus-utils-types
  build-depends: haskus-utils-types >=1.5

common haskus-utils-variant
  build-depends: haskus-utils-variant >=3.0

common hpath
  build-depends: hpath >=0.11

common hpath-directory
  build-depends: hpath-directory >=0.14.1

common hpath-filepath
  build-depends: hpath-filepath >=0.10.3

common hpath-io
  build-depends: hpath-io >=0.14.1

common hpath-posix
  build-depends: hpath-posix >=0.13.2

common http-io-streams
  build-depends: http-io-streams >=0.1.2.0

common hspec
  build-depends: hspec >=2.7.4

common hspec-golden-aeson
  build-depends: hspec-golden-aeson >=0.7

common io-streams
  build-depends: io-streams >=1.5

common libarchive
  build-depends: libarchive >= 3.0.0.0

common lzma
  build-depends: lzma >=0.0.0.3

common megaparsec
  build-depends: megaparsec >=8.0.0

common monad-logger
  build-depends: monad-logger >=0.3.31

common mtl
  build-depends: mtl >=2.2

common optics
  build-depends: optics >=0.2

common optics-vl
  build-depends: optics-vl >=0.2

common optparse-applicative
  build-depends: optparse-applicative >=0.15.1.0

common parsec
  build-depends: parsec >=3.1

common pretty-terminal
  build-depends: pretty-terminal >=0.1.0.0

common regex-posix
  build-depends: regex-posix >=0.96

common resourcet
  build-depends: resourcet >=1.2.2

common safe
  build-depends: safe >=0.3.18

common safe-exceptions
  build-depends: safe-exceptions >=0.1

common split
  build-depends: split >=0.2.3.4

common streamly
  build-depends: streamly >=0.7.1

common streamly-posix
  build-depends: streamly-posix >=0.1.0.0

common streamly-bytestring
  build-depends: streamly-bytestring >=0.1.2

common strict-base
  build-depends: strict-base >=0.4

common string-interpolate
  build-depends: string-interpolate >=0.2.0.0

common table-layout
  build-depends: table-layout >=0.8

common template-haskell
  build-depends: template-haskell >=2.7

common tar-bytestring
  build-depends: tar-bytestring >=0.6.3.1

common terminal-progress-bar
  build-depends: terminal-progress-bar >=0.4.1

common text
  build-depends: text >=1.2.4.0

common time
  build-depends: time >=1.9.3

common transformers
  build-depends: transformers >=0.5

common os-release
  build-depends: os-release >=1.0.0

common QuickCheck
  build-depends: QuickCheck >=2.14.1

common quickcheck-arbitrary-adt
  build-depends: quickcheck-arbitrary-adt >=0.3.1.0

common unix
  build-depends: unix >=2.7

common unix-bytestring
  build-depends: unix-bytestring >=0.3

common unordered-containers
  build-depends: unordered-containers >= 0.2.10.0

common uri-bytestring
  build-depends: uri-bytestring >=0.3.2.2

common utf8-string
  build-depends: utf8-string >=1.0

common vector
  build-depends: vector >=0.12

common versions
  build-depends: versions >=3.5

common vty
  build-depends: vty >=5.28.2

common word8
  build-depends: word8 >=0.1.3

common yaml
  build-depends: yaml >=0.11.4.0

common zlib
  build-depends: zlib >=0.6.2.1

common config
  default-language:   Haskell2010
  ghc-options:
    -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns
    -fwarn-incomplete-record-updates -threaded

  default-extensions:
    LambdaCase
    MultiWayIf
    PackageImports
    RecordWildCards
    ScopedTypeVariables
    TupleSections

library
  import:
    config
    , base
    , base16-bytestring
    , aeson
    , ascii-string
    , async
    , binary
    , bytestring
    , bz2
    , case-insensitive
    , concurrent-output
    , containers
    , cryptohash-sha256
    , generics-sop
    , haskus-utils-types
    , haskus-utils-variant
    , hpath
    , hpath-directory
    , hpath-filepath
    , hpath-io
    , hpath-posix
    , lzma
    , megaparsec
    , monad-logger
    , mtl
    , optics
    , optics-vl
    , parsec
    , pretty-terminal
    , regex-posix
    , resourcet
    , safe
    , safe-exceptions
    , split
    , streamly
    , streamly-posix
    , streamly-bytestring
    , strict-base
    , string-interpolate
    , template-haskell
    , text
    , time
    , transformers
    , os-release
    , unix
    , unix-bytestring
    , unordered-containers
    , uri-bytestring
    , utf8-string
    , vector
    , versions
    , word8
    , yaml
    , zlib

  exposed-modules:
    GHCup
    GHCup.Download
    GHCup.Download.Utils
    GHCup.Errors
    GHCup.Platform
    GHCup.Requirements
    GHCup.Types
    GHCup.Types.JSON
    GHCup.Types.Optics
    GHCup.Utils
    GHCup.Utils.Dirs
    GHCup.Utils.File
    GHCup.Utils.Logger
    GHCup.Utils.MegaParsec
    GHCup.Utils.Prelude
    GHCup.Utils.String.QQ
    GHCup.Utils.Version.QQ
    GHCup.Version

  default-extensions:
    Strict
    StrictData

  -- other-modules:
  -- other-extensions:
  hs-source-dirs:  lib

  if flag(internal-downloader)
    import:
        HsOpenSSL
      , http-io-streams
      , io-streams
      , terminal-progress-bar
    exposed-modules: GHCup.Download.IOStreams
    cpp-options:     -DINTERNAL_DOWNLOADER

  if flag(tar)
    import:
        tar-bytestring
    cpp-options:     -DTAR
  else
    import:
        libarchive

executable ghcup
  import:
    config
    , base
    , aeson
    , bytestring
    , containers
    , haskus-utils-variant
    , hpath
    , hpath-io
    , megaparsec
    , monad-logger
    , mtl
    , optparse-applicative
    , pretty-terminal
    , resourcet
    , safe
    , safe-exceptions
    , string-interpolate
    , table-layout
    , template-haskell
    , text
    , uri-bytestring
    , utf8-string
    , versions

  --
  main-is:          Main.hs

  -- other-modules:
  -- other-extensions:
  build-depends:    ghcup
  hs-source-dirs:   app/ghcup
  default-language: Haskell2010

  default-extensions:
    Strict
    StrictData

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

  if flag(tui)
    import:
      brick
      , vector
      , vty
    other-modules: BrickMain
    cpp-options:     -DBRICK

  if flag(tar)
    cpp-options:     -DTAR
  else
    import:
        libarchive

executable ghcup-gen
  import:
    config
    , base
    , aeson
    , aeson-pretty
    , bytestring
    , containers
    , haskus-utils-variant
    , hpath
    , monad-logger
    , mtl
    , optics
    , optparse-applicative
    , pretty-terminal
    , resourcet
    , safe-exceptions
    , string-interpolate
    , table-layout
    , text
    , transformers
    , uri-bytestring
    , utf8-string
    , versions
    , yaml

  --
  main-is:          Main.hs
  other-modules:
    Validate

  -- other-extensions:
  build-depends:    ghcup
  hs-source-dirs:   app/ghcup-gen
  default-language: Haskell2010

test-suite ghcup-test
  import:
    config
    , base
    , bytestring
    , containers
    , QuickCheck
    , generic-arbitrary
    , hpath
    , hspec
    , hspec-golden-aeson
    , quickcheck-arbitrary-adt
    , text
    , uri-bytestring
    , versions
  type:             exitcode-stdio-1.0
  build-depends:    ghcup
  hs-source-dirs:   test
  main-is:          Main.hs
  other-modules:
                    GHCup.ArbitraryTypes
                    GHCup.Types.JSONSpec
                    Spec