cabal-version: 1.12

name:           simplexmq
version:        6.5.0.14
synopsis:       SimpleXMQ message broker
description:    This package includes <./docs/Simplex-Messaging-Server.html server>,
                <./docs/Simplex-Messaging-Client.html client> and
                <./docs/Simplex-Messaging-Agent.html agent> for SMP protocols:
                .
                * <https://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md SMP protocol>
                * <https://github.com/simplex-chat/simplexmq/blob/master/protocol/agent-protocol.md SMP agent protocol>
                .
                See <https://github.com/simplex-chat/simplex-chat terminal chat prototype> built with SimpleXMQ broker.
category:       Chat, Network, Web, System, Cryptography
homepage:       https://github.com/simplex-chat/simplexmq#readme
author:         simplex.chat
maintainer:     chat@simplex.chat
copyright:      2020-2022 simplex.chat
license:        AGPL-3
license-file:   LICENSE
build-type:     Simple
extra-source-files:
    README.md
    CHANGELOG.md
    cbits/sha512.h
    cbits/sntrup761.h
    apps/common/Web/static/index.html
    apps/common/Web/static/link.html
    apps/common/Web/static/media/apk_icon.png
    apps/common/Web/static/media/apple_store.svg
    apps/common/Web/static/media/contact.js
    apps/common/Web/static/media/contact_page_mobile.png
    apps/common/Web/static/media/f_droid.svg
    apps/common/Web/static/media/favicon.ico
    apps/common/Web/static/media/GilroyBold.woff2
    apps/common/Web/static/media/GilroyLight.woff2
    apps/common/Web/static/media/GilroyMedium.woff2
    apps/common/Web/static/media/GilroyRegular.woff2
    apps/common/Web/static/media/GilroyRegularItalic.woff2
    apps/common/Web/static/media/google_play.svg
    apps/common/Web/static/media/logo-dark.png
    apps/common/Web/static/media/logo-light.png
    apps/common/Web/static/media/logo-symbol-dark.svg
    apps/common/Web/static/media/logo-symbol-light.svg
    apps/common/Web/static/media/moon.svg
    apps/common/Web/static/media/qrcode.js
    apps/common/Web/static/media/script.js
    apps/common/Web/static/media/style.css
    apps/common/Web/static/media/sun.svg
    apps/common/Web/static/media/swiper-bundle.min.css
    apps/common/Web/static/media/swiper-bundle.min.js
    apps/common/Web/static/media/tailwind.css
    apps/common/Web/static/media/testflight.png
    apps/xftp-server/static/media/xftp-protocol.svg
    apps/xftp-server/static/media/xftp-protocol-dark.svg
    apps/xftp-server/static/xftp-web-bundle/crypto.worker.js
    apps/xftp-server/static/xftp-web-bundle/index.css
    apps/xftp-server/static/xftp-web-bundle/index.js

flag swift
  description: Enable swift JSON format
  manual: True
  default: False

flag use_crypton
  description: Use crypton etc. in cryptostore
  manual: True
  default: True

flag client_library
  description: Don't build server-related code.
  manual: True
  default: False

flag client_postgres
  description: Build with PostgreSQL instead of SQLite.
  manual: True
  default: False

flag server_postgres
  description: Build server with support of PostgreSQL.
  manual: True
  default: False

