Name:                acid-state
Version:             0.16.1.1
Synopsis:            Add ACID guarantees to any serializable Haskell data structure.
Description:         Use regular Haskell data structures as your database and get stronger ACID guarantees than most RDBMS offer.
Homepage:            https://github.com/acid-state/acid-state
License:             PublicDomain
Author:              David Himmelstrup
Maintainer:          Lemmih <lemmih@gmail.com>
-- Copyright:
Category:            Database
Build-type:          Simple
Cabal-version:       >=1.10

tested-with:
  GHC == 9.2.3
  GHC == 9.0.2
  GHC == 8.10.7
  GHC == 8.8.4
  GHC == 8.6.5
  GHC == 8.4.4
  GHC == 8.2.2
  GHC == 8.0.2
  GHC == 7.10.3
  GHC == 7.8.4

Extra-source-files:
        CHANGELOG.md
        test-state/OldStateTest1/*.log
        test-state/OldStateTest1/*.version
        test-state/OldStateTest2/*.log
        test-state/OldStateTest2/*.version
        test-state/OldStateTest3/*.log
        test-state/OldStateTest3/*.version

Source-repository head
  type:          git
  location:      https://github.com/acid-state/acid-state

flag skip-state-machine-test
  description: If enabled, do not build/run the state-machine test
  default: False
  manual: False

Library
  Exposed-Modules:     Data.Acid,
                       Data.Acid.Archive,
                       Data.Acid.Common,
                       Data.Acid.Local, Data.Acid.Memory,
                       Data.Acid.Memory.Pure, Data.Acid.Remote,
                       Data.Acid.Advanced,
                       Data.Acid.Log, Data.Acid.CRC,
                       Data.Acid.Abstract, Data.Acid.Core,
                       Data.Acid.TemplateHaskell
                       Data.Acid.Repair

  Other-modules:       Paths_acid_state,
                       FileIO

  Build-depends:       array,
                       base >= 4.7 && < 5,
                       bytestring >= 0.10.2,
                       cereal >= 0.4.1.0,
                       containers,
                       safecopy >= 0.6 && < 0.11,
                       stm >= 2.4,
                       directory,
                       filelock,
                       filepath,
                       mtl,
                       network < 3.2,
                       network-bsd,
                       template-haskell < 2.19,
                       th-expand-syns

  if os(windows)
     Build-depends:       Win32
  else
     Build-depends:       unix

  Hs-Source-Dirs:      src/

  if os(windows)
     Hs-Source-Dirs:   src-win32/
  else
     Hs-Source-Dirs:   src-unix/

  default-language:    Haskell2010
  GHC-Options:         -Wall
                       -fno-warn-dodgy-imports
                       -fno-warn-missing-signatures
                       -fno-warn-name-shadowing
                       -fno-warn-unused-do-bind
                       -fno-warn-unused-matches
  if impl(ghc >= 8.0)
    ghc-options:       -Wcompat

executable acid-state-repair
  hs-source-dirs: repair
  build-depends: acid-state
               , base
               , directory
  main-is: Main.hs
  default-language:    Haskell2010


test-suite specs
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Spec.hs
  build-depends:       base
                     , acid-state
                     , deepseq
                     , hspec
                     , hspec-discover
                     , mtl
                     , safecopy
                     , template-haskell
  build-tool-depends: hspec-discover:hspec-discover
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  other-modules:       Data.Acid.TemplateHaskellSpec
  default-language:    Haskell2010

test-suite state-machine
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             StateMachine.hs
  build-depends:       base
                     , acid-state
                     , containers
                     , deepseq >= 1.4.0.0
                     , directory
                     , hedgehog
                     , mtl
                     , safecopy
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
  other-modules:       Data.Acid.KeyValueStateMachine
                       Data.Acid.StateMachineTest
  default-language:    Haskell2010

  if flag(skip-state-machine-test)
    buildable: False

test-suite examples
  type:                exitcode-stdio-1.0
  hs-source-dirs:      examples
                       examples/errors
  main-is:             Examples.hs
  build-depends:       base
                     , acid-state
                     , cereal
                     , containers
                     , directory
                     , mtl
                     , network
                     , safecopy
                     , text
                     , time
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  other-modules:       ChangeState
                       ChangeVersion
                       CheckpointCutsEvent
                       Exceptions
                       HelloDatabase
                       HelloWorld
                       HelloWorldNoTH
                       KeyValue
                       KeyValueNoTH
                       MonadStateConstraint
                       ParameterisedState
                       RemoteClient
                       RemoteCommon
                       RemoteServer
                       RemoveEvent
                       SlowCheckpoint
                       StressTest
                       StressTestNoTH
  if !os(windows)
     other-modules:    Proxy
  default-language:    Haskell2010

benchmark loading-benchmark
  type:
    exitcode-stdio-1.0
  hs-source-dirs:
    benchmarks/loading
  main-is:
    Benchmark.hs
  other-modules:
    Benchmark.FileSystem
    Benchmark.Model
    Benchmark.Prelude
  build-depends:
    random,
    directory,
    system-fileio == 0.3.*,
    system-filepath,
    -- perRunEnv was added in criterion-1.2.0.0
    criterion >= 1.2.0.0 && < 1.6,
    mtl,
    base,
    acid-state
  default-language:
    Haskell2010
  default-extensions:
    PatternGuards
    GADTs
    StandaloneDeriving
    MultiParamTypeClasses
    ScopedTypeVariables
    FlexibleInstances
    TypeFamilies
    TypeOperators
    FlexibleContexts
    NoImplicitPrelude
    EmptyDataDecls
    DataKinds
    NoMonomorphismRestriction
    RankNTypes
    ConstraintKinds
    DefaultSignatures
    TupleSections
    TemplateHaskell
    OverloadedStrings
    DeriveDataTypeable
  ghc-options:
    -O2
