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