Add a flag for enabling assertions in vector
[darcs-mirrors/vector.git] / vector.cabal
1 Name:           vector
2 Version:        0.2
3 License:        BSD3
4 License-File:   LICENSE
5 Author:         Roman Leshchinskiy
6 Maintainer:     Roman Leshchinskiy <rl@cse.unsw.edu.au>
7 Copyright:      (c) Roman Leshchinskiy 2008
8 Homepage:       http://darcs.haskell.org/vector
9 Category:       Data Structures
10 Synopsis:       Efficient Arrays
11 Description:
12         .
13         An efficient implementation of Int-indexed arrays with a powerful
14         loop fusion framework.
15         .
16         This code is highly experimental and for the most part untested. Use
17         at your own risk!
18
19 Cabal-Version:  >= 1.2
20 Build-Type:     Simple
21
22 Flag EnableAssertions
23   Description: Enable assertions that check parameters to functions are reasonable.
24                These will impose a moderate performance cost on users of the library,
25                with the benefit that you get reasonable errors rather than segmentation faults!
26   Default:     False
27
28 Library
29   Extensions: CPP
30   Exposed-Modules:
31         Data.Vector.Fusion.Stream.Size
32         Data.Vector.Fusion.Stream.Monadic
33         Data.Vector.Fusion.Stream
34
35         Data.Vector.MVector
36         Data.Vector.MVector.New
37         Data.Vector.IVector
38
39         Data.Vector.Unboxed.Unbox
40         Data.Vector.Unboxed.Mutable
41         Data.Vector.Unboxed
42
43         Data.Vector.Mutable
44         Data.Vector
45   Include-Dirs:
46         include
47
48   Install-Includes:
49         phases.h
50
51   Build-Depends: base, array, ghc-prim,
52                  ghc >= 6.9
53
54 -- -finline-if-enough-args is ESSENTIAL. If we don't have this the partial application
55 -- of e.g. Stream.Monadic.++ to the monad dictionary at the use site in Stream.++ causes
56 -- it to be fruitlessly inlined. This in turn leads to a huge RHS for Stream.++, so it
57 -- doesn't get inlined at the final call site and fusion fails to occur.
58   Ghc-Options: -finline-if-enough-args
59   
60 -- It's probably a good idea to compile the library with -O2 as well. However, it's probably
61 -- not as essential as you think because most of the optimisation occurs when the library
62 -- functions from here are inlined into the user programs (which SHOULD be compiled with -O2!).
63 --
64 -- We have to fiddle with the assertion stuff at this point too because -O2 implies -fno-ignore-asserts,
65 -- meaning that their relative ordering is CRUCIAL. Setting them together guarantees it.
66   if flag(enableassertions)
67     -- Asserts are ignored by default at -O1 or higher
68     Ghc-Options: -O2 -fno-ignore-asserts
69   else
70     Ghc-Options: -O2