cabal-version:       2.4
name:                haskus-binary
version:             1.5
synopsis:            Haskus binary format manipulation
license:             BSD-3-Clause
license-file:        LICENSE
author:              Sylvain Henry
maintainer:          sylvain@haskus.fr
homepage:            http://www.haskus.org/system
copyright:           Sylvain Henry 2017
category:            System
build-type:          Simple

description:
   A set of types and tools to manipulate binary data, memory, etc. In
   particular to interface Haskell data types with foreign data types (C
   structs, unions, enums, etc.).

source-repository head
  type: git
  location: git://github.com/haskus/packages.git

library
  exposed-modules:

    Haskus.Binary.Bits
    Haskus.Binary.Bits.Finite
    Haskus.Binary.Bits.Index
    Haskus.Binary.Bits.Bitwise
    Haskus.Binary.Bits.Reverse
    Haskus.Binary.Bits.Rotate
    Haskus.Binary.Bits.Shift
    Haskus.Binary.Bits.Order
    Haskus.Binary.Bits.Get
    Haskus.Binary.Bits.Put
    Haskus.Binary.Bits.Mask
    Haskus.Binary.Bits.Helper

    Haskus.Binary.BitSet
    Haskus.Binary.BitField
    Haskus.Binary.Buffer
    Haskus.Binary.BufferList
    Haskus.Binary.BufferBuilder
    Haskus.Binary.Char
    Haskus.Binary.Enum
    Haskus.Binary.Endianness
    Haskus.Binary.Get
    Haskus.Binary.Put
    Haskus.Binary.Vector
    Haskus.Binary.Union
    Haskus.Binary.Unum
    Haskus.Binary.Record
    Haskus.Binary.Storable
    Haskus.Binary.Serialize
    Haskus.Binary.Serialize.Size
    Haskus.Binary.Serialize.Put
    Haskus.Binary.Serialize.Get
    Haskus.Binary.Serialize.Buffer
    Haskus.Binary.Serialize.File
    Haskus.Binary.CTypes

    Haskus.Number
    Haskus.Number.Word
    Haskus.Number.Int
    Haskus.Number.Float
    Haskus.Number.VariableLength
    Haskus.Number.Posit
    Haskus.Number.FixedPoint
    Haskus.Number.BitNat
    Haskus.Number.Signed
    Haskus.Number.SignedSafe
    Haskus.Number.NaturalRange

    Haskus.Memory.Utils
    Haskus.Memory.Buffer
    Haskus.Memory.Allocator.Malloc
    Haskus.Memory.Embed
    Haskus.Memory.Layout
    Haskus.Memory.View
    Haskus.Memory.Ptr
    Haskus.Memory.Property
    Haskus.Memory.Typed

  other-modules:

  build-depends:       
         base                      >= 4.9 && <5.0
      ,  ghc-prim
      ,  haskus-utils-types        >= 1.4.1
      ,  haskus-utils-data         >= 1.1
      ,  haskus-utils              >= 1.4
      ,  cereal                    >= 0.5
      ,  bytestring                >= 0.10
      ,  mtl                       >= 2.2
      ,  megaparsec
      ,  template-haskell
      ,  transformers
      ,  directory
      ,  filepath

  ghc-options:          -Wall -Wno-unticked-promoted-constructors
  default-language:     Haskell2010
  hs-source-dirs:       src/lib

test-suite tests
   type:                exitcode-stdio-1.0
   main-is:             Main.hs
   hs-source-dirs:      src/tests/
   ghc-options:         -Wall -threaded
   default-language:    Haskell2010
   other-modules:
         Haskus.Tests.Format.Binary
      ,  Haskus.Tests.Common
      ,  Haskus.Tests.Format.Binary.Bits
      ,  Haskus.Tests.Format.Binary.GetPut
      ,  Haskus.Tests.Format.Binary.Vector

   build-depends:    
         base
      ,  haskus-binary
      ,  haskus-utils
      ,  haskus-utils-data
      ,  tasty                   >= 0.11
      ,  tasty-quickcheck        >= 0.8
      ,  QuickCheck              >= 2.8
      ,  bytestring
      ,  doctest

Benchmark bench-BitReverse
   type:               exitcode-stdio-1.0
   main-is:            BitReverse.hs
   hs-source-dirs:     src/bench
   ghc-options:         -Wall -threaded
   default-language:     Haskell2010
   build-depends:
         base
      ,  haskus-binary
      ,  criterion