name:    uniworx
version: "0.0.0"

dependencies:
  # Due to a bug in GHC 8.0.1, we block its usage
  # See: https://ghc.haskell.org/trac/ghc/ticket/12130
  - base >=4.8.2.0 && <4.9 || >=4.9.1.0 && <5
  # version 1.0 had a bug in reexporting Handler, causing trouble
  - classy-prelude-yesod >=0.10.2 && <1.0 || >=1.1
  - foreign-store
  - yesod >=1.4.3 && <1.5
  - yesod-core >=1.4.30 && <1.5
  - yesod-auth >=1.4.0 && <1.5
  - yesod-static >=1.4.0.3 && <1.6
  - yesod-form >=1.4.0 && <1.5
  - classy-prelude >=0.10.2
  - classy-prelude-conduit >=0.10.2
  - bytestring >=0.9 && <0.11
  - text >=0.11 && <2.0
  - persistent >=2.7.2 && <2.8
  - persistent-postgresql >=2.1.1 && <2.8
  - persistent-template >=2.0 && <2.8
  - template-haskell
  - shakespeare >=2.0 && <2.1
  - hjsmin >=0.1 && <0.3
  - monad-control >=0.3 && <1.1
  - wai-extra >=3.0 && <3.1
  - yaml >=0.8 && <0.9
  - http-conduit >=2.1 && <2.3
  - directory >=1.1 && <1.4
  - warp >=3.0 && <3.3
  - data-default
  - aeson >=0.6 && <1.3
  - conduit >=1.0 && <2.0
  - monad-logger >=0.3 && <0.4
  - fast-logger >=2.2 && <2.5
  - wai-logger >=2.2 && <2.4
  - file-embed
  - safe
  - unordered-containers
  - containers
  - vector
  - time
  - case-insensitive
  - wai
  - cryptonite
  - cryptonite-conduit
  - saltine
  - base64-bytestring
  - memory
  - http-api-data
  - profunctors
  - colonnade >=1.1.1
  - yesod-colonnade >=1.1.0
  - blaze-markup
  - zip-stream
  - filepath
  - transformers
  - wl-pprint-text
  - uuid-types
  - path-pieces
  - uuid-crypto
  - filepath-crypto
  - cryptoids-types
  - cryptoids
  - cryptoids-class
  - binary
  - cereal
  - mtl
  - sandi
  - esqueleto
  - mime-types
  - generic-deriving
  - blaze-html
  - conduit-resumablesink >=0.2
  - parsec
  - uuid
  - exceptions
  - stm
  - stm-chans
  - stm-conduit
  - lens
  - MonadRandom
  - email-validate
  - scientific
  - tz
  - system-locale
  - th-lift
  - th-lift-instances
  - gitrev
  - Glob
  - ldap-client
  - connection
  - universe
  - universe-base
  - random
  - random-shuffle
  - th-abstraction
  - HaskellNet
  - HaskellNet-SSL
  - network
  - resource-pool
  - mime-mail
  - hashable
  - aeson-pretty
  - resourcet
  - postgresql-simple
  - word24
  - mmorph
  - clientsession
  - monad-memo
  - xss-sanitize
  - text-metrics
  - pkcs7
  - memcached-binary
  - directory-tree
  - lifted-base
  - lattices
  - hsass
  - semigroupoids
  - jose-jwt
  - mono-traversable
  - lens-aeson
  - systemd
  - lifted-async
  - streaming-commons
  - hourglass
  - unix
  - stm-delay

other-extensions:
  - GeneralizedNewtypeDeriving
  - IncoherentInstances
  - OverloadedLists
  - UndecidableInstances

default-extensions:
  - OverloadedStrings
  - PartialTypeSignatures
  - ScopedTypeVariables
  - TemplateHaskell
  - QuasiQuotes
  - CPP
  - TypeSynonymInstances
  - KindSignatures
  - ConstraintKinds
  - ViewPatterns
  - TypeOperators
  - TupleSections
  - TypeFamilies
  - GADTs
  - StandaloneDeriving
  - RecordWildCards
  - RankNTypes
  - PatternGuards
  - PatternSynonyms
  - ParallelListComp
  - NumDecimals
  - MultiWayIf
  - NamedFieldPuns
  - NoImplicitPrelude
  - LambdaCase
  - MultiParamTypeClasses
  - FlexibleContexts
  - FlexibleInstances
  - FunctionalDependencies
  - EmptyDataDecls
  - ExistentialQuantification
  - DefaultSignatures
  - DeriveDataTypeable
  - DeriveGeneric
  - DeriveLift
  - DeriveFunctor
  - DerivingStrategies
  - DataKinds
  - BinaryLiterals
  - PolyKinds
  - PackageImports
  - TypeApplications
  - RecursiveDo
  - TypeFamilyDependencies

ghc-options:
  - -Wall
  - -fno-warn-type-defaults
  - -fno-warn-unrecognised-pragmas
  - -fno-warn-partial-type-signatures
  - -fno-max-relevant-binds
  - -j3

when:
  - condition: flag(pedantic)
    ghc-options:
      - -Werror
      - -fwarn-tabs

# The library contains all of our application code. The executable
# defined below is just a thin wrapper.
library:
  source-dirs: src
  when:
    - condition: flag(dev)
      then:
        ghc-options:
          - -O0
          - -ddump-splices
        cpp-options: -DDEVELOPMENT
      else:
        ghc-options:
          - -O2

# Runnable executable for our application
executables:
  uniworx:
    main: main.hs
    source-dirs: app
    ghc-options:
      - -threaded
      - -rtsopts
      - -with-rtsopts=-N
    dependencies:
      - uniworx
    when:
      - condition: flag(library-only)
        buildable: false
  uniworxdb:
    main: Database.hs
    ghc-options:
      - -main-is Database
    source-dirs: test
    dependencies:
      - uniworx
    other-modules: []
    when:
      - condition: flag(library-only)
        buildable: false

# Test suite
tests:
  yesod:
    main: Main.hs
    source-dirs: test
    dependencies:
      - uniworx
      - hspec >=2.0.0
      - QuickCheck
      - HUnit
      - yesod-test
      - conduit-extra
      - quickcheck-classes
      - quickcheck-instances
      - generic-arbitrary
      - http-types
    ghc-options:
      - -fno-warn-orphans
      - -threaded
      - -rtsopts
      - -with-rtsopts=-N
  hlint:
    main: Hlint.hs
    other-modules: []
    source-dirs: hlint
    dependencies:
      - hlint-test
    when:
      - condition: "!flag(pedantic)"
        buildable: false

# Define flags used by "yesod devel" to make compilation faster
flags:
  library-only:
    description: Build for use with "yesod devel"
    manual: false
    default: false
  dev:
    description: Turn on development settings, like auto-reload templates.
    manual: false
    default: false
  pedantic:
    description: Be very pedantic about warnings and errors
    manual: false
    default: true
