Blob Blame History Raw
cabal-version:      1.12
name:               hashable
version:            1.4.4.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.
  .
  The 'Hashable' 'hash' values are not guaranteed to be stable across library versions, operating systems or architectures. For stable hashing use named hashes: SHA256, CRC32 etc.

homepage:           http://github.com/haskell-unordered-containers/hashable

-- SPDX-License-Identifier : BSD-3-Clause
license:            BSD3
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 ==8.2.2
   || ==8.4.4
   || ==8.6.5
   || ==8.8.3
   || ==8.10.4
   || ==8.10.7
   || ==9.0.1
   || ==9.0.2
   || ==9.2.8
   || ==9.4.8
   || ==9.6.4
   || ==9.8.2
   || ==9.10.1

extra-source-files:
  CHANGES.md
  include/HsHashable.h
  README.md

flag integer-gmp
  description:
    Are we using @integer-gmp@ to provide fast Integer instances? No effect on GHC-9.0 or later.

  manual:      False
  default:     True

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.Generic.Instances
    Data.Hashable.Imports
    Data.Hashable.LowLevel

  c-sources:        cbits/fnv.c
  include-dirs:     include
  hs-source-dirs:   src
  build-depends:
      base        >=4.10.1.0 && <4.21
    , bytestring  >=0.10.8.2 && <0.13
    , containers  >=0.5.10.2 && <0.8
    , deepseq     >=1.4.3.0  && <1.6
    , ghc-prim
    , text        >=1.2.3.0  && <1.3  || >=2.0 && <2.2

  if impl(ghc >=9.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

    -- 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.1.2 && <1.6

  else
    build-depends: filepath >=1.4.1.2 && <1.5

  if !impl(ghc >=9.2)
    build-depends: base-orphans >=0.8.6 && <0.10

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

  -- Integer internals
  if impl(ghc >=9)
    build-depends: ghc-bignum >=1.0 && <1.4

    if !impl(ghc >=9.0.2)
      build-depends: ghc-bignum-orphans >=0.1 && <0.2

  else
    if flag(integer-gmp)
      build-depends: integer-gmp >=0.4 && <1.1

    else
      -- this is needed for the automatic flag to be well-balanced
      build-depends: integer-simple

  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
    ScopedTypeVariables
    Trustworthy
    TypeOperators
    UnliftedFFITypes

  ghc-options:      -Wall -fwarn-tabs

  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.4.0.1
    , random                      >=1.0      && <1.3
    , test-framework              >=0.3.3
    , test-framework-hunit
    , test-framework-quickcheck2  >=0.2.9
    , 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 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