cabal-version:   >= 1.10
name:            zlib
version:         0.7.1.1

copyright:       (c) 2006-2016 Duncan Coutts
license:         BSD3
license-file:    LICENSE
author:          Duncan Coutts <duncan@community.haskell.org>
maintainer:      Duncan Coutts <duncan@community.haskell.org>, Andrew Lelechenko <andrew.lelechenko@gmail.com>, Emily Pillmore <emilypi@cohomolo.gy>, Herbert Valerio Riedel <hvr@gnu.org>
bug-reports:     https://github.com/haskell/zlib/issues
category:        Codec
synopsis:        Compression and decompression in the gzip and zlib formats
description:     This package provides a pure interface for compressing and
                 decompressing streams of data represented as lazy
                 'ByteString's. It uses the
                 <https://en.wikipedia.org/wiki/Zlib zlib C library>
                 so it has high performance. It supports the \"zlib\",
                 \"gzip\" and \"raw\" compression formats.
                 .
                 It provides a convenient high level API suitable for most
                 tasks and for the few cases where more control is needed it
                 provides access to the full zlib feature set.
build-type:      Simple

tested-with:     GHC == 8.0.2
               , GHC == 8.2.2
               , GHC == 8.4.4
               , GHC == 8.6.5
               , GHC == 8.8.4
               , GHC == 8.10.7
               , GHC == 9.0.2
               , GHC == 9.2.8
               , GHC == 9.4.8
               , GHC == 9.6.7
               , GHC == 9.8.4
               , GHC == 9.10.2
               , GHC == 9.12.2
               , GHC == 9.14.1

extra-source-files: changelog.md
                    README.md
                    -- extra headers
                    cbits-extra/hs-zlib.h
                    -- test data files
                    test/data/bad-crc.gz test/data/custom-dict.zlib
                    test/data/custom-dict.zlib-dict test/data/hello.gz
                    test/data/not-gzip test/data/two-files.gz
                    -- demo programs:
                    examples/gzip.hs examples/gunzip.hs

source-repository head
  type: git
  location: https://github.com/haskell/zlib.git

flag non-blocking-ffi
  default:     True
  manual:      True
  description: The (de)compression calls can sometimes take a long time, which
               prevents other Haskell threads running. Enabling this flag
               avoids this unfairness, but with greater overall cost.

flag pkg-config
  default:     True
  manual:      False
  description: Use @pkg-config@ executable to locate foreign @zlib@ library.

flag bundled-c-zlib
  default:     False
  manual:      True
  description: Use @zlib-clib@ package with C sources instead of a system library.
               C sources are used for GHCJS and WASM unconditionally
               and on Windows unless @pkg-config@ flag is on.

library
  exposed-modules: Codec.Compression.GZip,
                   Codec.Compression.Zlib,
                   Codec.Compression.Zlib.Raw,
                   Codec.Compression.Zlib.Internal
  other-modules:   Codec.Compression.Zlib.Stream,
                   Codec.Compression.Zlib.ByteStringCompat

  default-language: Haskell2010

  other-extensions: CPP, ForeignFunctionInterface, RankNTypes, BangPatterns
  other-extensions: DeriveGeneric
  other-extensions: CApiFFI

  build-depends:   base >= 4.9 && < 4.23,
                   bytestring >= 0.9 && < 0.13

  build-tools:     hsc2hs >= 0.67 && < 0.69
  if os(windows) && impl(ghc < 8.4)
    build-tools:     hsc2hs < 0.68.5
    -- GHC 7 ships hsc2hs-0.67

  include-dirs:    cbits-extra
  c-sources:       cbits-extra/hs-zlib.c
  ghc-options:     -Wall -fwarn-tabs
  if flag(non-blocking-ffi)
    cpp-options:   -DNON_BLOCKING_FFI

  -- Cross-platform builds (such as JS and WASM) must have access
  -- to C sources, so using zlib-clib unconditionally.
  --
  -- On Windows, zlib is shipped as part of GHC's mingw/lib directory,
  -- which GHC always includes in its linker search path. However,
  -- there is no guarantee that zlib1.dll (the corresponding shared library)
  -- will be available on the user's PATH at runtime, making it risky to depend upon
  -- (see https://github.com/haskell/zlib/issues/65 for what can go wrong).
  -- Thus, we resort to zlib-clib unless pkg-config is available.
  if flag(bundled-c-zlib) || impl(ghcjs) || os(ghcjs) || arch(wasm32) || (!flag(pkg-config) && os(windows))
    build-depends: zlib-clib < 2
  else
    if flag(pkg-config)
      -- NB: pkg-config is available on windows as well when using msys2
      pkgconfig-depends: zlib
    else
      extra-libraries: z

test-suite tests
  type: exitcode-stdio-1.0
  main-is:         Test.hs
  other-modules:   Utils,
                   Test.Codec.Compression.Zlib.Internal,
                   Test.Codec.Compression.Zlib.Stream
  hs-source-dirs:  test
  default-language: Haskell2010
  build-depends:   base, bytestring, zlib,
                   QuickCheck       == 2.*,
                   tasty            >= 0.8 && < 1.6,
                   tasty-quickcheck >= 0.8 && < 1
  ghc-options:     -Wall

  if impl(ghc >= 9.4)
    ghc-options:   "-with-rtsopts=-M1G"