library
  exposed-modules:
      Simplex.FileTransfer.Agent
      Simplex.FileTransfer.Chunks
      Simplex.FileTransfer.Client
      Simplex.FileTransfer.Client.Agent
      Simplex.FileTransfer.Client.Presets
      Simplex.FileTransfer.Crypto
      Simplex.FileTransfer.Description
      Simplex.FileTransfer.Protocol
      Simplex.FileTransfer.Transport
      Simplex.FileTransfer.Types
      Simplex.FileTransfer.Util
      Simplex.Messaging.Agent
      Simplex.Messaging.Agent.Client
      Simplex.Messaging.Agent.Env.SQLite
      Simplex.Messaging.Agent.Lock
      Simplex.Messaging.Agent.NtfSubSupervisor
      Simplex.Messaging.Agent.Protocol
      Simplex.Messaging.Agent.QueryString
      Simplex.Messaging.Agent.RetryInterval
      Simplex.Messaging.Agent.Stats
      Simplex.Messaging.Agent.Store
      Simplex.Messaging.Agent.Store.AgentStore
      Simplex.Messaging.Agent.Store.Common
      Simplex.Messaging.Agent.Store.DB
      Simplex.Messaging.Agent.Store.Entity
      Simplex.Messaging.Agent.Store.Interface
      Simplex.Messaging.Agent.Store.Migrations
      Simplex.Messaging.Agent.Store.Migrations.App
      Simplex.Messaging.Agent.Store.Postgres.Options
      Simplex.Messaging.Agent.Store.Shared
      Simplex.Messaging.Agent.TSessionSubs
      Simplex.Messaging.Client
      Simplex.Messaging.Client.Agent
      Simplex.Messaging.Compression
      Simplex.Messaging.Crypto
      Simplex.Messaging.Crypto.File
      Simplex.Messaging.Crypto.Lazy
      Simplex.Messaging.Crypto.Ratchet
      Simplex.Messaging.Crypto.SNTRUP761
      Simplex.Messaging.Crypto.SNTRUP761.Bindings
      Simplex.Messaging.Crypto.SNTRUP761.Bindings.Defines
      Simplex.Messaging.Crypto.SNTRUP761.Bindings.FFI
      Simplex.Messaging.Crypto.SNTRUP761.Bindings.RNG
      Simplex.Messaging.Crypto.ShortLink
      Simplex.Messaging.Encoding
      Simplex.Messaging.Encoding.String
      Simplex.Messaging.Notifications.Client
      Simplex.Messaging.Notifications.Protocol
      Simplex.Messaging.Notifications.Transport
      Simplex.Messaging.Notifications.Types
      Simplex.Messaging.Parsers
      Simplex.Messaging.Protocol
      Simplex.Messaging.Protocol.Types
      Simplex.Messaging.Server.Expiration
      Simplex.Messaging.Server.QueueStore.Postgres.Config
      Simplex.Messaging.Server.QueueStore.QueueInfo
      Simplex.Messaging.ServiceScheme
      Simplex.Messaging.Session
      Simplex.Messaging.SystemTime
      Simplex.Messaging.TMap
      Simplex.Messaging.Transport
      Simplex.Messaging.Transport.Buffer
      Simplex.Messaging.Transport.Client
      Simplex.Messaging.Transport.Credentials
      Simplex.Messaging.Transport.HTTP2
      Simplex.Messaging.Transport.HTTP2.Client
      Simplex.Messaging.Transport.HTTP2.File
      Simplex.Messaging.Transport.HTTP2.Server
      Simplex.Messaging.Transport.KeepAlive
      Simplex.Messaging.Transport.Server
      Simplex.Messaging.Transport.Shared
      Simplex.Messaging.Util
      Simplex.Messaging.Version
      Simplex.Messaging.Version.Internal
      Simplex.RemoteControl.Client
      Simplex.RemoteControl.Discovery
      Simplex.RemoteControl.Discovery.Multicast
      Simplex.RemoteControl.Invitation
      Simplex.RemoteControl.Types
  if flag(client_postgres)
      exposed-modules:
          Simplex.Messaging.Agent.Store.Postgres.Migrations.App
          Simplex.Messaging.Agent.Store.Postgres.Migrations.M20241210_initial
          Simplex.Messaging.Agent.Store.Postgres.Migrations.M20250203_msg_bodies
          Simplex.Messaging.Agent.Store.Postgres.Migrations.M20250322_short_links
          Simplex.Messaging.Agent.Store.Postgres.Migrations.M20250702_conn_invitations_remove_cascade_delete
          Simplex.Messaging.Agent.Store.Postgres.Migrations.M20251009_queue_to_subscribe
          Simplex.Messaging.Agent.Store.Postgres.Migrations.M20251010_client_notices
          Simplex.Messaging.Agent.Store.Postgres.Migrations.M20251230_strict_tables
  else
      exposed-modules:
          Simplex.Messaging.Agent.Store.SQLite
          Simplex.Messaging.Agent.Store.SQLite.Common
          Simplex.Messaging.Agent.Store.SQLite.DB
          Simplex.Messaging.Agent.Store.SQLite.Migrations
          Simplex.Messaging.Agent.Store.SQLite.Migrations.App
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220101_initial
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220301_snd_queue_keys
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220322_notifications
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220608_v2
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220625_v2_ntf_mode
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220811_onion_hosts
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220817_connection_ntfs
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220905_commands
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220915_connection_queues
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230110_users
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230117_fkey_indexes
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230120_delete_errors
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230217_server_key_hash
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230223_files
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230320_retry_state
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230401_snd_files
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230510_files_pending_replicas_indexes
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230516_encrypted_rcv_message_hashes
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230531_switch_status
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230615_ratchet_sync
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230701_delivery_receipts
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230720_delete_expired_messages
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230722_indexes
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230814_indexes
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20230829_crypto_files
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20231222_command_created_at
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20231225_failed_work_items
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240121_message_delivery_indexes
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240124_file_redirect
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240223_connections_wait_delivery
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240225_ratchet_kem
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240417_rcv_files_approved_relays
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240624_snd_secure
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240702_servers_stats
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20240930_ntf_tokens_to_delete
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20241007_rcv_queues_last_broker_ts
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20241224_ratchet_e2e_snd_params
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20250203_msg_bodies
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20250322_short_links
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20250702_conn_invitations_remove_cascade_delete
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20251009_queue_to_subscribe
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20251010_client_notices
          Simplex.Messaging.Agent.Store.SQLite.Migrations.M20251230_strict_tables
          Simplex.Messaging.Agent.Store.SQLite.Util
  if flag(client_postgres) || flag(server_postgres)
      exposed-modules:
          Simplex.Messaging.Agent.Store.Postgres
          Simplex.Messaging.Agent.Store.Postgres.Common
          Simplex.Messaging.Agent.Store.Postgres.DB
          Simplex.Messaging.Agent.Store.Postgres.Migrations
          Simplex.Messaging.Agent.Store.Postgres.Util
  if !flag(client_library)
      exposed-modules:
          Simplex.FileTransfer.Client.Main
          Simplex.FileTransfer.Server
          Simplex.FileTransfer.Server.Control
          Simplex.FileTransfer.Server.Env
          Simplex.FileTransfer.Server.Main
          Simplex.FileTransfer.Server.Prometheus
          Simplex.FileTransfer.Server.Stats
          Simplex.FileTransfer.Server.Store
          Simplex.FileTransfer.Server.StoreLog
          Simplex.Messaging.Server
          Simplex.Messaging.Server.CLI
          Simplex.Messaging.Server.Control
          Simplex.Messaging.Server.Env.STM
          Simplex.Messaging.Server.Information
          Simplex.Messaging.Server.Main
          Simplex.Messaging.Server.Main.GitCommit
          Simplex.Messaging.Server.Main.Init
          Simplex.Messaging.Server.Web
          Simplex.Messaging.Server.MsgStore
          Simplex.Messaging.Server.MsgStore.Journal
          Simplex.Messaging.Server.MsgStore.Journal.SharedLock
          Simplex.Messaging.Server.MsgStore.STM
          Simplex.Messaging.Server.MsgStore.Types
          Simplex.Messaging.Server.NtfStore
          Simplex.Messaging.Server.Prometheus
          Simplex.Messaging.Server.QueueStore
          Simplex.Messaging.Server.QueueStore.STM
          Simplex.Messaging.Server.QueueStore.Types
          Simplex.Messaging.Server.Stats
          Simplex.Messaging.Server.StoreLog
          Simplex.Messaging.Server.StoreLog.ReadWrite
          Simplex.Messaging.Server.StoreLog.Types
          Simplex.Messaging.Transport.WebSockets
      if flag(server_postgres)
          exposed-modules:
              Simplex.Messaging.Notifications.Server
              Simplex.Messaging.Notifications.Server.Control
              Simplex.Messaging.Notifications.Server.Env
              Simplex.Messaging.Notifications.Server.Main
              Simplex.Messaging.Notifications.Server.Prometheus
              Simplex.Messaging.Notifications.Server.Push.APNS
              Simplex.Messaging.Notifications.Server.Push.APNS.Internal
              Simplex.Messaging.Notifications.Server.Stats
              Simplex.Messaging.Notifications.Server.Store
              Simplex.Messaging.Notifications.Server.Store.Migrations
              Simplex.Messaging.Notifications.Server.Store.Postgres
              Simplex.Messaging.Notifications.Server.Store.Types
              Simplex.Messaging.Notifications.Server.StoreLog
              Simplex.Messaging.Server.MsgStore.Postgres
              Simplex.Messaging.Server.QueueStore.Postgres
              Simplex.Messaging.Server.QueueStore.Postgres.Migrations
  other-modules:
      Paths_simplexmq
  hs-source-dirs:
      src
  default-extensions:
      StrictData
  ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=incomplete-uni-patterns -Werror=missing-home-modules -Werror=missing-methods -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -O2
  include-dirs:
      cbits
  c-sources:
      cbits/sha512.c
      cbits/sntrup761.c
  extra-libraries:
      crypto
  build-depends:
      aeson ==2.2.*
    , asn1-encoding ==0.9.*
    , asn1-types ==0.3.*
    , async ==2.2.*
    , attoparsec ==0.14.*
    , base >=4.14 && <5
    , base64-bytestring >=1.0 && <1.3
    , composition ==1.0.*
    , constraints >=0.12 && <0.14
    , containers ==0.6.*
    , crypton ==0.34.*
    , crypton-x509 ==1.7.*
    , crypton-x509-store ==1.6.*
    , crypton-x509-validation ==1.6.*
    , cryptostore ==0.3.*
    , data-default ==0.7.*
    , directory ==1.3.*
    , filepath ==1.4.*
    , hourglass ==0.2.*
    , http-types ==0.12.*
    , http2 >=4.2.2 && <4.3
    , iproute ==1.7.*
    , iso8601-time ==0.1.*
    , memory ==0.18.*
    , mtl >=2.3.1 && <3.0
    , network >=3.1.2.7 && <3.2
    , network-info ==0.2.*
    , network-transport ==0.5.6
    , network-udp ==0.0.*
    , random >=1.1 && <1.3
    , scientific ==0.3.7.*
    , simple-logger ==0.1.*
    , socks ==0.6.*
    , stm ==2.5.*
    , time ==1.12.*
    , time-manager ==0.0.*
    , tls >=1.9.0 && <1.10
    , transformers ==0.6.*
    , unliftio ==0.2.*
    , unliftio-core ==0.2.*
    , yaml ==0.11.*
    , zstd ==0.1.3.*
  default-language: Haskell2010
  if flag(swift)
    cpp-options: -DswiftJSON
  if !flag(client_library)
    build-depends:
        case-insensitive ==1.2.*
      , hashable ==1.4.*
      , ini ==0.4.1
      , optparse-applicative >=0.15 && <0.17
      , process ==1.6.*
      , temporary ==1.3.*
      , wai >=3.2 && <3.3
      , wai-app-static >=3.1 && <3.2
      , warp ==3.3.30
      , warp-tls ==3.4.7
      , websockets ==0.12.*
      , zlib >=0.6 && <0.8
  if flag(client_postgres) || flag(server_postgres)
    build-depends:
        postgresql-libpq >=0.10.0.0
      , postgresql-simple ==0.7.*
      , raw-strings-qq ==1.1.*
  if flag(client_postgres)
    cpp-options: -DdbPostgres
  else
    build-depends:
        direct-sqlcipher ==2.3.*
      , sqlcipher-simple ==0.4.*
  if flag(server_postgres)
    cpp-options: -DdbServerPostgres
    build-depends:
        hex-text ==0.1.*
  if impl(ghc >= 9.6.2)
    build-depends:
        bytestring ==0.11.*
      , template-haskell ==2.20.*
      , text >=2.0.1 && <2.2
  if impl(ghc < 9.6.2)
    build-depends:
        bytestring ==0.10.*
      , template-haskell ==2.16.*
      , text >=1.2.3.0 && <1.3

