packages feed

aeson-1.4.2.0: benchmarks/aeson-benchmarks.cabal

name:                aeson-benchmarks
version:             0
build-type:          Simple
cabal-version:       >=1.10

flag bytestring-builder
  description: Depend on the bytestring-builder package for backwards compatibility.
  default: False
  manual: False

flag local-aeson
  description: Build the local version of aeson, to avoid rebuilding aeson's
    reverse dependencies for benchmarking (statistics, criterion).
  default: True
  manual: True

library
  default-language: Haskell2010

  if flag(bytestring-builder)
    build-depends: bytestring >= 0.9 && < 0.10.4,
                   bytestring-builder >= 0.10.4 && < 1
  else
    build-depends: bytestring >= 0.10.4

  if flag(local-aeson)

    hs-source-dirs: .. ../ffi ../pure ../attoparsec-iso8601
    c-sources:  ../cbits/unescape_string.c
    build-depends:
      attoparsec >= 0.13.0.1,
      base == 4.*,
      base-compat >= 0.9.1 && <0.11,
      time-locale-compat >=0.1.1 && <0.2,
      containers,
      deepseq,
      dlist >= 0.2,
      fail == 4.9.*,
      ghc-prim >= 0.2,
      hashable >= 1.1.2.0,
      mtl,
      primitive >= 0.6.1,
      scientific >= 0.3.4.7 && < 0.4,
      syb,
      tagged >=0.8.3 && <0.9,
      template-haskell >= 2.4,
      text >= 1.2.3,
      th-abstraction >= 0.2.2 && < 0.3,
      time,
      transformers,
      unordered-containers >= 0.2.3.0,
      uuid-types >= 1.0.3 && <1.1,
      vector >= 0.7.1

    if !impl(ghc >= 7.10)
      -- `Numeric.Natural` is available in base only since GHC 7.10 / base 4.8
      build-depends: nats >= 1 && < 1.2

    if impl(ghc >=7.8)
      cpp-options: -DHAS_COERCIBLE

    if !impl(ghc >= 8.0)
      -- `Data.Semigroup` is available in base only since GHC 8.0 / base 4.9
      build-depends: semigroups >= 0.18.2 && < 0.19

    if !impl(ghc >= 8.6)
      build-depends:
       contravariant >=1.4.1    && <1.6

    include-dirs: ../include

    ghc-options: -O2 -Wall
    cpp-options: -DGENERICS

    exposed-modules:
      Data.Aeson
      Data.Aeson.Compat
      Data.Aeson.Encoding
      Data.Aeson.Encoding.Builder
      Data.Aeson.Encoding.Internal
      Data.Aeson.Internal
      Data.Aeson.Internal.Functions
      Data.Aeson.Internal.Time
      Data.Aeson.Parser
      Data.Aeson.Parser.Internal
      Data.Aeson.Parser.Time
      Data.Aeson.Parser.Unescape
      Data.Aeson.Parser.UnescapeFFI
      Data.Aeson.Parser.UnescapePure
      Data.Aeson.TH
      Data.Aeson.Text
      Data.Aeson.Types
      Data.Aeson.Types.Class
      Data.Aeson.Types.FromJSON
      Data.Aeson.Types.Generic
      Data.Aeson.Types.Internal
      Data.Aeson.Types.ToJSON
      Data.Attoparsec.Time
      Data.Attoparsec.Time.Internal

  else

    build-depends: aeson

    reexported-modules:
      Data.Aeson,
      Data.Aeson.Encoding,
      Data.Aeson.Parser.Internal,
      Data.Aeson.Text,
      Data.Aeson.TH,
      Data.Aeson.Types

executable aeson-benchmark-auto-compare
  default-language: Haskell2010
  main-is: AutoCompare.hs
  hs-source-dirs: .
  ghc-options: -Wall -O2 -rtsopts
  other-modules:
    Auto.T.D
    Auto.T.BigRecord
    Auto.T.BigProduct
    Auto.T.BigSum
    Auto.G.D
    Auto.G.BigRecord
    Auto.G.BigProduct
    Auto.G.BigSum
    Options
  build-depends:
    aeson-benchmarks,
    base,
    criterion,
    deepseq,
    template-haskell

