Clean up building of libffi for dynamic lib way
[ghc-hetmet.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 dnl ** check for ghc-pkg command
1006 FP_PROG_GHC_PKG
1007
1008 dnl ** check for installed happy binary + version
1009 dnl    (don't do it if we're booting from .hc files though.)
1010 if test "$BootingFromHc" = "NO"; then
1011 FPTOOLS_HAPPY
1012 fi;
1013
1014 dnl ** check for installed alex binary + version
1015 dnl    (don't do it if we're booting from .hc files though.)
1016 if test "$BootingFromHc" = "NO"; then
1017 FPTOOLS_ALEX
1018 fi;
1019
1020 dnl Check we have an acceptable version of windres
1021 FPTOOLS_WINDRES
1022
1023 dnl --------------------------------------------------
1024 dnl ### program checking section ends here ###
1025 dnl --------------------------------------------------
1026
1027 dnl --------------------------------------------------
1028 dnl * Platform header file and syscall feature tests
1029 dnl ### checking the state of the local header files and syscalls ###
1030
1031 dnl ** check for full ANSI header (.h) files
1032 AC_HEADER_STDC
1033
1034 dnl ** Enable large file support.  NB. do this before testing the type of
1035 dnl    off_t, because it will affect the result of that test.
1036 AC_SYS_LARGEFILE
1037
1038 dnl ** check for specific header (.h) files that we are interested in
1039 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])
1040
1041 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
1042 AC_HEADER_TIME
1043
1044 dnl ** do we have long longs?
1045 AC_CHECK_TYPES([long long])
1046
1047 dnl ** what are the sizes of various types
1048 AC_CHECK_SIZEOF(char,               1)
1049 AC_CHECK_SIZEOF(double,             8)
1050 AC_CHECK_SIZEOF(float,              4)
1051 AC_CHECK_SIZEOF(int,                4)
1052 AC_CHECK_SIZEOF(long,               4)
1053 if test "$ac_cv_type_long_long" = yes; then
1054 AC_CHECK_SIZEOF(long long,          8)
1055 fi
1056 AC_CHECK_SIZEOF(short,              2)
1057 AC_CHECK_SIZEOF(unsigned char,      1)
1058 AC_CHECK_SIZEOF(unsigned int,       4)
1059 AC_CHECK_SIZEOF(unsigned long,      4)
1060 if test "$ac_cv_type_long_long" = yes; then
1061 AC_CHECK_SIZEOF(unsigned long long, 8)
1062 fi
1063 AC_CHECK_SIZEOF(unsigned short,     2)
1064 AC_CHECK_SIZEOF(void *,             4)
1065
1066 dnl ** what are alignment constraints on various types
1067 FP_CHECK_ALIGNMENT(char)
1068 FP_CHECK_ALIGNMENT(double)
1069 FP_CHECK_ALIGNMENT(float)
1070 FP_CHECK_ALIGNMENT(int)
1071 FP_CHECK_ALIGNMENT(long)
1072 if test "$ac_cv_type_long_long" = yes; then
1073 FP_CHECK_ALIGNMENT(long long)
1074 fi
1075 FP_CHECK_ALIGNMENT(short)
1076 FP_CHECK_ALIGNMENT(unsigned char)
1077 FP_CHECK_ALIGNMENT(unsigned int)
1078 FP_CHECK_ALIGNMENT(unsigned long)
1079 if test "$ac_cv_type_long_long" = yes; then
1080 FP_CHECK_ALIGNMENT(unsigned long long)
1081 fi
1082 FP_CHECK_ALIGNMENT(unsigned short)
1083 FP_CHECK_ALIGNMENT(void *)
1084
1085 FP_CHECK_FUNC([WinExec],
1086   [@%:@include <windows.h>], [WinExec("",0)])
1087
1088 FP_CHECK_FUNC([GetModuleFileName],
1089   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
1090
1091 dnl ** check return type of signal handlers
1092 dnl Foo: assumes we can use prototypes.
1093 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1094 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1095 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1096 dnl #include <signal.h>
1097 dnl #ifdef signal
1098 dnl #undef signal
1099 dnl #endif
1100 dnl void (*signal (int, void (*)(int)))(int);
1101 dnl ]],
1102 dnl [[int i;]])],
1103 dnl [ac_cv_type_signal_handler=void_int],
1104 dnl [ac_cv_type_signal_handler=int_void])])
1105 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1106 dnl AC_DEFINE(VOID_INT_SIGNALS)
1107 dnl fi
1108
1109 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1110 AC_TYPE_SIGNAL
1111 if test "$ac_cv_type_signal" = void; then
1112   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).])
1113 fi
1114
1115 dnl ** check for more functions
1116 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
1117 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r, sched_setaffinity])
1118
1119 AC_TRY_RUN([
1120 #include <sys/types.h>
1121 #include <sys/time.h>
1122 int main(void) {
1123   struct itimerval tval;
1124   tval.it_value.tv_sec = 1;
1125   tval.it_value.tv_usec = 0;
1126   tval.it_interval = tval.it_value;
1127   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
1128 }
1129 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
1130
1131 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
1132 dnl ** _POSIX_C_SOURCE is defined
1133 AC_CHECK_DECLS([ctime_r], , ,
1134 [#define _POSIX_SOURCE 1
1135 #define _POSIX_C_SOURCE 199506L
1136 #include <time.h>])
1137
1138 dnl ** For ghc/rts/gmp:
1139 AC_CHECK_FUNCS([getpagesize])
1140
1141 dnl ** check whether this machine has gmp3 installed
1142 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1143   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
1144     HaveLibGmp=NO; LibGmp=not-installed))
1145   if test $HaveLibGmp = YES; then
1146     AC_DEFINE([HAVE_LIB_GMP], [1], [Define to 1 if GMP library is installed.])
1147   fi;
1148 AC_SUBST(HaveLibGmp)
1149 AC_SUBST(LibGmp)
1150
1151 dnl ** (Mac OS X only: check for GMP.framework)
1152 HaveFrameworkGMP=NO
1153 case $HostPlatform in
1154 *-apple-darwin)
1155     AC_MSG_CHECKING([for GMP.framework])
1156     save_libs="$LIBS"
1157     LIBS="-framework GMP"
1158     AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,)
1159     if test $HaveFrameworkGMP = YES; then
1160       AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).])
1161     fi;
1162     LIBS="$save_libs"
1163     AC_MSG_RESULT([$HaveFrameworkGMP])
1164     ;;
1165 esac
1166 AC_SUBST(HaveFrameworkGMP)
1167
1168 dnl ** check for mingwex library
1169 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1170 AC_SUBST(HaveLibMingwEx)
1171
1172 if test $HaveLibMingwEx = YES ; then
1173   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1174 fi
1175
1176 if test "$HaveLibGmp" = "NO"; then
1177 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
1178 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
1179 fi;
1180 fi;
1181
1182 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1183 dnl    the order of these tests matters: bfd needs liberty
1184 AC_CHECK_LIB(iberty, xmalloc)
1185 AC_CHECK_LIB(bfd,    bfd_init)
1186
1187 dnl ** check for math library
1188 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
1189 if test x"$fp_libm_not_needed" = xdunno; then
1190    AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
1191 fi
1192 AC_SUBST([LIBM])
1193
1194 dnl ################################################################
1195 dnl Check for libraries
1196 dnl ################################################################
1197
1198 dnl ** check whether we need -ldl to get dlopen()
1199
1200 AC_CHECK_LIB(dl, dlopen,
1201     [HaveLibDL=YES
1202      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1203      LIBS="$LIBS -ldl"],
1204     [HaveLibDL=NO])
1205 AC_SUBST(HaveLibDL)
1206
1207 dnl --------------------------------------------------
1208 dnl * Miscellaneous feature tests
1209 dnl --------------------------------------------------
1210
1211 dnl ** can we get alloca?
1212 AC_FUNC_ALLOCA
1213
1214 dnl ** Working vfork?
1215 AC_FUNC_FORK
1216
1217 dnl ** determine whether or not const works
1218 AC_C_CONST
1219
1220 dnl ** are we big endian?
1221 AC_C_BIGENDIAN
1222 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
1223
1224 dnl ** check for leading underscores in symbol names
1225 FP_LEADING_UNDERSCORE
1226
1227 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
1228 FP_PROG_LD_X
1229 FP_PROG_LD_IS_GNU
1230
1231 dnl ** check for Apple-style dead-stripping support
1232 dnl    (.subsections-via-symbols assembler directive)
1233
1234
1235 AC_MSG_CHECKING(for .subsections_via_symbols)
1236 AC_COMPILE_IFELSE(
1237     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
1238     [AC_MSG_RESULT(yes)
1239      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
1240                [Define to 1 if Apple-style dead-stripping is supported.])
1241     ],
1242     [AC_MSG_RESULT(no)])
1243
1244 dnl *** check for GNU non-executable stack note support (ELF only)
1245 dnl     (.section .note.GNU-stack,"",@progbits)
1246
1247 AC_MSG_CHECKING(for GNU non-executable stack support)
1248 AC_COMPILE_IFELSE(
1249     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
1250     [AC_MSG_RESULT(yes)
1251      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
1252                [Define to 1 if GNU non-executable stack notes are supported.])
1253     ],
1254     [AC_MSG_RESULT(no)])
1255
1256 dnl ** check for librt
1257 AC_CHECK_LIB(rt, clock_gettime)
1258 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
1259 FP_CHECK_TIMER_CREATE
1260
1261 dnl ** check for Apple's "interesting" long double compatibility scheme
1262 AC_MSG_CHECKING(for printf\$LDBLStub)
1263 AC_TRY_LINK_FUNC(printf\$LDBLStub,
1264     [
1265         AC_MSG_RESULT(yes)
1266         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
1267             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1268     ],
1269     [
1270         AC_MSG_RESULT(no)
1271         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
1272             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1273     ])
1274
1275 # test for GTK+
1276 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
1277 if test -n "$GTK_CONFIG"; then
1278   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
1279     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
1280   else
1281     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
1282     GTK_CONFIG=
1283   fi
1284 fi
1285 AC_SUBST([GTK_CONFIG])
1286
1287 #Checking for PAPI
1288 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
1289 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
1290 AC_SUBST(HavePapiLib)
1291 AC_SUBST(HavePapiHeader)
1292
1293 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
1294    HavePapi=YES
1295 else
1296    HavePapi=NO
1297 fi
1298 AC_SUBST(HavePapi)
1299
1300 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])
1301 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
1302 AC_OUTPUT
1303
1304 # We get caught by
1305 #     http://savannah.gnu.org/bugs/index.php?1516
1306 #     $(eval ...) inside conditionals causes errors
1307 # with make 3.80, so warn the user if it looks like they're about to
1308 # try to use it.
1309 # We would use "grep -q" here, but Solaris's grep doesn't support it.
1310 checkMake380() {
1311     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
1312     then
1313         echo
1314         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
1315         echo "This version cannot be used to build GHC."
1316         echo "Please use GNU make >= 3.81."
1317     fi
1318 }
1319
1320 checkMake380 make
1321 checkMake380 gmake
1322
1323 echo ["
1324 ----------------------------------------------------------------------
1325 Configure completed successfully.
1326
1327    Building GHC version  : $ProjectVersion
1328
1329    Build platform        : $BuildPlatform
1330    Host platform         : $HostPlatform
1331    Target platform       : $TargetPlatform
1332 "]
1333
1334 if test "$BootingFromHc" = "YES"; then
1335 echo ["\
1336    Bootstrapping from HC files.
1337 "]
1338 else
1339 echo ["\
1340    Bootstrapping using   : $WithGhc
1341       which is version   : $GhcVersion
1342 "]
1343 fi
1344
1345 echo ["\
1346    Using GCC             : $WhatGccIsCalled
1347       which is version   : $GccVersion
1348
1349    ld       : $LdCmd
1350    Happy    : $HappyCmd
1351    Alex     : $AlexCmd
1352    Python   : $PythonCmd
1353    Perl     : $PerlCmd"]
1354
1355 if test "$HSCOLOUR" = ""; then
1356 echo ["
1357    HsColour was not found; documentation will not contain source links
1358 "]
1359 else
1360 echo ["\
1361    HsColour : $HSCOLOUR
1362 "]
1363 fi
1364
1365 if test "$DIR_DOCBOOK_XSL" = ""; then
1366 echo ["\
1367    Building DocBook documentation : no"]
1368 else
1369 echo ["\
1370    Building DocBook documentation : yes"]
1371 fi
1372
1373
1374 echo ["\
1375    Building shared libraries      : $BuildSharedLibs"]
1376
1377 echo ["----------------------------------------------------------------------
1378 "]
1379
1380 echo "\
1381 For a standard build of GHC (fully optimised with profiling), type (g)make.
1382
1383 To make changes to the default build configuration, copy the file
1384 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1385
1386 For more information on how to configure your GHC build, see
1387    http://hackage.haskell.org/trac/ghc/wiki/Building
1388 "