executable ntf-server
  if flag(client_library)
      buildable: False
  if flag(server_postgres)
    cpp-options: -DdbServerPostgres
  else
    buildable: False
  main-is: Main.hs
  other-modules:
      Paths_simplexmq
  hs-source-dirs:
      apps/ntf-server
  default-extensions:
      StrictData
  ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=incomplete-uni-patterns -Werror=missing-methods -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -O2 -threaded -rtsopts
  build-depends:
      base
    , simple-logger
    , simplexmq
  default-language: Haskell2010

executable smp-server
  if flag(client_library)
      buildable: False
  if flag(server_postgres)
    cpp-options: -DdbServerPostgres
  main-is: Main.hs
  other-modules:
      SMPWeb
      Web.Embedded
      Paths_simplexmq
  hs-source-dirs:
      apps/smp-server
      apps/common
  default-extensions:
      StrictData
  ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=incomplete-uni-patterns -Werror=missing-methods -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -O2 -threaded -rtsopts
  build-depends:
      base
    , bytestring
    , file-embed >=0.0.10 && <0.1
    , simple-logger
    , simplexmq
    , text
  default-language: Haskell2010

executable xftp
  if flag(client_library)
      buildable: False
  main-is: Main.hs
  other-modules:
      Paths_simplexmq
  hs-source-dirs:
      apps/xftp
  default-extensions:
      StrictData
  ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=incomplete-uni-patterns -Werror=missing-methods -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -O2 -threaded -rtsopts
  build-depends:
      base
    , simplexmq
  default-language: Haskell2010

