name:    uniworx
version: 20.4.1

dependencies:
  - base
  - yesod
  - yesod-core
  - yesod-auth
  - yesod-static
  - yesod-form
  - classy-prelude
  - classy-prelude-yesod
  - bytestring
  - text
  - persistent
  - persistent-postgresql
  - persistent-template
  - persistent-qq
  - template-haskell
  - shakespeare
  - monad-control
  - wai-extra
  - yaml
  - http-conduit
  - directory
  - warp
  - data-default
  - aeson
  - conduit
  - monad-logger
  - fast-logger
  - wai-logger
  - foreign-store
  - file-embed
  - unordered-containers
  - containers
  - vector
  - time
  - case-insensitive
  - wai
  - cryptonite
  - cryptonite-conduit
  - saltine
  - base64-bytestring
  - base32
  - memory
  - http-api-data
  - profunctors
  - colonnade >=1.1.1
  - blaze-markup
  - zip-stream
  - encoding
  - filepath
  - transformers
  - transformers-base
  - wl-pprint-text
  - uuid-types
  - path-pieces
  - uuid-crypto
  - filepath-crypto
  - cryptoids-types
  - cryptoids
  - cryptoids-class
  - binary
  - binary-instances
  - mtl
  - esqueleto >=3.1.0
  - mime-types
  - generic-deriving
  - blaze-html
  - conduit-resumablesink >=0.2
  - parsec
  - attoparsec
  - uuid
  - exceptions
  - stm
  - 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 >=3
  - network-bsd
  - unliftio
  - unliftio-pool
  - mime-mail
  - hashable
  - aeson-pretty
  - resourcet
  - postgresql-simple
  - word24
  - mmorph
  - serversession
  - serversession-backend-acid-state
  - acid-state
  - monad-memo
  - xss-sanitize
  - text-metrics
  - pkcs7
  - memcached-binary
  - directory-tree
  - lattices
  - hsass
  - semigroupoids
  - http-types
  - jose-jwt
  - mono-traversable
  - lens-aeson
  - systemd
  - streaming-commons
  - unix
  - stm-delay
  - cassava
  - cassava-conduit
  - constraints
  - memory
  - pqueue
  - deepseq
  - multiset
  - retry
  - generic-lens
  - array
  - cookie
  - prometheus-client
  - prometheus-metrics-ghc
  - wai-middleware-prometheus
  - extended-reals
  - rfc5051
  - unidecode
  - pandoc
  - token-bucket
  - async
  - pointedlist
  - clock
  - HsYAML
  - HsYAML-aeson
  - minio-hs
  - network-ip
  - data-textual
  - fastcdc

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
  - DeriveFoldable
  - DeriveTraversable
  - DeriveAnyClass
  - DerivingStrategies
  - DerivingVia
  - GeneralizedNewtypeDeriving
  - DataKinds
  - BinaryLiterals
  - PolyKinds
  - PackageImports
  - TypeApplications
  - RecursiveDo
  - TypeFamilyDependencies
  - QuantifiedConstraints
  - EmptyDataDeriving
  - StandaloneKindSignatures
  - NoStarIsType

ghc-options:
  - -Wall
  - -Wmissing-home-modules
  - -Wredundant-constraints
  - -Widentities
  - -Wincomplete-uni-patterns
  - -fno-warn-type-defaults
  - -fno-warn-unrecognised-pragmas
  - -fno-warn-partial-type-signatures
  - -fno-max-relevant-binds
  - -j
  - -freduction-depth=0

when:
  - condition: flag(pedantic)
    ghc-options:
      - -Werror
      - -fwarn-tabs
  - condition: flag(dev)
    then:
      ghc-options:
        - -O0
        - -ddump-splices
        - -ddump-to-file
      cpp-options: -DDEVELOPMENT
      ghc-prof-options:
        - -fprof-auto
    else:
      ghc-options:
        - -O -fllvm

# The library contains all of our application code. The executable
# defined below is just a thin wrapper.
library:
  source-dirs: src

# Runnable executable for our application
executables:
  uniworx:
    main: main.hs
    source-dirs: app
    dependencies:
      - uniworx
    when:
      - condition: flag(library-only)
        buildable: false
    ghc-options:
      - -threaded -rtsopts "-with-rtsopts=-N -T" # Nonblocking GC causes segfaults in production as of 2020-08-19
  uniworxdb:
    main: Database.hs
    ghc-options:
      - -main-is Database
      - -threaded -rtsopts "-with-rtsopts=-N -T"
    source-dirs: test
    dependencies:
      - uniworx
    other-modules:
      - Database.Fill
    when:
      - condition: flag(library-only)
        buildable: false
  uniworxload:
    main: Load.hs
    ghc-options:
      - -main-is Load
      - -threaded -rtsopts "-with-rtsopts=-N -T"
    source-dirs: load
    dependencies:
      - uniworx
      - normaldistribution
      - network-uri
      - wreq
      - http-client
      - http-client-tls
      - scalpel
    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
      - yesod-persistent
      - quickcheck-io
    ghc-options:
      - -fno-warn-orphans
      - -threaded -rtsopts "-with-rtsopts=-N -T"
  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
