Fix configure
[ghc.git] / configure.ac
1 dnl == autoconf source for the Glasgow FP tools ==
2 dnl (run "grep '^dnl \*' configure.ac | sed -e 's/dnl / /g; s/\*\*/   +/g;'"
3 dnl  (or some such) to see the outline of this file)
4 dnl
5 #
6 # (c) The University of Glasgow 1994-2004
7 #
8 # Configure script template for GHC
9 #
10 # Process with 'autoreconf' to get a working configure script.
11 #
12 # For the generated configure script, do "./configure --help" to
13 # see what flags are available. (Better yet, read the documentation!)
14 #
15
16 AC_INIT([The Glorious Glasgow Haskell Compilation System], [6.11], [glasgow-haskell-bugs@haskell.org], [ghc])
17
18 # Set this to YES for a released version, otherwise NO
19 : ${RELEASE=NO}
20
21 # The primary version (e.g. 6.7, 6.6.1) is set in the AC_INIT line
22 # above.  If this is not a released version, then we will append the
23 # date to the version number (e.g. 6.7.20070204).  The date is
24 # constructed by finding the date of the most recent patch in the
25 # darcs repository.  If this is a source distribution (not a darcs
26 # checkout), then we ship a file 'VERSION' containing the full version
27 # when the source distribution was created.
28
29 if test ! -f mk/config.h.in; then
30    echo "mk/config.h.in doesn't exist: perhaps you haven't run 'sh boot'?"
31    exit 1
32 fi
33
34 AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
35
36 FP_SETUP_PROJECT_VERSION
37
38 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
39 AC_SUBST([release], [1])
40
41 # First off, a distrib sanity check..
42 AC_CONFIG_SRCDIR([mk/config.mk.in])
43
44 dnl * We require autoconf version 2.52
45 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
46 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
47 AC_PREREQ([2.52])
48
49 # -------------------------------------------------------------------------
50 # Prepare to generate the following header files
51 #
52 #
53 AC_CONFIG_HEADER(mk/config.h)
54
55 # No, semi-sadly, we don't do `--srcdir'...
56 if test x"$srcdir" != 'x.' ; then
57     echo "This configuration does not support the \`--srcdir' option.."
58     exit 1
59 fi
60
61 dnl--------------------------------------------------------------------
62 dnl * Deal with arguments telling us gmp is somewhere odd
63 dnl--------------------------------------------------------------------
64
65 FP_ARG_GMP
66
67 GMP_INCLUDE_DIRS=
68 GMP_LIB_DIRS=
69 if test "x$gmp_libraries" != "xNONE"; then
70   LDFLAGS="-L$gmp_libraries $LDFLAGS"
71   GMP_LIB_DIRS=$gmp_libraries
72 fi
73 if test "x$gmp_includes" != "xNONE"; then
74   CPPFLAGS="-I$gmp_includes $CPPFLAGS"
75   GMP_INCLUDE_DIRS=$gmp_includes
76 fi
77 AC_SUBST(GMP_INCLUDE_DIRS)
78 AC_SUBST(GMP_LIB_DIRS)
79
80 dnl--------------------------------------------------------------------
81 dnl * Choose host(/target/build) platform
82 dnl--------------------------------------------------------------------
83
84 dnl Guess host/target/build platform(s) if necessary.
85 AC_CANONICAL_TARGET
86
87 # "$host" defaults to "$target"
88 if test "x$host" = xNONE ; then
89     host=$target
90 fi
91
92 dnl ** canonicalize platform names
93 BuildPlatform=`/bin/sh $srcdir/config.sub $build` || exit 1
94 HostPlatform=`/bin/sh $srcdir/config.sub $host` || exit 1
95 TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1
96
97 if test x"$TargetPlatform" != x"$HostPlatform" ; then
98     AC_MSG_ERROR([
99       GHC configuration does not support differing host/target (i.e., cross-compiling)])
100 fi
101
102 case $HostPlatform in
103 *-cygwin*)
104     AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
105     AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
106     HostPlatform=i386-unknown-mingw32  
107     ;;
108 esac
109
110 exeext=''
111 soext='.so'
112 #
113 # The following will be more difficult when we *are* cross-compiling.
114 # Suitable names to slam in *_CPP are in platform.h.in.
115 # We also record the architecture, vendor, and operating system (OS)
116 # separately.
117 case $HostPlatform in
118 alpha*-dec-osf[[12]]*)
119         HostPlatform=alpha-dec-osf1   # canonicalise for our purposes
120         TargetPlatform=alpha-dec-osf1 # this will work for now... (hack)
121         BuildPlatform=alpha-dec-osf1  # hack
122         HostPlatform_CPP='alpha_dec_osf1'
123         HostArch_CPP='alpha'
124         HostVendor_CPP='dec'
125         HostOS_CPP='osf1'
126         ;;
127 alpha*-dec-osf[[345]]*)
128         HostPlatform=alpha-dec-osf3   # canonicalise for our purposes
129         TargetPlatform=alpha-dec-osf3 # this will work for now... (hack)
130         BuildPlatform=alpha-dec-osf3  # hack
131         HostPlatform_CPP='alpha_dec_osf3'
132         HostArch_CPP='alpha'
133         HostVendor_CPP='dec'
134         HostOS_CPP='osf3'
135         ;;
136 alpha*-unknown-linux*)
137         HostPlatform=alpha-unknown-linux
138         TargetPlatform=alpha-unknown-linux
139         BuildPlatform=alpha-unknown-linux
140         HostPlatform_CPP='alpha_unknown_linux'
141         HostArch_CPP='alpha'
142         HostVendor_CPP='unknown'
143         HostOS_CPP='linux'
144         ;;
145 alpha*-unknown-freebsd*)
146         HostPlatform=alpha-unknown-freebsd
147         TargetPlatform=alpha-unknown-freebsd
148         BuildPlatform=alpha-unknown-freebsd
149         HostPlatform_CPP='alpha_unknown_freebsd'
150         HostArch_CPP='alpha'
151         HostVendor_CPP='unknown'
152         HostOS_CPP='freebsd'
153         ;;
154 alpha*-unknown-openbsd*)
155         HostPlatform=alpha-unknown-openbsd
156         TargetPlatform=alpha-unknown-openbsd
157         BuildPlatform=alpha-unknown-openbsd
158         HostPlatform_CPP='alpha_unknown_openbsd'
159         HostArch_CPP='alpha'
160         HostVendor_CPP='unknown'
161         HostOS_CPP='openbsd'
162         ;;
163 amd64-*-openbsd*|x86_64-*-openbsd*)
164         HostPlatform=x86_64-unknown-openbsd
165         TargetPlatform=x86_64-unknown-openbsd
166         BuildPlatform=x86_64-unknown-openbsd
167         HostPlatform_CPP='x86_64_unknown_openbsd'
168         HostArch_CPP='x86_64'
169         HostVendor_CPP='unknown'
170         HostOS_CPP='openbsd'
171         ;;
172 amd64-*-freebsd*|x86_64-*-freebsd*)
173         HostPlatform=x86_64-unknown-freebsd
174         TargetPlatform=x86_64-unknown-freebsd
175         BuildPlatform=x86_64-unknown-freebsd
176         HostPlatform_CPP='x86_64_unknown_freebsd'
177         HostArch_CPP='x86_64'
178         HostVendor_CPP='unknown'
179         HostOS_CPP='freebsd'
180         ;;
181 amd64-*-netbsd*|x86_64-*-netbsd*)
182         HostPlatform=x86_64-unknown-netbsd
183         TargetPlatform=x86_64-unknown-netbsd
184         BuildPlatform=x86_64-unknown-netbsd
185         HostPlatform_CPP='x86_64_unknown_netbsd'
186         HostArch_CPP='x86_64'
187         HostVendor_CPP='unknown'
188         HostOS_CPP='netbsd'
189         ;;
190 arm*-linux*)
191         HostPlatform=arm-unknown-linux # hack again
192         TargetPlatform=arm-unknown-linux
193         BuildPlatform=arm-unknown-linux
194         HostPlatform_CPP='arm_unknown_linux'
195         HostArch_CPP='arm'
196         HostVendor_CPP='unknown'
197         HostOS_CPP='linux'
198         ;;
199 arm*-openbsd*)
200         HostPlatform=arm-unknown-openbsd
201         TargetPlatform=arm-unknown-openbsd
202         BuildPlatform=arm-unknown-openbsd
203         HostPlatform_CPP='arm_unknown_openbsd'
204         HostArch_CPP='arm'
205         HostVendor_CPP='unknown'
206         HostOS_CPP='openbsd'
207         ;;
208 hppa*-*-linux*)
209         HostPlatform=hppa-unknown-linux # hack again
210         TargetPlatform=hppa-unknown-linux
211         BuildPlatform=hppa-unknown-linux
212         HostPlatform_CPP='hppa_unknown_linux'
213         HostArch_CPP='hppa'
214         HostVendor_CPP='unknown'
215         HostOS_CPP='linux'
216         ;;
217 hppa*-*-openbsd*)
218         HostPlatform=hppa-unknown-openbsd # hack again
219         TargetPlatform=hppa-unknown-openbsd
220         BuildPlatform=hppa-unknown-openbsd
221         HostPlatform_CPP='hppa_unknown_openbsd'
222         HostArch_CPP='hppa'
223         HostVendor_CPP='unknown'
224         HostOS_CPP='openbsd'
225         ;;
226 hppa1.1-hp-hpux*)
227         HostPlatform=hppa1.1-hp-hpux  # canonicalise for our purposes (hack)
228         TargetPlatform=hppa1.1-hp-hpux
229         BuildPlatform=hppa1.1-hp-hpux
230         HostPlatform_CPP='hppa1_1_hp_hpux'
231         HostArch_CPP='hppa1_1'
232         HostVendor_CPP='hp'
233         HostOS_CPP='hpux'
234         ;;
235 i[[3456]]86-*-linuxaout*)
236         HostPlatform=i386-unknown-linuxaout   # hack again
237         TargetPlatform=i386-unknown-linuxaout
238         BuildPlatform=i386-unknown-linuxaout
239         HostPlatform_CPP='i386_unknown_linuxaout'
240         HostArch_CPP='i386'
241         HostVendor_CPP='unknown'
242         HostOS_CPP='linuxaout'
243         ;;
244 i[[3456]]86-*-linux*)
245         HostPlatform=i386-unknown-linux # hack again
246         TargetPlatform=i386-unknown-linux
247         BuildPlatform=i386-unknown-linux
248         HostPlatform_CPP='i386_unknown_linux'
249         HostArch_CPP='i386'
250         HostVendor_CPP='unknown'
251         HostOS_CPP='linux'
252         ;;
253 i[[3456]]86-*-kfreebsd*-gnu)
254         HostPlatform=i386-unknown-kfreebsdgnu # hack again
255         TargetPlatform=i386-unknown-kfreebsdgnu
256         BuildPlatform=i386-unknown-kfreebsdgnu
257         HostPlatform_CPP='i386_unknown_kfreebsdgnu'
258         HostArch_CPP='i386'
259         HostVendor_CPP='unknown'
260         HostOS_CPP='kfreebsdgnu'
261         ;;
262 i[[3456]]86-*-freebsd[[3-9]]*) # FreeBSD 3.0+ uses ELF
263         HostPlatform=i386-unknown-freebsd # hack again
264         TargetPlatform=i386-unknown-freebsd
265         BuildPlatform=i386-unknown-freebsd
266         HostPlatform_CPP='i386_unknown_freebsd'
267         HostArch_CPP='i386'
268         HostVendor_CPP='unknown'
269         HostOS_CPP='freebsd'
270         ;;
271 i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out
272         HostPlatform=i386-unknown-freebsd2 # hack again
273         TargetPlatform=i386-unknown-freebsd2
274         BuildPlatform=i386-unknown-freebsd2
275         HostPlatform_CPP='i386_unknown_freebsd2'
276         HostArch_CPP='i386'
277         HostVendor_CPP='unknown'
278         HostOS_CPP='freebsd2'
279         ;;
280 i[[3456]]86-*-netbsd*)
281         HostPlatform=i386-unknown-netbsd # hack again
282         TargetPlatform=i386-unknown-netbsd
283         BuildPlatform=i386-unknown-netbsd
284         HostPlatform_CPP='i386_unknown_netbsd'
285         HostArch_CPP='i386'
286         HostVendor_CPP='unknown'
287         HostOS_CPP='netbsd'
288         ;;
289 i[[3456]]86-*-openbsd*)
290         HostPlatform=i386-unknown-openbsd # hack again
291         TargetPlatform=i386-unknown-openbsd
292         BuildPlatform=i386-unknown-openbsd
293         HostPlatform_CPP='i386_unknown_openbsd'
294         HostArch_CPP='i386'
295         HostVendor_CPP='unknown'
296         HostOS_CPP='openbsd'
297         ;;
298 i[[3456]]86-*-solaris2*)
299         HostPlatform=i386-unknown-solaris2 # hack again
300         TargetPlatform=i386-unknown-solaris2
301         BuildPlatform=i386-unknown-solaris2
302         HostPlatform_CPP='i386_unknown_solaris2'
303         HostArch_CPP='i386'
304         HostVendor_CPP='unknown'
305         HostOS_CPP='solaris2'
306         ;;
307 i[[3456]]86-*-cygwin*)
308         HostPlatform=i386-unknown-cygwin32 # hack again
309         TargetPlatform=i386-unknown-cygwin32
310         BuildPlatform=i386-unknown-cygwin32
311         HostPlatform_CPP='i386_unknown_cygwin32'
312         HostArch_CPP='i386'
313         HostVendor_CPP='unknown'
314         HostOS_CPP='cygwin32'
315         exeext='.exe'
316         soext='.dll'
317         ;;
318 i[[3456]]86-*-mingw32*)
319         HostPlatform=i386-unknown-mingw32 # hack again
320         TargetPlatform=i386-unknown-mingw32
321         BuildPlatform=i386-unknown-mingw32
322         HostPlatform_CPP='i386_unknown_mingw32'
323         HostArch_CPP='i386'
324         HostVendor_CPP='unknown'
325         HostOS_CPP='mingw32'
326         exeext='.exe'
327         soext='.dll'
328         ;;
329 i[[3456]]86-apple-darwin*)
330         HostPlatform=i386-apple-darwin
331         TargetPlatform=i386-apple-darwin #hack
332         BuildPlatform=i386-apple-darwin #hack
333         HostPlatform_CPP='i386_apple_darwin'
334         HostArch_CPP='i386'
335         HostVendor_CPP='apple'
336         HostOS_CPP='darwin'
337         soext='.dylib'
338         ;;
339 i[[3456]]86-*-gnu*)
340         HostPlatform=i386-unknown-gnu
341         TargetPlatform=i386-unknown-gnu
342         BuildPlatform=i386-unknown-gnu
343         HostPlatform_CPP=i386_unknown_gnu
344         HostArch_CPP=i386
345         HostVendor_CPP=unknown
346         HostOS_CPP=gnu
347         ;;
348 ia64-*-linux*)
349         HostPlatform=ia64-unknown-linux # hack again
350         TargetPlatform=ia64-unknown-linux
351         BuildPlatform=ia64-unknown-linux
352         HostPlatform_CPP='ia64_unknown_linux'
353         HostArch_CPP='ia64'
354         HostVendor_CPP='unknown'
355         HostOS_CPP='linux'
356         ;;
357 x86_64-*-linux*)
358         HostPlatform=x86_64-unknown-linux
359         TargetPlatform=x86_64-unknown-linux
360         BuildPlatform=x86_64-unknown-linux
361         HostPlatform_CPP='x86_64_unknown_linux'
362         HostArch_CPP='x86_64'
363         HostVendor_CPP='unknown'
364         HostOS_CPP='linux'
365         ;;
366 x86_64-apple-darwin*)
367         HostPlatform=x86_64-apple-darwin
368         TargetPlatform=x86_64-apple-darwin
369         BuildPlatform=x86_64-apple-darwin
370         HostPlatform_CPP='x86_64_apple_darwin'
371         HostArch_CPP='x86_64'
372         HostVendor_CPP='apple'
373         HostOS_CPP='darwin'
374         soext='.dylib'
375         ;;
376 m68k-*-linux*)
377         HostPlatform=m68k-unknown-linux # hack again
378         TargetPlatform=m68k-unknown-linux
379         BuildPlatform=m68k-unknown-linux
380         HostPlatform_CPP='m68k_unknown_linux'
381         HostArch_CPP='m68k'
382         HostVendor_CPP='unknown'
383         HostOS_CPP='linux'
384         ;;
385 m68k-next-nextstep2)
386         HostPlatform_CPP='m68k_next_nextstep2'
387         HostArch_CPP='m68k'
388         HostVendor_CPP='next'
389         HostOS_CPP='nextstep2'
390         ;;
391 m68k-next-nextstep3)
392         HostPlatform_CPP='m68k_next_nextstep3'
393         HostArch_CPP='m68k'
394         HostVendor_CPP='next'
395         HostOS_CPP='nextstep3'
396         ;;
397 i[[3456]]86-next-nextstep3)
398         HostPlatform=i386-next-nextstep3 # hack again
399         TargetPlatform=i386-next-nextstep3
400         BuildPlatform=i386-next-nextstep3
401         HostPlatform_CPP='i386_next_nextstep3'
402         HostArch_CPP='i386'
403         HostVendor_CPP='next'
404         HostOS_CPP='nextstep3'
405         ;;
406 m68k-*-openbsd*)
407         HostPlatform=m68k-unknown-openbsd
408         TargetPlatform=m68k-unknown-openbsd
409         BuildPlatform=m68k-unknown-openbsd
410         HostPlatform_CPP='m68k_unknown_openbsd'
411         HostArch_CPP='m68k'
412         HostVendor_CPP='unknown'
413         HostOS_CPP='openbsd'
414         ;;
415 m68k-*-netbsd*)
416         HostPlatform=m68k-unknown-netbsd
417         TargetPlatform=m68k-unknown-netbsd
418         BuildPlatform=m68k-unknown-netbsd
419         HostPlatform_CPP='m68k_unknown_netbsd'
420         HostArch_CPP='m68k'
421         HostVendor_CPP='unknown'
422         HostOS_CPP='netbsd'
423         ;;
424 m68k-sun-sunos4*)
425         HostPlatform=m68k-sun-sunos4
426         TargetPlatform=m68k-sun-sunos4 #hack
427         BuildPlatform=m68k-sun-sunos4 #hack
428         HostPlatform_CPP='m68k_sun_sunos4'
429         HostArch_CPP='m68k'
430         HostVendor_CPP='sun'
431         HostOS_CPP='sunos4'
432         ;;
433 m88k-*-openbsd*)
434         HostPlatform=m88k-unknown-openbsd
435         TargetPlatform=m88k-unknown-openbsd
436         BuildPlatform=m88k-unknown-openbsd
437         HostPlatform_CPP='m88k_unknown_openbsd'
438         HostArch_CPP='m88k'
439         HostVendor_CPP='unknown'
440         HostOS_CPP='openbsd'
441         ;;
442 mips-*-linux*)
443         HostPlatform=mips-unknown-linux # hack again
444         TargetPlatform=mips-unknown-linux
445         BuildPlatform=mips-unknown-linux
446         HostPlatform_CPP='mips_unknown_linux'
447         HostArch_CPP='mips'
448         HostVendor_CPP='unknown'
449         HostOS_CPP='linux'
450         ;;
451 mipsel-*-linux*)
452         HostPlatform=mipsel-unknown-linux # hack again
453         TargetPlatform=mipsel-unknown-linux
454         BuildPlatform=mipsel-unknown-linux
455         HostPlatform_CPP='mipsel_unknown_linux'
456         HostArch_CPP='mipsel'
457         HostVendor_CPP='unknown'
458         HostOS_CPP='linux'
459         ;;
460 mips-dec-ultrix*)
461         HostPlatform_CPP='mips_dec_ultrix'
462         HostArch_CPP='mipsel'   # NB a little different
463         HostVendor_CPP='dec'
464         HostOS_CPP='ultrix'
465         ;;
466 mips-sgi-irix*)
467         HostPlatform=mips-sgi-irix
468         TargetPlatform=mips-sgi-irix #hack
469         BuildPlatform=mips-sgi-irix #hack
470         HostPlatform_CPP='mips_sgi_irix'
471         HostArch_CPP='mipseb'   # NB a little different
472         HostVendor_CPP='sgi'
473         HostOS_CPP='irix'
474         ;;
475 rs6000-ibm-aix*)
476         HostPlatform=rs6000-ibm-aix
477         TargetPlatform=rs6000-ibm-aix #hack
478         BuildPlatform=rs6000-ibm-aix #hack
479         HostPlatform_CPP='rs6000_ibm_aix'
480         HostArch_CPP='rs6000'
481         HostVendor_CPP='ibm'
482         HostOS_CPP='aix'
483         ;;
484 powerpc-ibm-aix*)
485         HostPlatform=powerpc-ibm-aix
486         TargetPlatform=powerpc-ibm-aix #hack
487         BuildPlatform=powerpc-ibm-aix #hack
488         HostPlatform_CPP='powerpc_ibm_aix'
489         HostArch_CPP='powerpc'
490         HostVendor_CPP='ibm'
491         HostOS_CPP='aix'
492         ;;
493 powerpc-apple-darwin*)
494         HostPlatform=powerpc-apple-darwin
495         TargetPlatform=powerpc-apple-darwin #hack
496         BuildPlatform=powerpc-apple-darwin #hack
497         HostPlatform_CPP='powerpc_apple_darwin'
498         HostArch_CPP='powerpc'
499         HostVendor_CPP='apple'
500         HostOS_CPP='darwin'
501         soext='.dylib'
502         ;;
503 powerpc-unknown-linux*)
504         HostPlatform=powerpc-unknown-linux
505         TargetPlatform=powerpc-unknown-linux
506         BuildPlatform=powerpc-unknown-linux
507         HostPlatform_CPP='powerpc_unknown_linux'
508         HostArch_CPP='powerpc'
509         HostVendor_CPP='unknown'
510         HostOS_CPP='linux'
511         ;;
512 powerpc-unknown-openbsd*)
513         HostPlatform=powerpc-unknown-openbsd
514         TargetPlatform=powerpc-unknown-openbsd
515         BuildPlatform=powerpc-unknown-openbsd
516         HostPlatform_CPP='powerpc_unknown_openbsd'
517         HostArch_CPP='powerpc'
518         HostVendor_CPP='unknown'
519         HostOS_CPP='openbsd'
520         ;;
521 powerpc64-unknown-linux*)
522         HostPlatform=powerpc64-unknown-linux
523         TargetPlatform=powerpc64-unknown-linux
524         BuildPlatform=powerpc64-unknown-linux
525         HostPlatform_CPP='powerpc64_unknown_linux'
526         HostArch_CPP='powerpc64'
527         HostVendor_CPP='unknown'
528         HostOS_CPP='linux'
529         ;;
530
531 s390-ibm-linux*)
532        HostPlatform=s390-ibm-linux
533        TargetPlatform=s390-ibm-linux #hack
534        BuildPlatform=s390-ibm-linux #hack
535         HostPlatform_CPP='s390_ibm_linux'
536         HostArch_CPP='s390'
537         HostVendor_CPP='ibm'
538         HostOS_CPP='linux'
539         ;;
540 sparc-sun-sunos4*)
541         HostPlatform=sparc-sun-sunos4
542         TargetPlatform=sparc-sun-sunos4 #hack
543         BuildPlatform=sparc-sun-sunos4 #hack
544         HostPlatform_CPP='sparc_sun_sunos4'
545         HostArch_CPP='sparc'
546         HostVendor_CPP='sun'
547         HostOS_CPP='sunos4'
548         ;;
549 sparc-sun-solaris2*)
550         HostPlatform=sparc-sun-solaris2
551         TargetPlatform=sparc-sun-solaris2 #hack
552         BuildPlatform=sparc-sun-solaris2 #hack
553         HostPlatform_CPP='sparc_sun_solaris2'
554         HostArch_CPP='sparc'
555         HostVendor_CPP='sun'
556         HostOS_CPP='solaris2'
557         ;;
558 sparc*-linux*)
559         HostPlatform=sparc-unknown-linux
560         TargetPlatform=sparc-unknown-linux
561         BuildPlatform=sparc-unknown-linux
562         HostPlatform_CPP='sparc_unknown_linux'
563         HostArch_CPP='sparc'
564         HostVendor_CPP='unknown'
565         HostOS_CPP='linux'
566         ;;
567 sparc-*-openbsd*)
568         HostPlatform=sparc-unknown-openbsd
569         TargetPlatform=sparc-unknown-openbsd
570         BuildPlatform=sparc-unknown-openbsd
571         HostPlatform_CPP='sparc_unknown_openbsd'
572         HostArch_CPP='sparc'
573         HostVendor_CPP='unknown'
574         HostOS_CPP='openbsd'
575         ;;
576 sparc64-*-openbsd*)
577         HostPlatform=sparc64-unknown-openbsd
578         TargetPlatform=sparc64-unknown-openbsd
579         BuildPlatform=sparc64-unknown-openbsd
580         HostPlatform_CPP='sparc64_unknown_openbsd'
581         HostArch_CPP='sparc64'
582         HostVendor_CPP='unknown'
583         HostOS_CPP='openbsd'
584         ;;
585 vax-*-openbsd*)
586         HostPlatform=vax-unknown-openbsd
587         TargetPlatform=vax-unknown-openbsd
588         BuildPlatform=vax-unknown-openbsd
589         HostPlatform_CPP='vax_unknown_openbsd'
590         HostArch_CPP='vax'
591         HostVendor_CPP='unknown'
592         HostOS_CPP='openbsd'
593         ;;
594 *)
595         echo "Unrecognised platform: $HostPlatform"
596         exit 1
597         ;;
598 esac
599 echo "Canonicalised to: $HostPlatform"
600 test  x"$HostPlatform" != x"$TargetPlatform" && echo "Target platform set to $TargetPlatform"
601 test  x"$BuildPlatform" != x"$HostPlatform"  && echo "Build platform set to $BuildPlatform"
602
603 BuildPlatform_CPP=$HostPlatform_CPP
604 TargetPlatform_CPP=$HostPlatform_CPP
605 BuildArch_CPP=$HostArch_CPP
606 TargetArch_CPP=$HostArch_CPP
607 BuildOS_CPP=$HostOS_CPP
608 HostOS_Full=$host_os
609 TargetOS_CPP=$HostOS_CPP
610 BuildVendor_CPP=$HostVendor_CPP
611 TargetVendor_CPP=$HostVendor_CPP
612
613 AC_SUBST(BuildPlatform)
614 AC_SUBST(HostPlatform)
615 AC_SUBST(TargetPlatform)
616 AC_SUBST(HostPlatform_CPP)
617 AC_SUBST(BuildPlatform_CPP)
618 AC_SUBST(TargetPlatform_CPP)
619
620 AC_SUBST(HostArch_CPP)
621 AC_SUBST(BuildArch_CPP)
622 AC_SUBST(TargetArch_CPP)
623
624 AC_SUBST(HostOS_CPP)
625 AC_SUBST(HostOS_Full)
626 AC_SUBST(BuildOS_CPP)
627 AC_SUBST(TargetOS_CPP)
628
629 AC_SUBST(HostVendor_CPP)
630 AC_SUBST(BuildVendor_CPP)
631 AC_SUBST(TargetVendor_CPP)
632
633 AC_SUBST(exeext)
634 AC_SUBST(soext)
635
636 dnl --------------------------------------------------------------
637 dnl * Project specific configuration options
638 dnl --------------------------------------------------------------
639 dnl What follows is a bunch of options that can either be configured
640 dnl through command line options to the configure script or by
641 dnl supplying defns in the build tree's mk/build.mk. Having the option to
642 dnl use either is considered a Feature.
643
644 dnl ** What command to use to compile compiler sources ?
645 dnl --------------------------------------------------------------
646
647 AC_ARG_WITH([ghc],
648 [AC_HELP_STRING([--with-ghc=ARG],
649   [Use ARG as the path to GHC  [default=autodetect]])],
650   [WithGhc="$withval"],
651   [if test "$GHC" = ""; then
652     AC_PATH_PROG([GHC], [ghc])
653   fi
654   WithGhc="$GHC"])
655 # GHC is passed to Cabal, so we need a native path
656 if test "${WithGhc}" != "" && test "$HostPlatform" = "i386-unknown-mingw32"
657 then
658     if test "${OSTYPE}" = "msys"
659     then
660         WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
661     else
662         # Canonicalise to <drive>:/path/to/ghc
663         WithGhc=`cygpath -m ${WithGhc}`
664     fi
665     echo "Canonicalised to: ${WithGhc}"
666 fi
667 AC_SUBST([WithGhc])
668
669 AC_ARG_WITH(hc,
670 [AC_HELP_STRING([--with-hc=ARG],
671         [Use ARG as the path to the compiler for compiling ordinary
672          Haskell code  (default= value of --with-ghc)])],
673 [WithHc="$withval"],
674 [WithHc=$WithGhc]
675 )
676 AC_SUBST(WithHc)
677
678 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
679 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
680                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
681         EnableBootstrapWithDevelSnaphost=YES,
682         EnableBootstrapWithDevelSnaphost=NO
683 )
684
685 if test "$WithGhc" != ""; then
686   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
687
688   if test `expr $GhcMinVersion % 2` = "1"; then
689      echo $EnableBootstrapWithDevelSnaphost
690      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
691         AC_MSG_ERROR([
692      $WithGhc is a development snapshot of GHC, version $GhcVersion.
693      Bootstrapping using this version of GHC is not supported, and may not
694      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
695      or --with-ghc to specify a different GHC to use.])
696      fi
697   fi
698
699   AC_SUBST(GhcVersion)dnl
700   AC_SUBST(GhcMajVersion)dnl
701   AC_SUBST(GhcMinVersion)dnl
702   AC_SUBST(GhcPatchLevel)dnl
703   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
704   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
705   if test $GhcCanonVersion -ge 607; then ghc_ge_607=YES; else ghc_ge_607=NO; fi
706   if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi
707   AC_SUBST(ghc_ge_607)dnl
708   AC_SUBST(ghc_ge_609)dnl
709 fi
710
711 AC_PATH_PROGS(NHC,nhc nhc98)
712 AC_PATH_PROG(HBC,hbc)
713
714 dnl ** Which gcc to use?
715 dnl --------------------------------------------------------------
716 AC_ARG_WITH(gcc,
717 [AC_HELP_STRING([--with-gcc=ARG],
718         [Use ARG as the path to GCC  [default=autodetect]])],
719 [WhatGccIsCalled="$withval"
720  if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
721     test "${OSTYPE}"      != "msys"                  && \
722     test "${withval}"     != ""
723  then
724      # Canonicalise to <drive>:/path/to/gcc
725      withval=`cygpath -m ${withval}`
726  fi;
727  CC="$withval"
728  export CC
729  ],
730 [WhatGccIsCalled="gcc"]
731 )
732 AC_SUBST(WhatGccIsCalled)
733
734 dnl ** Which ld to use?
735 dnl --------------------------------------------------------------
736 AC_ARG_WITH(ld,
737 [AC_HELP_STRING([--with-ld=ARG],
738         [Use ARG as the path to LD  [default=autodetect]])],
739 [if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
740     test "${OSTYPE}"      != "msys"                  && \
741     test "${withval}"     != ""
742  then
743      # Canonicalise to <drive>:/path/to/ld
744      withval=`cygpath -m ${withval}`
745  fi;
746  LD=$withval
747  FP_PROG_LD([$LD])
748  ],
749  [FP_PROG_LD()]
750 )
751
752 dnl ** Build shared and/or static libs?
753 dnl --------------------------------------------------------------
754 AC_ARG_ENABLE(shared,
755 [AC_HELP_STRING([--enable-shared],
756 [Build shared libraries, if available (EXPERIMENTAL, non-working). [default=no]])],
757 [ if test x"$enableval" = x"yes"; then
758         AC_MSG_WARN([--enable-shared is experimental and not fully supported at this time])
759         BuildSharedLibs=YES
760   else
761         BuildSharedLibs=NO
762   fi
763 ],
764 [BuildSharedLibs=NO]
765 )
766 AC_SUBST(BuildSharedLibs)
767
768 # ToDo later:
769 # AC_ARG_ENABLE(static,
770 # [AC_HELP_STRING([--enable-static],
771 # [Build static libraries. [default=yes]])],
772 # [ if test x"$enableval" = x"yes"; then
773 #         BuildStaticLibs=YES
774 #   else
775 #         BuildStaticLibs=NO
776 #   fi
777 # ],
778 # [BuildStaticLibs=YES]
779 # )
780 # AC_SUBST(BuildStaticLibs)
781
782 dnl ** Booting from .hc files?
783 dnl --------------------------------------------------------------
784 AC_ARG_ENABLE(hc-boot,
785 [AC_HELP_STRING([--enable-hc-boot],
786 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
787  (This option is mostly of interest to porters.) [default=no]])],
788 [ if test x"$enableval" = x"yes"; then
789         BootingFromHc=YES
790   else
791         BootingFromHc=NO
792   fi
793 ],
794 [BootingFromHc=NO]
795 )
796 AC_SUBST(BootingFromHc)
797
798 dnl ** Booting from unregisterised .hc files?
799 dnl --------------------------------------------------------------
800 AC_ARG_ENABLE(hc-boot-unregisterised,
801 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
802 [ With --enable-hc-boot, treat the intermediate .hc files as
803  unregisterised rather than registerised code.
804  (This option is mostly of interest to porters.) [default=no]])],
805 [ if test x"$enableval" = x"yes"; then
806         BootingFromUnregisterisedHc=YES
807   else
808         BootingFromUnregisterisedHc=NO
809   fi
810 ],
811 [BootingFromUnregisterisedHc=NO]
812 )
813 AC_SUBST(BootingFromUnregisterisedHc)
814
815 if test "$BootingFromHc" = "NO"; then
816 if test "$BootingFromUnregisterisedHc" = "YES"; then
817 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
818 fi;
819 fi;
820
821 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
822 if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then
823   if test "$WithGhc" = ""; then
824      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
825   fi
826   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.6],
827     [AC_MSG_ERROR([GHC version 6.6 or later is required to compile GHC.])])dnl
828 fi;
829
830 # This uses GHC, so put it after the "GHC is required" check above:
831 FP_FIND_ROOT
832
833 dnl ** Enable the construction of Win32 DLLs?
834 dnl --------------------------------------------------------------
835 dnl
836 dnl [ The ability to build the RTS and libraries as separate DLLs used
837 dnl   to be supported, but isn't currently (updates to the RTS, compiler
838 dnl   and build system would be required to bring it back again.)
839 dnl   Hence, exposing it as an option is false advertisement, so better
840 dnl   disable it to avoid confusion (but leave it commented-out rather
841 dnl   than removed in order to remind ourselves to bring back the
842 dnl   feature at some stage.) ]
843 dnl
844 dnl AC_ARG_ENABLE(win32-dlls,
845 dnl [  --enable-win32-dlls
846 dnl         If on a Win32 platform running mingw32/cygwin, enable the
847 dnl         construction of DLLs containing ghc-compiled code.
848 dnl ],
849 dnl [
850 dnl case $HostOS_CPP in
851 dnl cygwin32) ;;
852 dnl mingw32)  ;;
853 dnl *)    echo "Unrecognised win32 platform: $HostPlatform"
854 dnl       exit 1
855 dnl       ;;
856 dnl esac
857 dnl EnableWin32DLLs=YES
858 dnl ],
859 dnl [EnableWin32DLLs=NO]
860 dnl )
861 dnl AC_SUBST(EnableWin32DLLs)
862 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
863 dnl  AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
864 dnl fi
865
866 dnl ** Mac OS X: explicit deployment target
867 dnl --------------------------------------------------------------
868 AC_ARG_WITH([macosx-deployment-target],
869 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
870         [Build for Mac OS VERSION and higher  (default= version of build host)])],
871 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
872  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
873    # ignore everywhere, but on Mac OS
874    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
875    FP_MACOSX_DEPLOYMENT_TARGET=none
876  fi],
877 [FP_MACOSX_DEPLOYMENT_TARGET=none]
878 )
879 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
880 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
881 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
882
883 dnl --------------------------------------------------------------
884 dnl End of configure script option section
885 dnl --------------------------------------------------------------
886
887
888 dnl --------------------------------------------------------------
889 dnl * General configuration checks
890 dnl --------------------------------------------------------------
891
892 dnl ** Can the unix package be built?
893 dnl --------------------------------------------------------------
894
895 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
896    GhcLibsWithUnix=NO
897 else
898    GhcLibsWithUnix=YES
899 fi
900 AC_SUBST([GhcLibsWithUnix])
901
902 dnl ** does #! work?
903 AC_SYS_INTERPRETER()
904
905 dnl ** look for `perl', but only in /bin on Windows
906 case $HostOS_CPP in
907 cygwin32|mingw32)
908       AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
909       if test -z "$PerlCmd"; then
910          echo "You must install the version of Perl shipped with GHC"
911          echo "(or a compatible one) in /bin."
912          exit 1
913       fi
914    ;;
915 *)
916    AC_PATH_PROG(PerlCmd,perl)
917    if test -z "$PerlCmd"; then
918       echo "You must install perl before you can continue"
919       echo "Perhaps it is already installed, but not in your PATH?"
920       exit 1
921    else
922    FPTOOLS_CHECK_PERL_VERSION
923    fi
924    ;;
925 esac
926
927 dnl ** does #! path/to/perl work? (sometimes it's too long...)
928 FPTOOLS_SHEBANG_PERL
929
930 dnl ** check for Python
931 AC_PATH_PROG(PythonCmd,python)
932
933 dnl ** look for GCC and find out which version
934 dnl     Figure out which C compiler to use.  Gcc is preferred.
935 dnl     If gcc, make sure it's at least 2.1
936 dnl
937 FP_HAVE_GCC
938 FP_MINGW_GCC
939 FP_GCC_EXTRA_FLAGS
940
941 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
942 AC_PROG_CPP
943
944 dnl ** Without optimization some INLINE trickery fails for GHCi
945 SRC_CC_OPTS="-O"
946
947 AC_SUBST(SRC_CC_OPTS)
948
949 dnl ** figure out how to do context diffs
950 FP_PROG_CONTEXT_DIFF
951
952 dnl ** Find find command (for Win32's benefit)
953 FP_PROG_FIND
954
955 dnl ** Find sort command (for the benefit of Win32 environs)
956 FP_PROG_SORT
957
958 dnl Let's make sure install-sh is executable here.  If we got it from
959 dnl a darcs repo, it might not be (see bug #978).
960 chmod +x install-sh
961 dnl ** figure out how to do a BSD-ish install
962 AC_PROG_INSTALL
963
964 dnl If you can run configure, you certainly have /bin/sh
965 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
966
967 dnl ** how to invoke `ar' and `ranlib'
968 FP_PROG_AR_NEEDS_RANLIB
969 FP_PROG_AR_SUPPORTS_INPUT
970
971 dnl ** Check to see whether ln -s works
972 AC_PROG_LN_S
973
974
975 dnl ** Find the path to sed
976 AC_PATH_PROG(SedCmd,sed)
977
978
979 dnl ** check for time command
980 AC_PATH_PROG(TimeCmd,time)
981
982 dnl ** check for tar
983 dnl   if GNU tar is named gtar, look for it first.
984 AC_PATH_PROGS(TarCmd,gtar tar,tar)
985
986 dnl ** check for patch
987 dnl if GNU patch is named gpatch, look for it first
988 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
989
990 AC_PATH_PROG(HSCOLOUR,HsColour)
991 # HsColour is passed to Cabal, so we need a native path
992 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
993    test "${OSTYPE}"      != "msys"                  && \
994    test "${HSCOLOUR}"    != ""
995 then
996     # Canonicalise to <drive>:/path/to/gcc
997     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
998 fi
999
1000 dnl ** check for DocBook toolchain
1001 FP_CHECK_DOCBOOK_DTD
1002 FP_DIR_DOCBOOK_XSL([/usr/share/xml/docbook/stylesheet/nwalsh/current /usr/share/xml/docbook/stylesheet/nwalsh /usr/share/xml/docbook/xsl-stylesheets* /usr/share/sgml/docbook/docbook-xsl-stylesheets* /usr/share/sgml/docbook/xsl-stylesheets* /opt/kde?/share/apps/ksgmltools2/docbook/xsl /usr/share/docbook-xsl /usr/share/sgml/docbkxsl /usr/local/share/xsl/docbook /sw/share/xml/xsl/docbook-xsl /opt/local/share/xsl/docbook-xsl])
1003 FP_PROG_FO_PROCESSOR
1004
1005 FP_PROG_DBLATEX
1006
1007 dnl ** check for ghc-pkg command
1008 FP_PROG_GHC_PKG
1009
1010 dnl ** check for installed happy binary + version
1011 dnl    (don't do it if we're booting from .hc files though.)
1012 if test "$BootingFromHc" = "NO"; then
1013 FPTOOLS_HAPPY
1014 fi;
1015
1016 dnl ** check for installed alex binary + version
1017 dnl    (don't do it if we're booting from .hc files though.)
1018 if test "$BootingFromHc" = "NO"; then
1019 FPTOOLS_ALEX
1020 fi;
1021
1022 dnl Check we have an acceptable version of windres
1023 FPTOOLS_WINDRES
1024
1025 dnl --------------------------------------------------
1026 dnl ### program checking section ends here ###
1027 dnl --------------------------------------------------
1028
1029 dnl --------------------------------------------------
1030 dnl * Platform header file and syscall feature tests
1031 dnl ### checking the state of the local header files and syscalls ###
1032
1033 dnl ** check for full ANSI header (.h) files
1034 AC_HEADER_STDC
1035
1036 dnl ** Enable large file support.  NB. do this before testing the type of
1037 dnl    off_t, because it will affect the result of that test.
1038 AC_SYS_LARGEFILE
1039
1040 dnl ** check for specific header (.h) files that we are interested in
1041 AC_CHECK_HEADERS([bfd.h ctype.h dirent.h dlfcn.h errno.h fcntl.h grp.h limits.h locale.h nlist.h pthread.h pwd.h signal.h sys/mman.h sys/resource.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/utsname.h sys/wait.h termios.h time.h utime.h windows.h winsock.h sched.h])
1042
1043 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
1044 AC_HEADER_TIME
1045
1046 dnl ** do we have long longs?
1047 AC_CHECK_TYPES([long long])
1048
1049 dnl ** what are the sizes of various types
1050 AC_CHECK_SIZEOF(char,               1)
1051 AC_CHECK_SIZEOF(double,             8)
1052 AC_CHECK_SIZEOF(float,              4)
1053 AC_CHECK_SIZEOF(int,                4)
1054 AC_CHECK_SIZEOF(long,               4)
1055 if test "$ac_cv_type_long_long" = yes; then
1056 AC_CHECK_SIZEOF(long long,          8)
1057 fi
1058 AC_CHECK_SIZEOF(short,              2)
1059 AC_CHECK_SIZEOF(unsigned char,      1)
1060 AC_CHECK_SIZEOF(unsigned int,       4)
1061 AC_CHECK_SIZEOF(unsigned long,      4)
1062 if test "$ac_cv_type_long_long" = yes; then
1063 AC_CHECK_SIZEOF(unsigned long long, 8)
1064 fi
1065 AC_CHECK_SIZEOF(unsigned short,     2)
1066 AC_CHECK_SIZEOF(void *,             4)
1067
1068 dnl ** what are alignment constraints on various types
1069 FP_CHECK_ALIGNMENT(char)
1070 FP_CHECK_ALIGNMENT(double)
1071 FP_CHECK_ALIGNMENT(float)
1072 FP_CHECK_ALIGNMENT(int)
1073 FP_CHECK_ALIGNMENT(long)
1074 if test "$ac_cv_type_long_long" = yes; then
1075 FP_CHECK_ALIGNMENT(long long)
1076 fi
1077 FP_CHECK_ALIGNMENT(short)
1078 FP_CHECK_ALIGNMENT(unsigned char)
1079 FP_CHECK_ALIGNMENT(unsigned int)
1080 FP_CHECK_ALIGNMENT(unsigned long)
1081 if test "$ac_cv_type_long_long" = yes; then
1082 FP_CHECK_ALIGNMENT(unsigned long long)
1083 fi
1084 FP_CHECK_ALIGNMENT(unsigned short)
1085 FP_CHECK_ALIGNMENT(void *)
1086
1087 FP_CHECK_FUNC([WinExec],
1088   [@%:@include <windows.h>], [WinExec("",0)])
1089
1090 FP_CHECK_FUNC([GetModuleFileName],
1091   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
1092
1093 dnl ** check return type of signal handlers
1094 dnl Foo: assumes we can use prototypes.
1095 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1096 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1097 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1098 dnl #include <signal.h>
1099 dnl #ifdef signal
1100 dnl #undef signal
1101 dnl #endif
1102 dnl void (*signal (int, void (*)(int)))(int);
1103 dnl ]],
1104 dnl [[int i;]])],
1105 dnl [ac_cv_type_signal_handler=void_int],
1106 dnl [ac_cv_type_signal_handler=int_void])])
1107 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1108 dnl AC_DEFINE(VOID_INT_SIGNALS)
1109 dnl fi
1110
1111 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1112 AC_TYPE_SIGNAL
1113 if test "$ac_cv_type_signal" = void; then
1114   AC_DEFINE([VOID_INT_SIGNALS], [1], [Define to 1 if signal handlers have type void (*)(int). Otherwise, they're assumed to have type int (*)(void).])
1115 fi
1116
1117 dnl ** check for more functions
1118 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
1119 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r, sched_setaffinity])
1120
1121 AC_TRY_RUN([
1122 #include <sys/types.h>
1123 #include <sys/time.h>
1124 int main(void) {
1125   struct itimerval tval;
1126   tval.it_value.tv_sec = 1;
1127   tval.it_value.tv_usec = 0;
1128   tval.it_interval = tval.it_value;
1129   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
1130 }
1131 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
1132
1133 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
1134 dnl ** _POSIX_C_SOURCE is defined
1135 AC_CHECK_DECLS([ctime_r], , ,
1136 [#define _POSIX_SOURCE 1
1137 #define _POSIX_C_SOURCE 199506L
1138 #include <time.h>])
1139
1140 dnl ** For ghc/rts/gmp:
1141 AC_CHECK_FUNCS([getpagesize])
1142
1143 dnl ** check whether this machine has gmp3 installed
1144 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1145   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
1146     HaveLibGmp=NO; LibGmp=not-installed))
1147   if test $HaveLibGmp = YES; then
1148     AC_DEFINE([HAVE_LIB_GMP], [1], [Define to 1 if GMP library is installed.])
1149   fi;
1150 AC_SUBST(HaveLibGmp)
1151 AC_SUBST(LibGmp)
1152
1153 dnl ** (Mac OS X only: check for GMP.framework)
1154 HaveFrameworkGMP=NO
1155 case $HostPlatform in
1156 *-apple-darwin)
1157     AC_MSG_CHECKING([for GMP.framework])
1158     save_libs="$LIBS"
1159     LIBS="-framework GMP"
1160     AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,)
1161     if test $HaveFrameworkGMP = YES; then
1162       AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).])
1163     fi;
1164     LIBS="$save_libs"
1165     AC_MSG_RESULT([$HaveFrameworkGMP])
1166     ;;
1167 esac
1168 AC_SUBST(HaveFrameworkGMP)
1169
1170 dnl ** check for mingwex library
1171 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1172 AC_SUBST(HaveLibMingwEx)
1173
1174 if test $HaveLibMingwEx = YES ; then
1175   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1176 fi
1177
1178 if test "$HaveLibGmp" = "NO"; then
1179 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
1180 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
1181 fi;
1182 fi;
1183
1184 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1185 dnl    the order of these tests matters: bfd needs liberty
1186 AC_CHECK_LIB(iberty, xmalloc)
1187 AC_CHECK_LIB(bfd,    bfd_init)
1188
1189 dnl ** check for math library
1190 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
1191 if test x"$fp_libm_not_needed" = xdunno; then
1192    AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
1193 fi
1194 AC_SUBST([LIBM])
1195
1196 dnl ################################################################
1197 dnl Check for libraries
1198 dnl ################################################################
1199
1200 dnl ** check whether we need -ldl to get dlopen()
1201
1202 AC_CHECK_LIB(dl, dlopen,
1203     [HaveLibDL=YES
1204      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1205      LIBS="$LIBS -ldl"],
1206     [HaveLibDL=NO])
1207 AC_SUBST(HaveLibDL)
1208
1209 dnl --------------------------------------------------
1210 dnl * Miscellaneous feature tests
1211 dnl --------------------------------------------------
1212
1213 dnl ** can we get alloca?
1214 AC_FUNC_ALLOCA
1215
1216 dnl ** Working vfork?
1217 AC_FUNC_FORK
1218
1219 dnl ** determine whether or not const works
1220 AC_C_CONST
1221
1222 dnl ** are we big endian?
1223 AC_C_BIGENDIAN
1224 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
1225
1226 dnl ** check for leading underscores in symbol names
1227 FP_LEADING_UNDERSCORE
1228
1229 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
1230 FP_PROG_LD_X
1231 FP_PROG_LD_IS_GNU
1232
1233 dnl ** check for Apple-style dead-stripping support
1234 dnl    (.subsections-via-symbols assembler directive)
1235
1236
1237 AC_MSG_CHECKING(for .subsections_via_symbols)
1238 AC_COMPILE_IFELSE(
1239     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
1240     [AC_MSG_RESULT(yes)
1241      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
1242                [Define to 1 if Apple-style dead-stripping is supported.])
1243     ],
1244     [AC_MSG_RESULT(no)])
1245
1246 dnl *** check for GNU non-executable stack note support (ELF only)
1247 dnl     (.section .note.GNU-stack,"",@progbits)
1248
1249 AC_MSG_CHECKING(for GNU non-executable stack support)
1250 AC_COMPILE_IFELSE(
1251     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
1252     [AC_MSG_RESULT(yes)
1253      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
1254                [Define to 1 if GNU non-executable stack notes are supported.])
1255     ],
1256     [AC_MSG_RESULT(no)])
1257
1258 dnl ** check for librt
1259 AC_CHECK_LIB(rt, clock_gettime)
1260 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
1261 FP_CHECK_TIMER_CREATE
1262
1263 dnl ** check for Apple's "interesting" long double compatibility scheme
1264 AC_MSG_CHECKING(for printf\$LDBLStub)
1265 AC_TRY_LINK_FUNC(printf\$LDBLStub,
1266     [
1267         AC_MSG_RESULT(yes)
1268         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
1269             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1270     ],
1271     [
1272         AC_MSG_RESULT(no)
1273         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
1274             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1275     ])
1276
1277 # test for GTK+
1278 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
1279 if test -n "$GTK_CONFIG"; then
1280   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
1281     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
1282   else
1283     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
1284     GTK_CONFIG=
1285   fi
1286 fi
1287 AC_SUBST([GTK_CONFIG])
1288
1289 #Checking for PAPI
1290 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
1291 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
1292 AC_SUBST(HavePapiLib)
1293 AC_SUBST(HavePapiHeader)
1294
1295 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
1296    HavePapi=YES
1297 else
1298    HavePapi=NO
1299 fi
1300 AC_SUBST(HavePapi)
1301
1302 if test "$DIR_DOCBOOK_XSL" = "" ||
1303    test "$XsltprocCmd" = ""
1304 then
1305     BUILD_DOCBOOK_HTML=NO
1306 else
1307     BUILD_DOCBOOK_HTML=YES
1308 fi
1309 AC_SUBST(BUILD_DOCBOOK_HTML)
1310
1311 if test "$DblatexCmd" = ""
1312 then
1313     BUILD_DOCBOOK_PS=NO
1314     BUILD_DOCBOOK_PDF=NO
1315 else
1316     BUILD_DOCBOOK_PS=YES
1317     BUILD_DOCBOOK_PDF=YES
1318 fi
1319 AC_SUBST(BUILD_DOCBOOK_PS)
1320 AC_SUBST(BUILD_DOCBOOK_PDF)
1321
1322 AC_CONFIG_FILES([mk/config.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml])
1323 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
1324 AC_OUTPUT
1325
1326 # We get caught by
1327 #     http://savannah.gnu.org/bugs/index.php?1516
1328 #     $(eval ...) inside conditionals causes errors
1329 # with make 3.80, so warn the user if it looks like they're about to
1330 # try to use it.
1331 # We would use "grep -q" here, but Solaris's grep doesn't support it.
1332 checkMake380() {
1333     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
1334     then
1335         echo
1336         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
1337         echo "This version cannot be used to build GHC."
1338         echo "Please use GNU make >= 3.81."
1339     fi
1340 }
1341
1342 checkMake380 make
1343 checkMake380 gmake
1344
1345 echo ["
1346 ----------------------------------------------------------------------
1347 Configure completed successfully.
1348
1349    Building GHC version  : $ProjectVersion
1350
1351    Build platform        : $BuildPlatform
1352    Host platform         : $HostPlatform
1353    Target platform       : $TargetPlatform
1354 "]
1355
1356 if test "$BootingFromHc" = "YES"; then
1357 echo ["\
1358    Bootstrapping from HC files.
1359 "]
1360 else
1361 echo ["\
1362    Bootstrapping using   : $WithGhc
1363       which is version   : $GhcVersion
1364 "]
1365 fi
1366
1367 echo ["\
1368    Using GCC             : $WhatGccIsCalled
1369       which is version   : $GccVersion
1370
1371    ld       : $LdCmd
1372    Happy    : $HappyCmd
1373    Alex     : $AlexCmd
1374    Python   : $PythonCmd
1375    Perl     : $PerlCmd"]
1376
1377 if test "$HSCOLOUR" = ""; then
1378 echo ["
1379    HsColour was not found; documentation will not contain source links
1380 "]
1381 else
1382 echo ["\
1383    HsColour : $HSCOLOUR
1384 "]
1385 fi
1386
1387 echo "Building DocBook HTML documentation: $BUILD_DOCBOOK_HTML"
1388 echo "Building DocBook PS documentation:   $BUILD_DOCBOOK_PS"
1389 echo "Building DocBook PDF documentation:  $BUILD_DOCBOOK_PDF"
1390
1391 echo ["Building shared libraries      : $BuildSharedLibs"]
1392
1393 echo ["----------------------------------------------------------------------
1394 "]
1395
1396 echo "\
1397 For a standard build of GHC (fully optimised with profiling), type (g)make.
1398
1399 To make changes to the default build configuration, copy the file
1400 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1401
1402 For more information on how to configure your GHC build, see
1403    http://hackage.haskell.org/trac/ghc/wiki/Building
1404 "