executable xftp-server
  if flag(client_library)
      buildable: False
  main-is: Main.hs
  other-modules:
      XFTPWeb
      Web.Embedded
      Paths_simplexmq
  hs-source-dirs:
      apps/xftp-server
      apps/common
  default-extensions:
      StrictData
  ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=incomplete-uni-patterns -Werror=missing-methods -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -O2 -threaded -rtsopts
  build-depends:
      base
    , bytestring
    , directory
    , file-embed >=0.0.10 && <0.1
    , filepath
    , simple-logger
    , simplexmq
  default-language: Haskell2010

test-suite simplexmq-test
  if flag(client_library)
      buildable: False
  type: exitcode-stdio-1.0
  main-is: Test.hs
  other-modules:
      AgentTests
      AgentTests.ConnectionRequestTests
      AgentTests.DoubleRatchetTests
      AgentTests.EqInstances
      AgentTests.FunctionalAPITests
      AgentTests.MigrationTests
      AgentTests.ServerChoice
      AgentTests.ShortLinkTests
      CLITests
      CoreTests.BatchingTests
      CoreTests.CryptoFileTests
      CoreTests.CryptoTests
      CoreTests.EncodingTests
      CoreTests.MsgStoreTests
      CoreTests.RetryIntervalTests
      CoreTests.SOCKSSettings
      CoreTests.StoreLogTests
      CoreTests.TSessionSubs
      CoreTests.UtilTests
      CoreTests.VersionRangeTests
      FileDescriptionTests
      RemoteControl
      ServerTests
      SMPAgentClient
      SMPClient
      SMPProxyTests
      Util
      XFTPAgent
      XFTPCLI
      XFTPClient
      XFTPServerTests
      WebTests
      XFTPWebTests
      SMPWeb
      XFTPWeb
      Web.Embedded
      Paths_simplexmq
  if flag(client_postgres)
      other-modules:
          Fixtures
  else
      other-modules:
          AgentTests.SchemaDump
          AgentTests.SQLiteTests
  if flag(server_postgres)
      other-modules:
          AgentTests.NotificationTests
          NtfClient
          NtfServerTests
          PostgresSchemaDump
  hs-source-dirs:
      tests
      apps/smp-server
      apps/xftp-server
      apps/common
  default-extensions:
      StrictData
  -- add -fhpc to ghc-options to run tests with coverage
  ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=incomplete-uni-patterns -Werror=missing-methods -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -O2 -threaded -rtsopts -with-rtsopts=-A64M -with-rtsopts=-N1
  build-depends:
      base
    , aeson
    , async
    , base64-bytestring
    , bytestring
    , case-insensitive ==1.2.*
    , containers
    , crypton
    , crypton-x509
    , crypton-x509-store
    , crypton-x509-validation
    , directory
    , file-embed >=0.0.10 && <0.1
    , filepath
    , generic-random ==1.5.*
    , hashable
    , hspec ==2.11.*
    , hspec-core ==2.11.*
    , http-client
    , http-types
    , http2
    , HUnit ==1.6.*
    , ini
    , iso8601-time
    , main-tester ==0.2.*
    , memory
    , mtl
    , network
    , QuickCheck ==2.14.*
    , random
    , silently ==1.2.*
    , simple-logger
    , simplexmq
    , stm
    , text
    , time
    , timeit ==2.0.*
    , transformers
    , unliftio
    , unliftio-core
    , unordered-containers
    , yaml
  default-language: Haskell2010
  if flag(server_postgres)
    cpp-options: -DdbServerPostgres
  if flag(client_postgres)
    cpp-options: -DdbPostgres
  else
    build-depends:
        sqlcipher-simple
  if !flag(client_postgres) || flag(client_postgres) || flag(server_postgres)
    build-depends:
        deepseq ==1.4.*
      , process
  if flag(client_postgres) || flag(server_postgres)
    build-depends:
        postgresql-simple ==0.7.*
