[project @ 1999-04-27 14:07:53 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.7 $
17  * $Date: 1999/04/27 14:07:53 $
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 a command line editor is available and should be used. 
77  * There are two choices of command line editor that can be used with Hugs:
78  * GNU readline and editline (from comp.sources.misc, vol 31, issue 71)
79  */
80 #define USE_READLINE 0
81
82 /* Define if you want the small startup banner.
83  */
84 #define SMALL_BANNER 0
85
86 /* Define if you want to be able to redirect stdout/stderr to a buffer.
87  * Only necessary for the Hugs server interface (which is used in the
88  * Netscape plugin and the standalone evaluator "runhugs"). 
89  */
90 #define REDIRECT_OUTPUT (!HUGS_FOR_WINDOWS)
91
92
93 /* --------------------------------------------------------------------------
94  * Making Hugs smaller
95  * ------------------------------------------------------------------------*/
96
97 /* Define one of these to select overall size of Hugs
98  *   SMALL_HUGS     for 16 bit operation on a limited memory PC.
99  *   REGULAR_HUGS   for 32 bit operation using largish default table sizes.
100  *   LARGE_HUGS     for 32 bit operation using larger default table sizes.
101  */
102 #define SMALL_HUGS   0
103 #define REGULAR_HUGS 0
104 #define LARGE_HUGS   1
105
106 #define NUM_SYNTAX         100
107 #define NUM_TUPLES         /*100*/ 20
108 #define NUM_OFFSETS        1024
109 #define NUM_CHARS          256
110 #if TREX
111 #define NUM_EXT            100
112 #endif
113 #define CHAR_MASK          0xff
114
115 #if     SMALL_HUGS                      /* the McDonalds mentality :-)     */
116 #define Pick(s,r,l)        s
117 #endif
118 #if     REGULAR_HUGS
119 #define Pick(s,r,l)        r
120 #endif
121 #if     LARGE_HUGS
122 #define Pick(s,r,l)        l
123 #endif
124
125 #define MINIMUMHEAP        Pick(7500,   19000,      19000)
126 #define MAXIMUMHEAP        Pick(32765,  0,          0)
127 #define DEFAULTHEAP        Pick(28000,  50000,      650000)
128
129 #define NUM_SCRIPTS        Pick(64,     100,        100)
130 #define NUM_MODULE         NUM_SCRIPTS
131 #define NUM_TYCON          Pick(60,     160,        400)
132 #define NUM_NAME           Pick(1000,   2000,       16000)
133 #define NUM_CLASSES        Pick(30,     40,         80)
134 #define NUM_INSTS          Pick(200,    300,        600)
135 #define NUM_TEXT           Pick(12000,  20000,      80000)
136 #define NUM_TEXTH          Pick(1,      10,         10)
137 #define NUM_TYVARS         Pick(800,    2000,       4000)
138 #define NUM_STACK          Pick(1800,   12000,      16000)
139 #define NUM_DTUPLES        Pick(3,      5,          5)
140
141 #define MAXPOSINT          0x7fffffff
142 #define MINNEGINT          (-MAXPOSINT-1)
143 #define MAXHUGSWORD        0xffffffffU
144
145 #define BIGBASE            Pick(100,    10000,      10000)
146 #define BIGEXP             Pick(2,      4,          4)
147
148 #define minRecovery        Pick(1000,  1000,       1000)
149 #define bitsPerWord        Pick(16,    32,         32)
150 #define wordShift          Pick(4,     5,          5)
151 #define wordMask           Pick(15,    31,         31)
152
153 /* Define to force a fixed size (NUM_TYVARS) for the current substitution.
154  * Setting this flag places a limit on the maximum complexity of
155  * expressions handled by the typechecker.  It is normally turned off
156  * but may be required for small machines/configurations.
157  */
158 #define FIXED_SUBST 0 
159
160 /* Define this to allocate tables dynamically.
161  * This is currently just a memory saving trick, but this may be
162  * extended at a later stage to allow at least some of the tables
163  * to be extended dynamically at run-time to avoid exhausted space errors.
164  */
165 #define DYN_TABLES SMALL_HUGS
166
167 /* Define this to include support for storing pointers in the heap.
168  * This is required by the code generator (which has to store 
169  * pointers to AsmObjects).
170  */
171 #define PTR_ON_HEAP 1
172
173 /* Should quantifiers be displayed in error messages.
174  * Warning: not consistently used.
175  */
176 #define DISPLAY_QUANTIFIERS 0
177
178 /* Flags to determine which raw representations and operations are available
179  * Notes:
180  * o if you turn everything on, you might end up with more then 256
181  *   bytecodes: check the value of i_ccall (the lst bytecode) to check
182  * (JRS), 22apr99: I don't think any of the #undef'd ones will work
183  * without attention.  However, standard Haskell 98 is supported 
184  * is supported without needing them.
185  */
186 #undef  PROVIDE_STABLE
187 #undef  PROVIDE_FOREIGN
188 #undef  PROVIDE_WEAK
189 #undef  PROVIDE_CONCURRENT
190 #undef  PROVIDE_PTREQUALITY
191 #undef  PROVIDE_COERCE
192
193
194 /* Set to 1 to use a non-GMP implementation of integer, in the
195    standalone Hugs.  Set to 0 in the combined GHC-Hugs system,
196    in which case GNU MP will be used.
197 */
198 #define STANDALONE_INTEGER 1
199
200 /* Enable a crude profiler which counts BCO entries, bytes allocated
201    and bytecode insns executed on a per-fn basis.  Used for assessing
202    the effect of the simplifier/optimiser.
203 */
204 #undef CRUDE_PROFILING
205
206
207 /* Is the default default (Int,Double) or (Integer,Double)?
208  */
209 #define DEFAULT_BIGNUM 1
210
211 /* Should lambda lifter lift constant expressions out to top level?
212  * Experimental optimisation.
213  */
214 #define LIFT_CONSTANTS 0
215
216 /* Should we run optimizer on Hugs code?
217  * Experimental optimisation.
218  */
219 #define USE_HUGS_OPTIMIZER 1
220
221 /* Are things being used in an interactive setting or a batch setting?
222  * In an interactive setting, System.exitWith should not call _exit
223  * getProgName and getProgArgs need to be handled differently, etc.
224  *
225  * Warning: this flag is ignored by an awful lot of code.
226  */
227 #define INTERACTIVE
228
229 /* Turn bytecode interpreter support on/off.
230  */
231 #define INTERPRETER 1 
232
233 /* Turn on debugging output and some sanity checks
234  */
235 /*#define DEBUG*/
236
237 /* Make stack tags more informative than just their size.
238  * Helps when printing the stack and when running sanity checks.
239  */
240 /*#define DEBUG_EXTRA*/
241
242 /* Turn lazy blackholing on/off.
243  * Warning: Lazy blackholing can't be disabled in GHC generated code.
244  *
245  * Using eager blackholing makes things easier to debug because
246  * the blackholes are more predicatable - but it's slower and less sexy.
247  */
248 #define LAZY_BLACKHOLING 
249
250 /* Turn miniinterpreter on/off.
251  * 
252  * The mininterpreter is portable but slow - if you turn it off, 
253  * you'll probably need to provide some assembly language support
254  * for your architecture.
255  */
256 #define USE_MINIINTERPRETER 1
257
258 /* Turn registerisation on/off.
259  * 
260  * If you turn this off, you'll probably need to provide some
261  * assembly language support for your architecture.
262  */
263 #define NO_REGS
264
265
266 /* --------------------------------------------------------------------------
267  * Fancy features
268  * ------------------------------------------------------------------------*/
269
270 /* Define if T-REX; Typed Rows and EXtension should be enabled             */
271 /* Doesn't work in current system - I don't know what the primops do       */
272 #define TREX 0
273
274 /* Define if you want to run Haskell code through a preprocessor
275  * 
276  * Note that the :reload command doesn't know about any dependencies
277  * introduced by using #include so you must :load (not :reload) if
278  * you change any #included files (such as configuration files).
279  */
280 #define USE_PREPROCESSOR 1
281
282 /* Define if you want to time every evaluation. 
283  *
284  * Timing is included in the Hugs distribution for the purpose of benchmarking
285  * the Hugs interpreter, comparing its performance across a variety of
286  * different machines, and with other systems for similar languages.
287  *
288  * It would be somewhat foolish to try to use the timings produced in this
289  * way for any other purpose.  In particular, using timings to compare the
290  * performance of different versions of an algorithm is likely to give very
291  * misleading results.  The current implementation of Hugs as an interpreter,
292  * without any significant optimizations, means that there are much more
293  * significant overheads than can be accounted for by small variations in
294  * Hugs code.
295  */
296 /* #undef WANT_TIMER */
297
298
299 /* --------------------------------------------------------------------------
300  * Desugaring options
301  * 
302  * These options are mostly used for developing/debugging the system.
303  * Since they turn off required parts of the Haskell language, you'll
304  * probably need to modify Prelude.hs and the libraries if you change
305  * these flags.
306  * ------------------------------------------------------------------------*/
307
308 /* Define if single-element dictionaries are implemented by newtype.
309  * Should be turned on.  Mostly used to make it easier to find which
310  * bits of code implement this optimisation and as a way of documenting
311  * them.
312  */
313 #define USE_NEWTYPE_FOR_DICTS 1
314
315 /* Define if strings should be represented as normal C strings.
316  * Note that this doesn't work if the string contains '\0'
317  * and makes persistence problematic.
318  * Intended as a stop-gap measure until mutable byte arrays are available.
319  */
320 #define USE_ADDR_FOR_STRINGS 1
321
322 /* turn this off to avoid wrapping int and float literals in "fromInt"
323  * or "fromFloat" */
324 #define OVERLOADED_CONSTANTS 1
325
326 /* Define to include support for (n+k) patterns. 
327  * Warning: many people in the Haskell committee want to remove n+k patterns.
328  */
329 #define NPLUSK 1
330
331
332 /* --------------------------------------------------------------------------
333  * Debugging options (intended for use by maintainers)
334  * ------------------------------------------------------------------------*/
335
336 /* Define if debugging generated bytecodes or the bytecode interpreter     */
337 #define DEBUG_CODE 1
338
339 /* Define if you want to use a low-level printer from within a debugger    */
340 #define DEBUG_PRINTER 1
341
342
343 /* --------------------------------------------------------------------------
344  * Experimental features
345  * These are likely to disappear/change in future versions and should not
346  * be used by most people..
347  * ------------------------------------------------------------------------*/
348
349 /* In a plain Hugs system, most signals (SIGBUS, SIGTERM, etc) indicate
350  * some kind of error in Hugs - or maybe a stack overflow.  Rather than
351  * just crash, Hugs catches these errors and returns to the main loop.
352  * It does this by calling a function "panic" which longjmp's back to the
353  * main loop.
354  * If you're developing a GreenCard library, this may not be the right
355  * behaviour - it's better if Hugs leaves them for your debugger to
356  * catch rather than trapping them and "panicking".
357  */
358 #define DONT_PANIC 1
359
360
361 /* ----------------------------------------------------------------------- */