executable aeson-benchmark-escape
  default-language: Haskell2010
  main-is: Escape.hs
  hs-source-dirs: ../examples .
  ghc-options: -Wall -O2 -rtsopts
  if flag(local-aeson)
    build-depends:
      aeson-benchmarks,
      base,
      base-compat,
      bytestring,
      criterion >= 1.0,
      deepseq,
      ghc-prim,
      text
  else
    -- Disabled because of inaccessible internals
    buildable: False

executable aeson-benchmark-compare
  default-language: Haskell2010
  main-is: Compare.hs
  hs-source-dirs: ../examples .
  ghc-options: -Wall -O2 -rtsopts
  other-modules:
    Compare.BufferBuilder
    Compare.JsonBench
    Twitter
    Twitter.Manual
    Typed.Common
  build-depends:
    aeson-benchmarks,
    base,
    base-compat,
    buffer-builder,
    bytestring,
    criterion >= 1.0,
    deepseq,
    ghc-prim,
    text

 if impl(ghc < 8.4)
   other-modules:
     Compare.JsonBuilder
   build-depends:
     json-builder

executable aeson-benchmark-micro
  default-language: Haskell2010
  main-is: Micro.hs
  hs-source-dirs: ../examples .
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    aeson-benchmarks,
    base,
    base-compat,
    bytestring,
    criterion >= 1.0,
    deepseq,
    ghc-prim,
    text

executable aeson-benchmark-typed
  default-language: Haskell2010
  main-is: Typed.hs
  hs-source-dirs: ../examples .
  ghc-options: -Wall -O2 -rtsopts
  other-modules:
    Twitter
    Twitter.Generic
    Twitter.Manual
    Twitter.Options
    Twitter.TH
    Typed.Common
    Typed.Generic
    Typed.Manual
    Typed.TH
  build-depends:
    aeson-benchmarks,
    base,
    base-compat,
    criterion >= 1.0,
    deepseq,
    ghc-prim,
    text,
    time

  if flag(bytestring-builder)
    build-depends: bytestring >= 0.9 && < 0.10.4,
                   bytestring-builder >= 0.10.4 && < 1
  else
    build-depends: bytestring >= 0.10.4

executable aeson-benchmark-compare-with-json
  default-language: Haskell2010
  main-is: CompareWithJSON.hs
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    aeson-benchmarks,
    base,
    base-compat,
    blaze-builder,
    bytestring,
    criterion,
    deepseq,
    json,
    text

executable aeson-benchmark-aeson-encode
  default-language: Haskell2010
  main-is: AesonEncode.hs
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    aeson-benchmarks,
    attoparsec,
    base,
    base-compat,
    bytestring,
    deepseq,
    time

executable aeson-benchmark-aeson-parse
  default-language: Haskell2010
  main-is: AesonParse.hs
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    aeson-benchmarks,
    attoparsec,
    base,
    base-compat,
    bytestring,
    time

executable aeson-benchmark-json-parse
  default-language: Haskell2010
  main-is: JsonParse.hs
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    base,
    base-compat,
    deepseq,
    json,
    time

executable aeson-benchmark-dates
  default-language: Haskell2010
  main-is: Dates.hs
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    base,
    base-compat,
    bytestring,
    criterion,
    deepseq,
    aeson-benchmarks,
    text,
    time
  if impl(ghc >= 8.2)
    ghc-options: -Wno-simplifiable-class-constraints

executable aeson-benchmark-map
  default-language: Haskell2010
  main-is: AesonMap.hs
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    aeson-benchmarks,
    base,
    base-compat,
    criterion >= 1.0,
    bytestring,
    containers,
    deepseq,
    hashable,
    tagged,
    text,
    unordered-containers

executable aeson-benchmark-foldable
  default-language: Haskell2010
  main-is: AesonFoldable.hs
  ghc-options: -Wall -O2 -rtsopts
  build-depends:
    aeson-benchmarks,
    base,
    base-compat,
    criterion >= 1.0,
    bytestring,
    containers,
    deepseq,
    hashable,
    tagged,
    text,
    unordered-containers,
    vector

executable aeson-issue-673
  default-language: Haskell2010
  main-is: Issue673.hs
  ghc-options: -Wall -O1 -rtsopts
  build-depends:
    aeson-benchmarks,
    attoparsec,
    base,
    bytestring,
    scientific,
    base-compat,
    criterion >= 1.0