File hashable.cabal of Package ghc-hashable

cabal-version:      2.2
name:               hashable
version:            1.5.0.0
x-revision:         1
synopsis:           A class for types that can be converted to a hash value
description:
  This package defines a class, 'Hashable', for types that can be converted to a hash value.
  This class exists for the benefit of hashing-based data structures.
  The package provides instances for basic types and a way to combine hash values.
  .
  'Hashable' is intended exclusively for use in in-memory data structures.
  .
  'Hashable' does /not/ have a fixed standard.
  This allows it to improve over time.
  .
  Because it does not have a fixed standard, different computers or computers on different versions of the code will observe different hash values.
  As such, 'hashable' is not recommended for use other than in-memory datastructures.
  Specifically, 'hashable' is not intended for network use or in applications which persist hashed values.
  For stable hashing use named hashes: sha256, crc32, xxhash etc.

homepage:           http://github.com/haskell-unordered-containers/hashable
license:            BSD-3-Clause
license-file:       LICENSE
author:
  Milan Straka <fox@ucw.cz>
  Johan Tibell <johan.tibell@gmail.com>

maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>
bug-reports:
  https://github.com/haskell-unordered-containers/hashable/issues

stability:          Provisional
category:           Data
build-type:         Simple
tested-with:
  GHC ==9.6.5 || ==9.8.2 || ==9.8.3 || ==9.10.1 || ==9.12.1

extra-source-files:
  CHANGES.md
  include/HsHashable.h
  include/HsXXHash.h
  README.md
  xxHash-0.8.2/xxhash.h

flag arch-native
  description:
    Use @-march=native@ when compiling C sources.
    Portable implementation is 15-50% slower.
    Consider enabling this flag if hashing performance is important.

  manual:      True
  default:     False

flag random-initial-seed
  description:
    Randomly initialize the initial seed on each final executable invocation
    This is useful for catching cases when you rely on (non-existent)
    stability of hashable's hash functions.
    This is not a security feature.

  manual:      True
  default:     False

library
  exposed-modules:
    Data.Hashable
    Data.Hashable.Generic
    Data.Hashable.Lifted

  other-modules:
    Data.Hashable.Class
    Data.Hashable.FFI
    Data.Hashable.Generic.Instances
    Data.Hashable.Imports
    Data.Hashable.LowLevel
    Data.Hashable.Mix
    Data.Hashable.XXH3

  include-dirs:     include xxHash-0.8.2
  includes:
    HsHashable.h
    HsXXHash.h
    xxhash.h

  hs-source-dirs:   src
  build-depends:
    , base        >=4.18.0.0 && <4.22
    , bytestring  >=0.11.5.3 && <0.13
    , containers  >=0.6.7    && <0.8
    , deepseq     >=1.4.8.1  && <1.6
    , ghc-prim
    , text        >=2.0.2    && <2.2

  -- depend on os-string on newer GHCs only.
  -- os-string has tight lower bound on bytestring, which prevents
  -- using bundled version on older GHCs.
  build-depends:    os-string >=2.0.2 && <2.1

  -- we also ensure that we can get filepath-1.5 only with GHC-9.2
  -- therefore there is else-branch with stricter upper bound.
  build-depends:    filepath >=1.4.200.1 && <1.6

  -- Integer internals
  build-depends:    ghc-bignum >=1.3 && <1.4

  if (flag(random-initial-seed) && impl(ghc))
    cpp-options: -DHASHABLE_RANDOM_SEED=1

    if os(windows)
      c-sources: cbits-win/init.c

    else
      c-sources: cbits-unix/init.c

  default-language: Haskell2010
  other-extensions:
    BangPatterns
    CPP
    DeriveDataTypeable
    FlexibleContexts
    FlexibleInstances
    GADTs
    KindSignatures
    MagicHash
    MultiParamTypeClasses
    QuantifiedConstraints
    ScopedTypeVariables
    Trustworthy
    TypeOperators
    UnliftedFFITypes

  ghc-options:      -Wall

  if flag(arch-native)
    -- Cabal doesn't pass cc-options to "ordinary" Haskell source compilation
    -- https://github.com/haskell/cabal/issues/9801
    ghc-options: -optc=-march=native -optc-mtune=native

  if impl(ghc >=9.0)
    -- these flags may abort compilation with GHC-8.10
    -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3295
    ghc-options: -Winferred-safe-imports -Wmissing-safe-haskell-mode

test-suite hashable-tests
  type:             exitcode-stdio-1.0
  hs-source-dirs:   tests
  main-is:          Main.hs
  other-modules:
    Properties
    Regress

  build-depends:
    , base
    , bytestring
    , filepath
    , ghc-prim
    , hashable
    , HUnit
    , QuickCheck        >=2.15
    , random            >=1.0      && <1.3
    , tasty             ^>=1.5
    , tasty-hunit       ^>=0.10.1
    , tasty-quickcheck  ^>=0.10.3  || ^>=0.11
    , text              >=0.11.0.5

  if impl(ghc >=9.2)
    build-depends: os-string

  if !os(windows)
    build-depends:    unix
    cpp-options:      -DHAVE_MMAP
    other-modules:    Regress.Mmap
    other-extensions: CApiFFI

  ghc-options:      -Wall -fno-warn-orphans
  default-language: Haskell2010

test-suite xxhash-tests
  type:             exitcode-stdio-1.0
  hs-source-dirs:   tests src
  main-is:          xxhash-tests.hs
  other-modules:
    Data.Hashable.FFI
    Data.Hashable.XXH3

  default-language: Haskell2010
  build-depends:
    , base              <5
    , bytestring
    , primitive         ^>=0.9.0.0
    , tasty             ^>=1.5
    , tasty-hunit       ^>=0.10.1
    , tasty-quickcheck  ^>=0.10.3  || ^>=0.11

  include-dirs:     include xxHash-0.8.2
  includes:
    HsXXHash.h
    xxhash.h

  if !impl(ghc >=9.4)
    build-depends: data-array-byte >=0.1.0.1 && <0.2

test-suite hashable-examples
  type:             exitcode-stdio-1.0
  build-depends:
    , base
    , ghc-prim
    , hashable

  hs-source-dirs:   examples
  main-is:          Main.hs
  default-language: Haskell2010

source-repository head
  type:     git
  location:
    https://github.com/haskell-unordered-containers/hashable.git
openSUSE Build Service is sponsored by