name:                sai-shape-syb
version:             0.2.0
synopsis:            Obtain homogeneous values from arbitrary values, tramsforming or culling data
description:
    This package provides SYB shape support: generic fmap to
    homogeneous types, and related features.  Complements existing
    Uniplate and TH shape libraries.  See <http://www.fremissant.net/shape-syb>
    for more information.
    .
    Given a value of arbitrary complexity (mutually recursive
    heterogeneous constructor application), you can obtain
    a structure-preserving representation (homomorphism) as
    a homogeneous type @Homo a@, parameterised by any choice type @a@.
license:             BSD3
license-file:        LICENSE
author:              Andrew Seniuk
maintainer:          rasfar@gmail.com
homepage:            http://www.fremissant.net/shape-syb
-- URL with bug-tracker server preferred to email:
bug-reports:         rasfar@gmail.com
category:            Generics
build-type:          Simple
-- extra-source-files:  
cabal-version:       >=1.10
stability:           experimental

extra-source-files:     tests/*.hs
                      , HTML/*.html
                      , HTML/*.css

-- source-repository head
--   type:                 git
--   location:             https://github.com/rasfar/shape-syb

Flag USE_DATA_TREE
  Description: Use Data.Tree instead of custom Rose type
  Default:     True
--Default:     False

-- Flag OPTIMISE
--   Description: Use -O2 (etc.); otherwise, use -O0
-- --Default:     True
--   Default:     False
-- 
-- Flag PROFILE
--   Description: Enable profiling
-- --Default:     True
--   Default:     False
-- 
-- Flag DYNAMIC
--   Description: Enable dynamically-linked executable
-- --Default:     True
--   Default:     False

Library
  exposed-modules:     SAI.Data.Generics.Shape
                     , SAI.Data.Generics.Shape.SYB
                     , SAI.Data.Generics.Shape.SYB.Filter
                     , SAI.Data.Generics.Shape.SYB.GHC
  -- other-modules:       
  -- other-extensions:    
  build-depends:
                       base >= 4.0 && < 5.0
-- XXX VERY BAD!!! (overconstrained)
--                     base ==4.6.*
                       -- b/c Glide cannot resolve deps with 0.4.2
--                   , syb ==0.4.1
                     , syb
                     -- version is "phoney" (patch of mine, add-source'd)
                     -- Later: Which never helped...
--                   , ghc-syb-utils ==1.2.1.2
                     , ghc-syb-utils
--                   , ghc ==7.6.*
                     , ghc
  if flag(USE_DATA_TREE)
    build-depends: containers
  hs-source-dirs:      src
  default-language:    Haskell2010
--   if flag(PROFILE)
--     ghc-options: -fprof-auto -auto-all -caf-all
--   if flag(OPTIMISE)
--     ghc-options: -O2
--   else
--     ghc-options: -O0
-- Hackage upload complains:
--if flag(DYNAMIC)
--  ghc-options: -dynamic
  if flag(USE_DATA_TREE)
    cpp-options: -DUSE_DATA_TREE=1
  else
    cpp-options: -DUSE_DATA_TREE=0

  ghc-options: -optP-Wundef -fno-warn-overlapping-patterns -rtsopts
--ghc-options: -optP-Wundef -fno-warn-overlapping-patterns -rtsopts -threaded

  -- needed?
  if impl(ghc < 6.12) 
    ghc-options:          -package-name syb

--ghc-options:            -Wall

-- test-suite unit-tests
--   type:                   exitcode-stdio-1.0
--   hs-source-dirs:         tests
--   main-is:                Main.hs
--   build-depends:          base
--                         , syb
--                         , HUnit
--                         , containers
--                         , mtl

test-suite unit-tests
  type:                exitcode-stdio-1.0
  main-is:             Main.hs
-- This WORKS, but the output is all sent to the test log!
-- However, it was a mistake that I even tried this, and I'm
-- surprised it worked at all! 
--main-is:             test-05.hs
-- Executable test-sai-shape-syb
--main-is:             test-05.hs
--other-modules:       Random
  other-extensions:    TemplateHaskell
--   if flag(PROFILE)
--     ghc-options: -fprof-auto -auto-all -caf-all
--   if flag(OPTIMISE)
--     ghc-options: -O2
--   else
--     ghc-options: -O0
-- Hackage upload complains:
--if flag(DYNAMIC)
--  ghc-options: -dynamic
  if flag(USE_DATA_TREE)
    cpp-options: -DUSE_DATA_TREE=1
  else
    cpp-options: -DUSE_DATA_TREE=0
  ghc-options: -optP-Wundef -fno-warn-overlapping-patterns -rtsopts -threaded
  build-depends:
-- XXX VERY BAD!!! (overconstrained)
---                       base >=4.6 && <4.7
                          base >= 4.0 && < 5.0
--                      , containers
-- --                   , containers ==0.5.0.*
-- --                   , containers ==0.5.3.*
--                      , bytestring
-- --                   , bytestring ==0.10.0.*
-- --                   , bytestring ==0.10.4.*
--                      , text
-- --                   , text ==0.11.3.*
-- --                   , text ==1.1.1.1
--                      , filepath
-- --                   , filepath ==1.3.0.*
--                      , directory
-- --                   , directory ==1.2.0.*
-- --                   , binary-generic
-- -- XXX Note that 0.5 was the one automatically selected, but
-- -- it does not work for my generic deriving, and specifying
-- -- 0.7 did not cause any problems (or even warnings)...
-- --   Everything else went without issues, installing with
-- -- --enable-*-profiling.  As for --enable-shared, can't seem
-- -- to specify it as we're not building a library [?] -- but,
-- -- as know from experience, when it comes to that, will HAVE
-- -- to reinstall everything, as there's no system-wide .o_dyn
-- -- [or is it .dyn_o?] installed.
-- --                   , binary
-- --                   , binary ==0.5.1.*
--                      , binary ==0.7.1.*
--                      , deepseq-generics
-- --                   , deepseq-generics ==0.1.1.*
-- --                   , deepseq ==1.3.*
--                      , vector
-- --                   , vector ==0.10.0.*
--                      , attoparsec
-- --                   , attoparsec ==0.10.1.*
--                      , ansi-terminal
-- --                   , ansi-terminal ==0.6.1.*
--                      , unordered-containers
-- --                   , unordered-containers ==0.2.3.*
--                      , hashable
-- --                   , hashable ==1.2.1.*
-- Look into HaRe-as-library, too...
-- Or just borrow some of their source files...
                     , syb
                     , ghc
--                   , ghc-paths
                     -- version is "phoney" (patch of mine, add-source'd)
                     -- Later: Which never helped...
--                   , ghc-syb-utils ==1.2.1.2
                     , ghc-syb-utils
                     , sai-shape-syb
                       -- XXX only for testing (to make a Data.Map)
                     , containers
                     -- version constraint only b/c not online here...
                     , HUnit ==1.2.5.2
-- Arbitrary package I *don't* use, to test that
--   cabal fetch sai-shape-syb.cabal
-- does resolve and fetch dependencies.
-- It seems to work! (LATER: On a bigger test, it seems not to fetch all...)
--                   , numeric-limits
  hs-source-dirs:      tests
  default-language:    Haskell2010