name:          opencv
version:       0.0.2.0
homepage:      https://github.com/LumiGuide/haskell-opencv
bug-reports:   https://github.com/LumiGuide/haskell-opencv/issues
license:       BSD3
license-file:  LICENSE
author:        Roel van Dijk <roel@lambdacube.nl>, Bas van Dijk <v.dijk.bas@gmail.com>
maintainer:    Roel van Dijk <roel@lambdacube.nl>, Bas van Dijk <v.dijk.bas@gmail.com>
build-type:    Custom
cabal-version: >=1.23
category:      AI, Graphics
synopsis:      Haskell binding to OpenCV-3.x
description:   <<https://raw.githubusercontent.com/LumiGuide/haskell-opencv/master/data/haskell-opencv-logo-200x82.png>>
               .
               This is a Haskell library providing a binding to OpenCV-3.x.
               It binds directly with the C++ API using the @inline-c@ Haskell library.
               .
               The library is far from complete but the framework is there to easily
               bind missing functionality.
               .
               Note that the OpenCV contrib modules are provided by
               <http://hackage.haskell.org/package/opencv-extra opencv-extra>.
               .
               Make sure to checkout the
               <https://github.com/LumiGuide/haskell-opencv/tree/master/opencv-examples opencv-examples>.

extra-source-files:
    CHANGELOG.md
    data/*.png
    data/*.jpg
    data/*.mp4
    data/*.xml

extra-doc-files:
    doc/generated/*.png
    doc/generated/examples/*.png
    doc/generated/examples/*.gif
    doc/color_conversions.png

source-repository head
  type:     git
  location: git://github.com/LumiGuide/haskell-opencv.git
  subdir:   opencv

flag internal-documentation
    description: Enables documentation generation for internal modules.
    default: False
    manual: True

custom-setup
    setup-depends: base, Cabal >= 1.23

library
    hs-source-dirs: src
    include-dirs: include
    install-includes:
        haskell_opencv_matx_typedefs.hpp
        hsc_macros.hpp
        namespace.hpp
        orb.hpp
        simple_blob_detector.hpp
        termcriteria.hpp
        video_motion_analysis.hpp

    c-sources:
        src/OpenCV/Calib3d.cpp
        src/OpenCV/Core/ArrayOps.cpp
        src/OpenCV/Core/Types.cpp
        src/OpenCV/Core/Types/Mat.cpp
        src/OpenCV/Core/Types/Mat/Repa.cpp
        src/OpenCV/Core/Types/Matx.cpp
        src/OpenCV/Core/Types/Point.cpp
        src/OpenCV/Core/Types/Rect.cpp
        src/OpenCV/Core/Types/Size.cpp
        src/OpenCV/Core/Types/Vec.cpp
        src/OpenCV/Features2d.cpp
        src/OpenCV/HighGui.cpp
        src/OpenCV/ImgCodecs.cpp
        src/OpenCV/ImgProc/ColorMaps.cpp
        src/OpenCV/ImgProc/Drawing.cpp
        src/OpenCV/ImgProc/FeatureDetection.cpp
        src/OpenCV/ImgProc/GeometricImgTransform.cpp
        src/OpenCV/ImgProc/ImgFiltering.cpp
        src/OpenCV/ImgProc/MiscImgTransform.cpp
        src/OpenCV/ImgProc/ObjectDetection.cpp
        src/OpenCV/ImgProc/StructuralAnalysis.cpp
        src/OpenCV/ImgProc/CascadeClassifier.cpp
        src/OpenCV/Internal/Core/Types.cpp
        src/OpenCV/Internal/Core/Types/Mat.cpp
        src/OpenCV/Internal/Core/Types/Mat/ToFrom.cpp
        src/OpenCV/Internal/Exception.cpp
        src/OpenCV/Photo.cpp
        src/OpenCV/Video.cpp
        src/OpenCV/VideoIO/VideoCapture.cpp
        src/OpenCV/VideoIO/VideoWriter.cpp
        src/OpenCV/Video/MotionAnalysis.cpp

    cc-options: -Wall -std=c++11
    ghc-options: -Wall -fwarn-incomplete-patterns -funbox-strict-fields -O2
    if flag(internal-documentation)
        cpp-options: -DENABLE_INTERNAL_DOCUMENTATION

    build-depends:
        aeson             >= 0.9.0.1
      , base              >= 4.8     && <5
      , base64-bytestring >= 1.0.0.1
      , bindings-DSL      >= 1.0.23
      , bytestring        >= 0.10.6
      , containers        >= 0.5.6.2
      , data-default      >= 0.7.1.1
      , deepseq           >= 1.4.1.1
      , inline-c          >= 0.5.5.5
      , inline-c-cpp      >= 0.1
      , JuicyPixels       >= 3.2.8.1
      , linear            >= 1.20.4
      , primitive         >= 0.6.1
      , repa              >= 3.4.0.2
      , template-haskell  >= 2.10
      , text              >= 1.2.2.1
      , transformers      >= 0.4.2
      , vector            >= 0.11

    exposed-modules:
        OpenCV
        OpenCV.Calib3d
        OpenCV.Core.ArrayOps
        OpenCV.Core.Types
        OpenCV.Core.Types.Mat
        OpenCV.Core.Types.Mat.HMat
        OpenCV.Core.Types.Mat.Repa
        OpenCV.Core.Types.Matx
        OpenCV.Core.Types.Point
        OpenCV.Core.Types.Rect
        OpenCV.Core.Types.Size
        OpenCV.Core.Types.Vec
        OpenCV.Exception
        OpenCV.Features2d
        OpenCV.HighGui
        OpenCV.ImgCodecs
        OpenCV.ImgProc.ColorMaps
        OpenCV.ImgProc.Drawing
        OpenCV.ImgProc.FeatureDetection
        OpenCV.ImgProc.GeometricImgTransform
        OpenCV.ImgProc.ImgFiltering
        OpenCV.ImgProc.MiscImgTransform
        OpenCV.ImgProc.MiscImgTransform.ColorCodes
        OpenCV.ImgProc.ObjectDetection
        OpenCV.ImgProc.StructuralAnalysis
        OpenCV.ImgProc.Types
        OpenCV.ImgProc.CascadeClassifier
        OpenCV.JSON
        OpenCV.Photo
        OpenCV.TypeLevel
        OpenCV.Unsafe
        OpenCV.Video
        OpenCV.Video.MotionAnalysis
        OpenCV.VideoIO.Types
        OpenCV.VideoIO.VideoCapture
        OpenCV.VideoIO.VideoWriter

        OpenCV.Internal
        OpenCV.Internal.Mutable
        OpenCV.Internal.C.Inline
        OpenCV.Internal.C.PlacementNew
        OpenCV.Internal.C.PlacementNew.TH
        OpenCV.Internal.C.Types
        OpenCV.Internal.Calib3d.Constants
        OpenCV.Internal.Core.ArrayOps
        OpenCV.Internal.Core.Types
        OpenCV.Internal.Core.Types.Constants
        OpenCV.Internal.Core.Types.Mat
        OpenCV.Internal.Core.Types.Mat.Depth
        OpenCV.Internal.Core.Types.Mat.HMat
        OpenCV.Internal.Core.Types.Mat.Marshal
        OpenCV.Internal.Core.Types.Mat.ToFrom
        OpenCV.Internal.Core.Types.Matx
        OpenCV.Internal.Core.Types.Matx.TH
        OpenCV.Internal.Core.Types.Point
        OpenCV.Internal.Core.Types.Point.TH
        OpenCV.Internal.Core.Types.Rect
        OpenCV.Internal.Core.Types.Rect.TH
        OpenCV.Internal.Core.Types.Size
        OpenCV.Internal.Core.Types.Size.TH
        OpenCV.Internal.Core.Types.Vec
        OpenCV.Internal.Core.Types.Vec.TH
        OpenCV.Internal.Exception
        OpenCV.Internal.ImgCodecs
        OpenCV.Internal.ImgProc.MiscImgTransform
        OpenCV.Internal.ImgProc.MiscImgTransform.TypeLevel
        OpenCV.Internal.ImgProc.MiscImgTransform.ColorCodes
        OpenCV.Internal.ImgProc.Types
        OpenCV.Internal.Photo.Constants
        OpenCV.Internal.VideoIO.Constants
        OpenCV.Internal.VideoIO.Types
        OpenCV.Juicy

    default-extensions:
        BangPatterns
        DataKinds
        FlexibleContexts
        FlexibleInstances
        LambdaCase
        OverloadedStrings
        PackageImports
        PolyKinds
        ScopedTypeVariables
        TupleSections
        TypeFamilies
        TypeOperators

    default-language:   Haskell2010
    pkgconfig-depends:  opencv >= 3.0.0
    extra-libraries:    stdc++

test-suite doc-images-opencv
    type: exitcode-stdio-1.0
    hs-source-dirs: doc
    main-is: images.hs
    other-modules:
        ExampleExtractor
        Language.Haskell.Meta.Syntax.Translate
    default-language: Haskell2010
    ghc-options: -Wall -fwarn-incomplete-patterns -threaded -funbox-strict-fields -O2 -rtsopts
    build-depends:
        base              >= 4.8 && < 5
      , bytestring        >= 0.10.6
      , containers        >= 0.5.6.2
      , data-default      >= 0.7.1.1
      , directory         >= 1.2.2
      , Glob              >= 0.7.5
      , haskell-src-exts  >= 1.18.2
      , JuicyPixels       >= 3.2.8.1
      , linear            >= 1.20.4
      , opencv
      , primitive         >= 0.6.1
      , template-haskell  >= 2.10
      , text              >= 1.2.2.1
      , transformers      >= 0.4.2
      , vector            >= 0.11

    default-extensions:
        BangPatterns
        DataKinds
        LambdaCase
        OverloadedStrings
        PackageImports
        PolyKinds
        ScopedTypeVariables
        TupleSections
        TypeFamilies
        TypeOperators

test-suite test-opencv
    type:             exitcode-stdio-1.0
    hs-source-dirs:   test
    main-is:          test.hs
    default-language: Haskell2010
    ghc-options:      -Wall -fwarn-incomplete-patterns -threaded -funbox-strict-fields -O2 -rtsopts
    build-depends:
        base              >= 4.8 && < 5
      , bytestring        >= 0.10.6
      , lens              >= 4.13
      , linear            >= 1.20.4
      , opencv
      , QuickCheck        >= 2.8.2
      , repa              >= 3.4.0.2
      , tasty             >= 0.11.0.2
      , tasty-hunit       >= 0.9.2
      , tasty-quickcheck  >= 0.8.4
      , transformers      >= 0.4.2
      , vector            >= 0.11

    default-extensions:
        DataKinds
        FlexibleContexts
        PackageImports
        RankNTypes
        ScopedTypeVariables
        TypeOperators

benchmark bench-opencv
    type:             exitcode-stdio-1.0
    hs-source-dirs:   bench
    main-is:          bench.hs
    default-language: Haskell2010
    ghc-options: -Wall -fwarn-incomplete-patterns -threaded -funbox-strict-fields -O2 -rtsopts
    build-depends:
        base              >= 4.8 && < 5
      , bytestring        >= 0.10.6
      , criterion         >= 1.1.1
      , opencv
      , repa              >= 3.4.0.2

    default-extensions:
        DataKinds
        PackageImports