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