[project @ 1999-11-29 18:59:23 by sewardj]
[ghc-hetmet.git] / ghc / includes / options.h
1 /* ../options.h.  Generated automatically by configure.  */
2 /* --------------------------------------------------------------------------
3  * Configuration options
4  *
5  * Most configuration options are arguments to the configure script
6  * (try running "configure --help").  The following options are either
7  * experimental or require changes to "Prelude.hs", the standard libraries
8  * and demos and therefore cannot be modified using the configure script.
9  * Most users should leave them alone!
10  *
11  * Copyright (c) The University of Nottingham and Yale University, 1994-1997.
12  * All rights reserved. See NOTICE for details and conditions of use etc...
13  * Hugs version 1.4, December 1997
14  *
15  * $RCSfile: options.h,v $
16  * $Revision: 1.14 $
17  * $Date: 1999/11/29 18:59:23 $
18  * ------------------------------------------------------------------------*/
19
20
21 /* --------------------------------------------------------------------------
22  * Hugs paths and directories
23  * ------------------------------------------------------------------------*/
24
25 /* Define this as the default setting of HUGSPATH.                        
26  * Value may contain string "{Hugs}" (for which we will substitute the
27  * value of HUGSDIR) and should be either colon-separated (Unix)
28  * or semicolon-separated (Macintosh, Windows, DOS).  Escape
29  * characters in the path string are interpreted according to normal
30  * Haskell conventions.
31  *
32  * This value can be overridden from the command line by setting the
33  * HUGSFLAGS environment variable or by storing an appropriate value
34  * for HUGSFLAGS in the registry (Win32 only).  In all cases, use a 
35  * string of the form -P"...".  
36  */
37 #define HUGSPATH "."
38
39 /* The directory name which is substituted for the string "{Hugs}"
40  * in a path variable.  This normally points to where the Hugs libraries
41  * are installed - ie so that the file HUGSDIR/lib/Prelude.hs exists    
42  * Typical values are:                                  
43  *    "/usr/local/lib/hugs"                             
44  *    "/usr/homes/JFHaskell/hugs"                       
45  *    ".."      
46  *
47  * This value is ignored on Windows and Macintosh versions since
48  * it is assumed that the binary is installed in HUGSDIR.
49  *
50  * This value cannot be overridden from the command line or by using 
51  * environment variables.  This isn't quite as limiting as you'd think
52  * since you can always choose _not_ to use the {Hugs} variable - however,
53  * it's obviously _nicer_ to have it set correctly.
54  */
55 #ifndef HUGSDIR
56 #define HUGSDIR "."
57 #endif
58
59
60 /* --------------------------------------------------------------------------
61  * User interface options
62  * ------------------------------------------------------------------------*/
63
64 /* Define if you want to use the "Hugs for Windows" GUI.
65  * (Windows 3.1 and compatibles only)
66  */
67 #define HUGS_FOR_WINDOWS 0
68
69 /* Define if you want filenames to be converted to normal form by:
70  * o replacing relative pathnames with absolute pathnames and
71  *   eliminating .. and . where possible.
72  * o converting to lower case (only in case-insensitive filesystems)
73  */
74 #define PATH_CANONICALIZATION 0
75
76 /* Define if you want the small startup banner.
77  */
78 #define SMALL_BANNER 0
79
80 /* Define if you want to be able to redirect stdout/stderr to a buffer.
81  * Only necessary for the Hugs server interface (which is used in the
82  * Netscape plugin and the standalone evaluator "runhugs"). 
83  */
84 #define REDIRECT_OUTPUT (!HUGS_FOR_WINDOWS)
85
86
87 /* --------------------------------------------------------------------------
88  * Making Hugs smaller
89  * ------------------------------------------------------------------------*/
90
91 /* Define one of these to select overall size of Hugs
92  *   SMALL_HUGS     for 16 bit operation on a limited memory PC.
93  *   REGULAR_HUGS   for 32 bit operation using largish default table sizes.
94  *   LARGE_HUGS     for 32 bit operation using larger default table sizes.
95  */
96 #define SMALL_HUGS   0
97 #define REGULAR_HUGS 0
98 #define LARGE_HUGS   1
99
100 #define NUM_SYNTAX         100
101 #define NUM_TUPLES         20
102 #define NUM_OFFSETS        1024
103 #define NUM_CHARS          256
104 #if TREX
105 #define NUM_EXT            100
106 #endif
107 #define CHAR_MASK          0xff
108
109 #if     SMALL_HUGS                      /* the McDonalds mentality :-)     */
110 #define Pick(s,r,l)        s
111 #endif
112 #if     REGULAR_HUGS
113 #define Pick(s,r,l)        r
114 #endif
115 #if     LARGE_HUGS
116 #define Pick(s,r,l)        l
117 #endif
118
119 #define MINIMUMHEAP        Pick(7500,   19000,      19000)
120 #define MAXIMUMHEAP        Pick(32765,  0,          0)
121 #define DEFAULTHEAP        Pick(28000,  50000,      300000)
122
123 #define NUM_SCRIPTS        Pick(64,     100,        100)
124 #define NUM_MODULE         NUM_SCRIPTS
125 #define NUM_TYCON          Pick(60,     160,        400)
126 #define NUM_NAME           Pick(1000,   2000,       16000)
127 #define NUM_CLASSES        Pick(30,     40,         80)
128 #define NUM_INSTS          Pick(200,    300,        600)
129 #define NUM_TEXT           Pick(12000,  20000,      100000)
130 #define NUM_TEXTH          Pick(1,      10,         10)
131 #define NUM_TYVARS         Pick(800,    2000,       4000)
132 #define NUM_STACK          Pick(1800,   12000,      16000)
133 #define NUM_DTUPLES        Pick(3,      5,          5)
134
135 #define MAXPOSINT          0x7fffffff
136 #define MINNEGINT          (-MAXPOSINT-1)
137 #define MAXHUGSWORD        0xffffffffU
138
139 #define BIGBASE            Pick(100,    10000,      10000)
140 #define BIGEXP             Pick(2,      4,          4)
141
142 #define minRecovery        Pick(1000,  1000,       1000)
143 #define bitsPerWord        Pick(16,    32,         32)
144 #define wordShift          Pick(4,     5,          5)
145 #define wordMask           Pick(15,    31,         31)
146
147 /* Define to force a fixed size (NUM_TYVARS) for the current substitution.
148  * Setting this flag places a limit on the maximum complexity of
149  * expressions handled by the typechecker.  It is normally turned off
150  * but may be required for small machines/configurations.
151  */
152 #define FIXED_SUBST 0 
153
154 /* Define this to allocate tables dynamically.
155  * This is currently just a memory saving trick, but this may be
156  * extended at a later stage to allow at least some of the tables
157  * to be extended dynamically at run-time to avoid exhausted space errors.
158  */
159 #define DYN_TABLES SMALL_HUGS
160
161 /* Define this to include support for storing pointers in the heap.
162  * This is required by the code generator (which has to store 
163  * pointers to AsmObjects).
164  */
165 #define PTR_ON_HEAP 1
166
167 /* Should quantifiers be displayed in error messages.
168  * Warning: not consistently used.
169  */
170 #define DISPLAY_QUANTIFIERS 0
171
172 /* Flags to determine which raw representations and operations are available
173  * Notes:
174  * o if you turn everything on, you might end up with more then 256
175  *   bytecodes: check the value of i_ccall (the lst bytecode) to check
176  * (JRS), 22apr99: I don't think any of the #undef'd ones will work
177  * without attention.  However, standard Haskell 98 is supported 
178  * is supported without needing them.
179  */
180 #undef  PROVIDE_STABLE
181 #undef  PROVIDE_FOREIGN
182 #undef  PROVIDE_WEAK
183 #undef  PROVIDE_CONCURRENT
184 #undef  PROVIDE_PTREQUALITY
185 #undef  PROVIDE_COERCE
186
187
188 /* Set to 1 to use a non-GMP implementation of integer, in the
189    standalone Hugs.  Set to 0 in the combined GHC-Hugs system,
190    in which case GNU MP will be used.
191 */
192 #define STANDALONE_INTEGER 1
193
194 /* Enable a crude profiler which counts BCO entries, bytes allocated
195    and bytecode insns executed on a per-fn basis.  Used for assessing
196    the effect of the simplifier/optimiser.
197 */
198 #undef CRUDE_PROFILING
199
200
201 /* Is the default default (Int,Double) or (Integer,Double)?
202  */
203 #define DEFAULT_BIGNUM 1
204
205 /* Are things being used in an interactive setting or a batch setting?
206  * In an interactive setting, System.exitWith should not call _exit
207  * getProgName and getProgArgs need to be handled differently, etc.
208  *
209  * Warning: this flag is ignored by an awful lot of code.
210  */
211 #define INTERACTIVE
212
213 /* Turn bytecode interpreter support on/off.
214  */
215 #define INTERPRETER 1 
216
217 /* Turn on debugging output and some sanity checks
218  */
219 /*#define DEBUG*/
220
221 /* NB: LAZY_BLACKHOLING has been moved up to Stg.h where both Hugs and GHC can see it,
222  * and EAGER_BLACKHOLING has been introduced also.  KSW 1999-01.
223  */
224
225 /* Turn miniinterpreter on/off.
226  * 
227  * The mininterpreter is portable but slow - if you turn it off, 
228  * you'll probably need to provide some assembly language support
229  * for your architecture.
230  */
231 #define USE_MINIINTERPRETER 1
232
233 /* Turn registerisation on/off.
234  * 
235  * If you turn this off, you'll probably need to provide some
236  * assembly language support for your architecture.
237  */
238 #define NO_REGS
239
240
241 /* --------------------------------------------------------------------------
242  * Fancy features
243  * ------------------------------------------------------------------------*/
244
245 /* Define if T-REX; Typed Rows and EXtension should be enabled             */
246 /* Doesn't work in current system - I don't know what the primops do       */
247 #define TREX 0
248
249 /* Define if :xplain should be enabled                                     */
250 #define EXPLAIN_INSTANCE_RESOLUTION 0
251
252
253 /* Define if you want to run Haskell code through a preprocessor
254  * 
255  * Note that the :reload command doesn't know about any dependencies
256  * introduced by using #include so you must :load (not :reload) if
257  * you change any #included files (such as configuration files).
258  */
259 #define USE_PREPROCESSOR 1
260
261 /* Define if you want to time every evaluation. 
262  *
263  * Timing is included in the Hugs distribution for the purpose of benchmarking
264  * the Hugs interpreter, comparing its performance across a variety of
265  * different machines, and with other systems for similar languages.
266  *
267  * It would be somewhat foolish to try to use the timings produced in this
268  * way for any other purpose.  In particular, using timings to compare the
269  * performance of different versions of an algorithm is likely to give very
270  * misleading results.  The current implementation of Hugs as an interpreter,
271  * without any significant optimizations, means that there are much more
272  * significant overheads than can be accounted for by small variations in
273  * Hugs code.
274  */
275 /* #undef WANT_TIMER */
276
277
278 /* --------------------------------------------------------------------------
279  * Desugaring options
280  * 
281  * These options are mostly used for developing/debugging the system.
282  * Since they turn off required parts of the Haskell language, you'll
283  * probably need to modify Prelude.hs and the libraries if you change
284  * these flags.
285  * ------------------------------------------------------------------------*/
286
287 /* Define if single-element dictionaries are implemented by newtype.
288  * Should be turned on.  Mostly used to make it easier to find which
289  * bits of code implement this optimisation and as a way of documenting
290  * them.
291  */
292 #define USE_NEWTYPE_FOR_DICTS 1
293
294 /* Define if strings should be represented as normal C strings.
295  * Note that this doesn't work if the string contains '\0'
296  * and makes persistence problematic.
297  * Intended as a stop-gap measure until mutable byte arrays are available.
298  */
299 #define USE_ADDR_FOR_STRINGS 1
300
301 /* Define to include support for (n+k) patterns. 
302  * Warning: many people in the Haskell committee want to remove n+k patterns.
303  */
304 #define NPLUSK 1
305
306
307 /* --------------------------------------------------------------------------
308  * Debugging options (intended for use by maintainers)
309  * ------------------------------------------------------------------------*/
310
311 /* Define if debugging generated bytecodes or the bytecode interpreter     */
312 #define DEBUG_CODE 1
313
314 /* Define if you want to use a low-level printer from within a debugger    */
315 #define DEBUG_PRINTER 1
316
317 /* --------------------------------------------------------------------------
318  * Experimental features
319  * These are likely to disappear/change in future versions and should not
320  * be used by most people..
321  * ------------------------------------------------------------------------*/
322
323 /* In a plain Hugs system, most signals (SIGBUS, SIGTERM, etc) indicate
324  * some kind of error in Hugs - or maybe a stack overflow.  Rather than
325  * just crash, Hugs catches these errors and returns to the main loop.
326  * It does this by calling a function "panic" which longjmp's back to the
327  * main loop.
328  * If you're developing a GreenCard library, this may not be the right
329  * behaviour - it's better if Hugs leaves them for your debugger to
330  * catch rather than trapping them and "panicking".
331  */
332 #define DONT_PANIC 1
333
334
335 /* ----------------------------------------------------------------------- */