New syntax for GADT-style record declarations, and associated refactoring
[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 * Project specific configuration options
63 dnl --------------------------------------------------------------
64 dnl What follows is a bunch of options that can either be configured
65 dnl through command line options to the configure script or by
66 dnl supplying defns in the build tree's mk/build.mk. Having the option to
67 dnl use either is considered a Feature.
68
69 dnl ** What command to use to compile compiler sources ?
70 dnl --------------------------------------------------------------
71
72 AC_ARG_WITH([ghc],
73 [AC_HELP_STRING([--with-ghc=ARG],
74   [Use ARG as the path to GHC  [default=autodetect]])],
75   [WithGhc="$withval"],
76   [if test "$GHC" = ""; then
77     AC_PATH_PROG([GHC], [ghc])
78   fi
79   WithGhc="$GHC"])
80
81 dnl ** Booting from unregisterised .hc files?
82 dnl --------------------------------------------------------------
83 AC_ARG_ENABLE(hc-boot-unregisterised,
84 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
85 [ With --enable-hc-boot, treat the intermediate .hc files as
86  unregisterised rather than registerised code.
87  (This option is mostly of interest to porters.) [default=no]])],
88 [ if test x"$enableval" = x"yes"; then
89         BootingFromUnregisterisedHc=YES
90   else
91         BootingFromUnregisterisedHc=NO
92   fi
93 ],
94 [BootingFromUnregisterisedHc=NO]
95 )
96 AC_SUBST(BootingFromUnregisterisedHc)
97
98 if test "$BootingFromHc" = "NO"; then
99 if test "$BootingFromUnregisterisedHc" = "YES"; then
100 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
101 fi;
102 fi;
103
104 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
105 if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then
106   if test "$WithGhc" = ""; then
107      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
108   fi
109   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.8],
110     [AC_MSG_ERROR([GHC version 6.8 or later is required to compile GHC.])])dnl
111
112   if test `expr $GhcMinVersion % 2` = "1"; then
113      echo $EnableBootstrapWithDevelSnaphost
114      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
115         AC_MSG_ERROR([
116      $WithGhc is a development snapshot of GHC, version $GhcVersion.
117      Bootstrapping using this version of GHC is not supported, and may not
118      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
119      or --with-ghc to specify a different GHC to use.])
120      fi
121   fi
122 fi;
123
124 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
125 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
126                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
127         EnableBootstrapWithDevelSnaphost=YES,
128         EnableBootstrapWithDevelSnaphost=NO
129 )
130
131 if test "$WithGhc" != ""; then
132   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
133
134   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
135      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
136   fi
137
138   AC_SUBST(GhcVersion)dnl
139   AC_SUBST(GhcMajVersion)dnl
140   AC_SUBST(GhcMinVersion)dnl
141   AC_SUBST(GhcPatchLevel)dnl
142   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
143   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
144   if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi
145   AC_SUBST(ghc_ge_609)dnl
146 fi
147
148 # GHC is passed to Cabal, so we need a native path
149 if test "${WithGhc}" != ""
150 then
151     ghc_host=`${WithGhc} +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'`
152
153     if test "$ghc_host" = "i386-unknown-mingw32"
154     then
155         if test "${OSTYPE}" = "msys"
156         then
157             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
158         else
159             # Canonicalise to <drive>:/path/to/ghc
160             WithGhc=`cygpath -m ${WithGhc}`
161         fi
162         echo "GHC path canonicalised to: ${WithGhc}"
163     fi
164 fi
165 AC_SUBST([WithGhc])
166
167 dnl--------------------------------------------------------------------
168 dnl * Choose host(/target/build) platform
169 dnl--------------------------------------------------------------------
170 dnl We don't use the standard autoconf macros for this, but instead
171 dnl ask the bootstrapping compiler what platform it is for
172
173 dnl Guess host/target/build platform(s) if necessary.
174 m4_divert_once([HELP_CANON],
175 [[
176 System types:
177   --build=BUILD     configure for building on BUILD [guessed]
178   --host=HOST       cross-compile to build programs to run on HOST [guessed]
179   --target=TARGET   configure for building compilers for TARGET [guessed]]])dnl
180
181 if test "$build" = ""
182 then
183     if test "${WithGhc}" != ""
184     then
185         build=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//'`
186         echo "Build platform inferred as: $build"
187     else
188         echo "Can't work out build platform"
189         exit 1
190     fi
191 fi
192
193 if test "$host" = ""
194 then
195     if test "${WithGhc}" != ""
196     then
197         host=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//'`
198         echo "Host platform inferred as: $host"
199     else
200         echo "Can't work out host platform"
201         exit 1
202     fi
203 fi
204
205 if test "$target" = ""
206 then
207     if test "${WithGhc}" != ""
208     then
209         target=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//'`
210         echo "Target platform inferred as: $target"
211     else
212         echo "Can't work out target platform"
213         exit 1
214     fi
215 fi
216
217 exeext=''
218 soext='.so'
219 case $host in
220 *-unknown-cygwin32)
221     AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
222     AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
223     exit 1
224     ;;
225 *-unknown-mingw32)
226     exeext='.exe'
227     soext='.dll'
228     ;;
229 i386-apple-darwin|powerpc-apple-darwin)
230     soext='.dylib'
231     ;;
232 x86_64-apple-darwin)
233     soext='.dylib'
234     CFLAGS="$CFLAGS -m64"
235     LDFLAGS="$LDFLAGS -m64"
236     ;;
237 esac
238
239 checkArch() {
240     case $1 in
241     alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64)
242         ;;
243     *)
244         echo "Unknown arch $1"
245         exit 1
246         ;;
247     esac
248 }
249
250 checkVendor() {
251     case $1 in
252     dec|unknown|hp|apple|next|sun|sgi|ibm)
253         ;;
254     *)
255         echo "Unknown vendor $1"
256         exit 1
257         ;;
258     esac
259 }
260
261 checkOS() {
262     case $1 in
263     linux|freebsd|netbsd|openbsd|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix)
264         ;;
265     *)
266         echo "Unknown OS $1"
267         exit 1
268         ;;
269     esac
270 }
271
272 BuildPlatform=$build
273 BuildArch=`echo "$build" | sed 's/-.*//'`
274 BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
275 BuildOS=`echo "$build" | sed 's/.*-//'`
276 BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
277 BuildArch_CPP=`    echo "$BuildArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
278 BuildVendor_CPP=`  echo "$BuildVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
279 BuildOS_CPP=`      echo "$BuildOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
280
281 checkArch "$BuildArch"
282 checkVendor "$BuildVendor"
283 checkOS "$BuildOS"
284
285 HostPlatform=$host
286 HostArch=`echo "$host" | sed 's/-.*//'`
287 HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
288 HostOS=`echo "$host" | sed 's/.*-//'`
289 HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
290 HostArch_CPP=`    echo "$HostArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
291 HostVendor_CPP=`  echo "$HostVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
292 HostOS_CPP=`      echo "$HostOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
293
294 checkArch "$HostArch"
295 checkVendor "$HostVendor"
296 checkOS "$HostOS"
297
298 TargetPlatform=$target
299 TargetArch=`echo "$target" | sed 's/-.*//'`
300 TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
301 TargetOS=`echo "$target" | sed 's/.*-//'`
302 TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
303 TargetArch_CPP=`    echo "$TargetArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
304 TargetVendor_CPP=`  echo "$TargetVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
305 TargetOS_CPP=`      echo "$TargetOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
306
307 checkArch "$TargetArch"
308 checkVendor "$TargetVendor"
309 checkOS "$TargetOS"
310
311 AC_SUBST(BuildPlatform)
312 AC_SUBST(HostPlatform)
313 AC_SUBST(TargetPlatform)
314 AC_SUBST(HostPlatform_CPP)
315 AC_SUBST(BuildPlatform_CPP)
316 AC_SUBST(TargetPlatform_CPP)
317
318 AC_SUBST(HostArch_CPP)
319 AC_SUBST(BuildArch_CPP)
320 AC_SUBST(TargetArch_CPP)
321
322 AC_SUBST(HostOS_CPP)
323 AC_SUBST(BuildOS_CPP)
324 AC_SUBST(TargetOS_CPP)
325
326 AC_SUBST(HostVendor_CPP)
327 AC_SUBST(BuildVendor_CPP)
328 AC_SUBST(TargetVendor_CPP)
329
330 AC_SUBST(exeext)
331 AC_SUBST(soext)
332
333 AC_ARG_WITH(hc,
334 [AC_HELP_STRING([--with-hc=ARG],
335         [Use ARG as the path to the compiler for compiling ordinary
336          Haskell code  (default= value of --with-ghc)])],
337 [WithHc="$withval"],
338 [WithHc=$WithGhc]
339 )
340 AC_SUBST(WithHc)
341
342 AC_PATH_PROGS(NHC,nhc nhc98)
343 AC_PATH_PROG(HBC,hbc)
344
345 dnl ** Which gcc to use?
346 dnl --------------------------------------------------------------
347 AC_ARG_WITH(gcc,
348 [AC_HELP_STRING([--with-gcc=ARG],
349         [Use ARG as the path to GCC  [default=autodetect]])],
350 [WhatGccIsCalled="$withval"
351  if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
352     test "${OSTYPE}"      != "msys"                  && \
353     test "${withval}"     != ""
354  then
355      # Canonicalise to <drive>:/path/to/gcc
356      withval=`cygpath -m ${withval}`
357  fi;
358  CC="$withval"
359  export CC
360  ],
361 [WhatGccIsCalled="gcc"]
362 )
363 AC_SUBST(WhatGccIsCalled)
364
365 dnl ** Which ld to use?
366 dnl --------------------------------------------------------------
367 AC_ARG_WITH(ld,
368 [AC_HELP_STRING([--with-ld=ARG],
369         [Use ARG as the path to LD  [default=autodetect]])],
370 [if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
371     test "${OSTYPE}"      != "msys"                  && \
372     test "${withval}"     != ""
373  then
374      # Canonicalise to <drive>:/path/to/ld
375      withval=`cygpath -m ${withval}`
376  fi;
377  LD=$withval
378  FP_PROG_LD([$LD])
379  ],
380  [FP_PROG_LD()]
381 )
382
383 dnl ** Build shared and/or static libs?
384 dnl --------------------------------------------------------------
385 AC_ARG_ENABLE(shared,
386 [AC_HELP_STRING([--enable-shared],
387 [Build shared libraries, if available (EXPERIMENTAL, non-working). [default=no]])],
388 [ if test x"$enableval" = x"yes"; then
389         AC_MSG_WARN([--enable-shared is experimental and not fully supported at this time])
390         BuildSharedLibs=YES
391   else
392         BuildSharedLibs=NO
393   fi
394 ],
395 [BuildSharedLibs=NO]
396 )
397 AC_SUBST(BuildSharedLibs)
398
399 # ToDo later:
400 # AC_ARG_ENABLE(static,
401 # [AC_HELP_STRING([--enable-static],
402 # [Build static libraries. [default=yes]])],
403 # [ if test x"$enableval" = x"yes"; then
404 #         BuildStaticLibs=YES
405 #   else
406 #         BuildStaticLibs=NO
407 #   fi
408 # ],
409 # [BuildStaticLibs=YES]
410 # )
411 # AC_SUBST(BuildStaticLibs)
412
413 dnl ** Booting from .hc files?
414 dnl --------------------------------------------------------------
415 AC_ARG_ENABLE(hc-boot,
416 [AC_HELP_STRING([--enable-hc-boot],
417 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
418  (This option is mostly of interest to porters.) [default=no]])],
419 [ if test x"$enableval" = x"yes"; then
420         BootingFromHc=YES
421   else
422         BootingFromHc=NO
423   fi
424 ],
425 [BootingFromHc=NO]
426 )
427 AC_SUBST(BootingFromHc)
428
429 # This uses GHC, so put it after the "GHC is required" check above:
430 FP_FIND_ROOT
431
432 dnl ** Enable the construction of Win32 DLLs?
433 dnl --------------------------------------------------------------
434 dnl
435 dnl [ The ability to build the RTS and libraries as separate DLLs used
436 dnl   to be supported, but isn't currently (updates to the RTS, compiler
437 dnl   and build system would be required to bring it back again.)
438 dnl   Hence, exposing it as an option is false advertisement, so better
439 dnl   disable it to avoid confusion (but leave it commented-out rather
440 dnl   than removed in order to remind ourselves to bring back the
441 dnl   feature at some stage.) ]
442 dnl
443 dnl AC_ARG_ENABLE(win32-dlls,
444 dnl [  --enable-win32-dlls
445 dnl         If on a Win32 platform running mingw32/cygwin, enable the
446 dnl         construction of DLLs containing ghc-compiled code.
447 dnl ],
448 dnl [
449 dnl case $HostOS_CPP in
450 dnl cygwin32) ;;
451 dnl mingw32)  ;;
452 dnl *)    echo "Unrecognised win32 platform: $HostPlatform"
453 dnl       exit 1
454 dnl       ;;
455 dnl esac
456 dnl EnableWin32DLLs=YES
457 dnl ],
458 dnl [EnableWin32DLLs=NO]
459 dnl )
460 dnl AC_SUBST(EnableWin32DLLs)
461 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
462 dnl  AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
463 dnl fi
464
465 dnl ** Mac OS X: explicit deployment target
466 dnl --------------------------------------------------------------
467 AC_ARG_WITH([macosx-deployment-target],
468 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
469         [Build for Mac OS VERSION and higher  (default= version of build host)])],
470 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
471  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
472    # ignore everywhere, but on Mac OS
473    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
474    FP_MACOSX_DEPLOYMENT_TARGET=none
475  fi],
476 [FP_MACOSX_DEPLOYMENT_TARGET=none]
477 )
478 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
479 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
480 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
481
482 dnl --------------------------------------------------------------
483 dnl End of configure script option section
484 dnl --------------------------------------------------------------
485
486
487 dnl --------------------------------------------------------------
488 dnl * General configuration checks
489 dnl --------------------------------------------------------------
490
491 dnl ** Can the unix package be built?
492 dnl --------------------------------------------------------------
493
494 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
495    GhcLibsWithUnix=NO
496 else
497    GhcLibsWithUnix=YES
498 fi
499 AC_SUBST([GhcLibsWithUnix])
500
501 dnl ** does #! work?
502 AC_SYS_INTERPRETER()
503
504 dnl ** look for `perl', but only in /bin on Windows
505 case $HostOS_CPP in
506 cygwin32|mingw32)
507       AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
508       if test -z "$PerlCmd"; then
509          echo "You must install the version of Perl shipped with GHC"
510          echo "(or a compatible one) in /bin."
511          exit 1
512       fi
513    ;;
514 *)
515    AC_PATH_PROG(PerlCmd,perl)
516    if test -z "$PerlCmd"; then
517       echo "You must install perl before you can continue"
518       echo "Perhaps it is already installed, but not in your PATH?"
519       exit 1
520    else
521    FPTOOLS_CHECK_PERL_VERSION
522    fi
523    ;;
524 esac
525
526 dnl ** does #! path/to/perl work? (sometimes it's too long...)
527 FPTOOLS_SHEBANG_PERL
528
529 dnl ** check for Python
530 AC_PATH_PROG(PythonCmd,python)
531
532 dnl ** look for GCC and find out which version
533 dnl     Figure out which C compiler to use.  Gcc is preferred.
534 dnl     If gcc, make sure it's at least 2.1
535 dnl
536 FP_HAVE_GCC
537 FP_MINGW_GCC
538 FP_GCC_EXTRA_FLAGS
539
540 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
541 AC_PROG_CPP
542
543 dnl ** Without optimization some INLINE trickery fails for GHCi
544 SRC_CC_OPTS="-O"
545
546 SRC_CC_OPTS="$SRC_CC_OPTS $CFLAGS"
547 SRC_LD_OPTS="$SRC_LD_OPTS $LDFLAGS"
548
549 AC_SUBST(SRC_CC_OPTS)
550 AC_SUBST(SRC_LD_OPTS)
551
552 dnl ** figure out how to do context diffs
553 FP_PROG_CONTEXT_DIFF
554
555 dnl ** Find find command (for Win32's benefit)
556 FP_PROG_FIND
557
558 dnl ** Find sort command (for the benefit of Win32 environs)
559 FP_PROG_SORT
560
561 dnl Let's make sure install-sh is executable here.  If we got it from
562 dnl a darcs repo, it might not be (see bug #978).
563 chmod +x install-sh
564 dnl ** figure out how to do a BSD-ish install
565 AC_PROG_INSTALL
566
567 dnl If you can run configure, you certainly have /bin/sh
568 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
569
570 dnl ** how to invoke `ar' and `ranlib'
571 FP_PROG_AR_NEEDS_RANLIB
572 FP_PROG_AR_SUPPORTS_INPUT
573
574 dnl ** Check to see whether ln -s works
575 AC_PROG_LN_S
576
577
578 dnl ** Find the path to sed
579 AC_PATH_PROG(SedCmd,sed)
580
581
582 dnl ** check for time command
583 AC_PATH_PROG(TimeCmd,time)
584
585 dnl ** check for tar
586 dnl   if GNU tar is named gtar, look for it first.
587 AC_PATH_PROGS(TarCmd,gtar tar,tar)
588
589 dnl ** check for patch
590 dnl if GNU patch is named gpatch, look for it first
591 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
592
593 AC_PATH_PROG(HSCOLOUR,HsColour)
594 # HsColour is passed to Cabal, so we need a native path
595 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
596    test "${OSTYPE}"      != "msys"                  && \
597    test "${HSCOLOUR}"    != ""
598 then
599     # Canonicalise to <drive>:/path/to/gcc
600     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
601 fi
602
603 dnl ** check for DocBook toolchain
604 FP_CHECK_DOCBOOK_DTD
605 FP_DOCBOOK_XSL
606 FP_PROG_DBLATEX
607
608 FP_PROG_HSTAGS
609
610 dnl ** check for ghc-pkg command
611 FP_PROG_GHC_PKG
612
613 dnl ** check for installed happy binary + version
614 dnl    (don't do it if we're booting from .hc files though.)
615 if test "$BootingFromHc" = "NO"; then
616 FPTOOLS_HAPPY
617 fi;
618
619 dnl ** check for installed alex binary + version
620 dnl    (don't do it if we're booting from .hc files though.)
621 if test "$BootingFromHc" = "NO"; then
622 FPTOOLS_ALEX
623 fi;
624
625 dnl Check we have an acceptable version of windres
626 FPTOOLS_WINDRES
627
628 dnl --------------------------------------------------
629 dnl ### program checking section ends here ###
630 dnl --------------------------------------------------
631
632 dnl --------------------------------------------------
633 dnl * Platform header file and syscall feature tests
634 dnl ### checking the state of the local header files and syscalls ###
635
636 dnl ** check for full ANSI header (.h) files
637 AC_HEADER_STDC
638
639 dnl ** Enable large file support.  NB. do this before testing the type of
640 dnl    off_t, because it will affect the result of that test.
641 AC_SYS_LARGEFILE
642
643 dnl ** check for specific header (.h) files that we are interested in
644 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])
645
646 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
647 AC_HEADER_TIME
648
649 dnl ** do we have long longs?
650 AC_CHECK_TYPES([long long])
651
652 dnl ** what are the sizes of various types
653 AC_CHECK_SIZEOF(char,               1)
654 AC_CHECK_SIZEOF(double,             8)
655 AC_CHECK_SIZEOF(float,              4)
656 AC_CHECK_SIZEOF(int,                4)
657 AC_CHECK_SIZEOF(long,               4)
658 if test "$ac_cv_type_long_long" = yes; then
659 AC_CHECK_SIZEOF(long long,          8)
660 fi
661 AC_CHECK_SIZEOF(short,              2)
662 AC_CHECK_SIZEOF(unsigned char,      1)
663 AC_CHECK_SIZEOF(unsigned int,       4)
664 AC_CHECK_SIZEOF(unsigned long,      4)
665 if test "$ac_cv_type_long_long" = yes; then
666 AC_CHECK_SIZEOF(unsigned long long, 8)
667 fi
668 AC_CHECK_SIZEOF(unsigned short,     2)
669 AC_CHECK_SIZEOF(void *,             4)
670
671 dnl ** what are alignment constraints on various types
672 FP_CHECK_ALIGNMENT(char)
673 FP_CHECK_ALIGNMENT(double)
674 FP_CHECK_ALIGNMENT(float)
675 FP_CHECK_ALIGNMENT(int)
676 FP_CHECK_ALIGNMENT(long)
677 if test "$ac_cv_type_long_long" = yes; then
678 FP_CHECK_ALIGNMENT(long long)
679 fi
680 FP_CHECK_ALIGNMENT(short)
681 FP_CHECK_ALIGNMENT(unsigned char)
682 FP_CHECK_ALIGNMENT(unsigned int)
683 FP_CHECK_ALIGNMENT(unsigned long)
684 if test "$ac_cv_type_long_long" = yes; then
685 FP_CHECK_ALIGNMENT(unsigned long long)
686 fi
687 FP_CHECK_ALIGNMENT(unsigned short)
688 FP_CHECK_ALIGNMENT(void *)
689
690 FP_CHECK_FUNC([WinExec],
691   [@%:@include <windows.h>], [WinExec("",0)])
692
693 FP_CHECK_FUNC([GetModuleFileName],
694   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
695
696 dnl ** check return type of signal handlers
697 dnl Foo: assumes we can use prototypes.
698 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
699 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
700 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
701 dnl #include <signal.h>
702 dnl #ifdef signal
703 dnl #undef signal
704 dnl #endif
705 dnl void (*signal (int, void (*)(int)))(int);
706 dnl ]],
707 dnl [[int i;]])],
708 dnl [ac_cv_type_signal_handler=void_int],
709 dnl [ac_cv_type_signal_handler=int_void])])
710 dnl if test "$ac_cv_type_signal_handler" = void_int; then
711 dnl AC_DEFINE(VOID_INT_SIGNALS)
712 dnl fi
713
714 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
715 AC_TYPE_SIGNAL
716 if test "$ac_cv_type_signal" = void; then
717   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).])
718 fi
719
720 dnl ** check for more functions
721 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
722 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
723
724 AC_TRY_RUN([
725 #include <sys/types.h>
726 #include <sys/time.h>
727 int main(void) {
728   struct itimerval tval;
729   tval.it_value.tv_sec = 1;
730   tval.it_value.tv_usec = 0;
731   tval.it_interval = tval.it_value;
732   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
733 }
734 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
735
736 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
737 dnl ** _POSIX_C_SOURCE is defined
738 AC_CHECK_DECLS([ctime_r], , ,
739 [#define _POSIX_SOURCE 1
740 #define _POSIX_C_SOURCE 199506L
741 #include <time.h>])
742
743 dnl ** check for mingwex library
744 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
745 AC_SUBST(HaveLibMingwEx)
746
747 if test $HaveLibMingwEx = YES ; then
748   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
749 fi
750
751 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
752 dnl    the order of these tests matters: bfd needs liberty
753 AC_CHECK_LIB(iberty, xmalloc)
754 AC_CHECK_LIB(bfd,    bfd_init)
755
756 dnl ** check for math library
757 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
758 if test x"$fp_libm_not_needed" = xdunno; then
759    AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
760 fi
761 AC_SUBST([LIBM])
762
763 dnl ################################################################
764 dnl Check for libraries
765 dnl ################################################################
766
767 dnl ** check whether we need -ldl to get dlopen()
768
769 AC_CHECK_LIB(dl, dlopen,
770     [HaveLibDL=YES
771      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
772      LIBS="$LIBS -ldl"],
773     [HaveLibDL=NO])
774 AC_SUBST(HaveLibDL)
775
776 dnl --------------------------------------------------
777 dnl * Miscellaneous feature tests
778 dnl --------------------------------------------------
779
780 dnl ** can we get alloca?
781 AC_FUNC_ALLOCA
782
783 dnl ** Working vfork?
784 AC_FUNC_FORK
785
786 dnl ** determine whether or not const works
787 AC_C_CONST
788
789 dnl ** are we big endian?
790 AC_C_BIGENDIAN
791 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
792
793 dnl ** check for leading underscores in symbol names
794 FP_LEADING_UNDERSCORE
795
796 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
797 FP_PROG_LD_X
798 FP_PROG_LD_IS_GNU
799
800 dnl ** check for Apple-style dead-stripping support
801 dnl    (.subsections-via-symbols assembler directive)
802
803
804 AC_MSG_CHECKING(for .subsections_via_symbols)
805 AC_COMPILE_IFELSE(
806     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
807     [AC_MSG_RESULT(yes)
808      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
809                [Define to 1 if Apple-style dead-stripping is supported.])
810     ],
811     [AC_MSG_RESULT(no)])
812
813 dnl *** check for GNU non-executable stack note support (ELF only)
814 dnl     (.section .note.GNU-stack,"",@progbits)
815
816 AC_MSG_CHECKING(for GNU non-executable stack support)
817 AC_COMPILE_IFELSE(
818     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
819     [AC_MSG_RESULT(yes)
820      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
821                [Define to 1 if GNU non-executable stack notes are supported.])
822     ],
823     [AC_MSG_RESULT(no)])
824
825 dnl ** check for librt
826 AC_CHECK_LIB(rt, clock_gettime)
827 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
828 FP_CHECK_TIMER_CREATE
829
830 dnl ** check for Apple's "interesting" long double compatibility scheme
831 AC_MSG_CHECKING(for printf\$LDBLStub)
832 AC_TRY_LINK_FUNC(printf\$LDBLStub,
833     [
834         AC_MSG_RESULT(yes)
835         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
836             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
837     ],
838     [
839         AC_MSG_RESULT(no)
840         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
841             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
842     ])
843
844 # test for GTK+
845 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
846 if test -n "$GTK_CONFIG"; then
847   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
848     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
849   else
850     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
851     GTK_CONFIG=
852   fi
853 fi
854 AC_SUBST([GTK_CONFIG])
855
856 #Checking for PAPI
857 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
858 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
859 AC_SUBST(HavePapiLib)
860 AC_SUBST(HavePapiHeader)
861
862 AC_CHECK_FUNCS(__mingw_vfprintf)
863
864 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
865    HavePapi=YES
866 else
867    HavePapi=NO
868 fi
869 AC_SUBST(HavePapi)
870
871 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
872    test "$XsltprocCmd" = ""
873 then
874     BUILD_DOCBOOK_HTML=NO
875 else
876     BUILD_DOCBOOK_HTML=YES
877 fi
878 AC_SUBST(BUILD_DOCBOOK_HTML)
879
880 if test "$DblatexCmd" = ""
881 then
882     BUILD_DOCBOOK_PS=NO
883     BUILD_DOCBOOK_PDF=NO
884 else
885     BUILD_DOCBOOK_PS=YES
886     BUILD_DOCBOOK_PDF=YES
887 fi
888 AC_SUBST(BUILD_DOCBOOK_PS)
889 AC_SUBST(BUILD_DOCBOOK_PDF)
890
891 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 distrib/ghc.iss])
892 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
893 AC_OUTPUT
894
895 # We get caught by
896 #     http://savannah.gnu.org/bugs/index.php?1516
897 #     $(eval ...) inside conditionals causes errors
898 # with make 3.80, so warn the user if it looks like they're about to
899 # try to use it.
900 # We would use "grep -q" here, but Solaris's grep doesn't support it.
901 checkMake380() {
902     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
903     then
904         echo
905         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
906         echo "This version cannot be used to build GHC."
907         echo "Please use GNU make >= 3.81."
908     fi
909 }
910
911 checkMake380 make
912 checkMake380 gmake
913
914 echo ["
915 ----------------------------------------------------------------------
916 Configure completed successfully.
917
918    Building GHC version  : $ProjectVersion
919
920    Build platform        : $BuildPlatform
921    Host platform         : $HostPlatform
922    Target platform       : $TargetPlatform
923 "]
924
925 if test "$BootingFromHc" = "YES"; then
926 echo ["\
927    Bootstrapping from HC files.
928 "]
929 else
930 echo ["\
931    Bootstrapping using   : $WithGhc
932       which is version   : $GhcVersion
933 "]
934 fi
935
936 echo ["\
937    Using GCC             : $WhatGccIsCalled
938       which is version   : $GccVersion
939
940    ld       : $LdCmd
941    Happy    : $HappyCmd ($HappyVersion)
942    Alex     : $AlexCmd ($AlexVersion)
943    Python   : $PythonCmd
944    Perl     : $PerlCmd
945    dblatex  : $DblatexCmd
946    xsltproc : $XsltprocCmd"]
947
948 if test "$HSCOLOUR" = ""; then
949 echo ["
950    HsColour was not found; documentation will not contain source links
951 "]
952 else
953 echo ["\
954    HsColour : $HSCOLOUR
955 "]
956 fi
957
958 echo ["\
959    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
960    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
961    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF
962
963    Building shared libraries           : $BuildSharedLibs"]
964
965 echo ["----------------------------------------------------------------------
966 "]
967
968 echo "\
969 For a standard build of GHC (fully optimised with profiling), type (g)make.
970
971 To make changes to the default build configuration, copy the file
972 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
973
974 For more information on how to configure your GHC build, see
975    http://hackage.haskell.org/trac/ghc/wiki/Building
976 "