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