Separate checks for unsafe operations
[darcs-mirrors/vector.git] / vector.cabal
1 Name:           vector
2 Version:        0.5
3 License:        BSD3
4 License-File:   LICENSE
5 Author:         Roman Leshchinskiy <rl@cse.unsw.edu.au>
6 Maintainer:     Roman Leshchinskiy <rl@cse.unsw.edu.au>
7 Copyright:      (c) Roman Leshchinskiy 2008-2009
8 Homepage:       http://darcs.haskell.org/vector
9 Category:       Data, Data Structures
10 Synopsis:       Efficient Arrays
11 Description:
12         .
13         An efficient implementation of Int-indexed arrays with a powerful loop
14         fusion framework.
15         .
16         It is structured as follows:
17         .
18         [@Data.Vector@] boxed vectors of arbitrary types
19         .
20         [@Data.Vector.Primitive@] unboxed vectors of primitive types as
21                 defined by the @primitive@ package
22         .
23         [@Data.Vector.Storable@] unboxed vectors of 'Storable' types
24         .
25         [@Data.Vector.Generic@] generic interface to the vector types
26         .
27
28 Cabal-Version:  >= 1.2
29 Build-Type:     Simple
30
31 Extra-Source-Files:
32       tests/vector-tests.cabal
33       tests/LICENSE
34       tests/Setup.hs
35       tests/Main.hs
36       tests/Boilerplater.hs
37       tests/Utilities.hs
38       tests/Tests/Stream.hs
39       tests/Tests/Vector.hs
40
41 Flag EnableAssertions
42   Description: Enable assertions that check parameters to functions are reasonable.
43                These will impose a moderate performance cost on users of the library,
44                with the benefit that you get reasonable errors rather than segmentation faults!
45   Default:     True
46
47 Flag BoundsChecks
48   Description: Enables bounds checking
49   Default: True
50
51 Flag UnsafeChecks
52   Description: Enables bounds checking in unsafe operations at the cost of a
53                significant performance penalty
54   Description: False
55
56 Flag InternalChecks
57   Description: Enables internal consistency checks at the cost of a
58                significant performance penalty
59   Default: False
60
61
62 Library
63   Extensions: CPP
64   Exposed-Modules:
65         Data.Vector.Fusion.Util
66         Data.Vector.Fusion.Stream.Size
67         Data.Vector.Fusion.Stream.Monadic
68         Data.Vector.Fusion.Stream
69
70         Data.Vector.Internal.Check
71
72         Data.Vector.Generic.Mutable
73         Data.Vector.Generic.New
74         Data.Vector.Generic
75
76         Data.Vector.Primitive.Mutable
77         Data.Vector.Primitive
78
79         Data.Vector.Storable.Internal
80         Data.Vector.Storable.Mutable
81         Data.Vector.Storable
82
83         Data.Vector.Mutable
84         Data.Vector
85   Include-Dirs:
86         include
87
88   Install-Includes:
89         vector.h
90
91   Build-Depends: base >= 2 && < 5, ghc >= 6.9, primitive
92
93 -- -finline-if-enough-args is ESSENTIAL. If we don't have this the partial application
94 -- of e.g. Stream.Monadic.++ to the monad dictionary at the use site in Stream.++ causes
95 -- it to be fruitlessly inlined. This in turn leads to a huge RHS for Stream.++, so it
96 -- doesn't get inlined at the final call site and fusion fails to occur.
97   if impl(ghc<6.13)
98     Ghc-Options: -finline-if-enough-args
99   
100 -- It's probably a good idea to compile the library with -O2 as well. However, it's probably
101 -- not as essential as you think because most of the optimisation occurs when the library
102 -- functions from here are inlined into the user programs (which SHOULD be compiled with -O2!).
103 --
104 -- We have to fiddle with the assertion stuff at this point too because -O2 implies -fno-ignore-asserts,
105 -- meaning that their relative ordering is CRUCIAL. Setting them together guarantees it.
106   if flag(enableassertions)
107     -- Asserts are ignored by default at -O1 or higher
108     Ghc-Options: -O2 -fno-ignore-asserts
109   else
110     Ghc-Options: -O2
111
112   if flag(BoundsChecks)
113     cpp-options: -DVECTOR_BOUNDS_CHECKS
114
115   if flag(UnsafeChecks)
116     cpp-options: -DVECTOR_UNSAFE_CHECKS
117
118   if flag(InternalChecks)
119     cpp-options: -DVECTOR_INTERNAL_CHECKS
120