Require autoconf 2.60, as
[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-2012
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], [7.7], [glasgow-haskell-bugs@haskell.org], [ghc])
17
18 # Using autoconf v2.59 started to give nonsense like this
19 #  #define SIZEOF_CHAR 0
20 # recently. Exclude that version.
21 AC_PREREQ([2.60])
22
23 # Set this to YES for a released version, otherwise NO
24 : ${RELEASE=NO}
25
26 # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line
27 # above.  If this is not a released version, then we will append the
28 # date to the version number (e.g. 7.4.20111220).  The date is
29 # constructed by finding the date of the most recent patch in the
30 # git repository.  If this is a source distribution (not a git
31 # checkout), then we ship a file 'VERSION' containing the full version
32 # when the source distribution was created.
33
34 if test ! -f mk/config.h.in; then
35    echo "mk/config.h.in doesn't exist: perhaps you haven't run 'perl boot'?"
36    exit 1
37 fi
38
39 AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
40
41 dnl ----------------------------------------------------------
42 dnl ** Find unixy sort and find commands, 
43 dnl ** which are needed by FP_SETUP_PROJECT_VERSION
44
45 dnl ** Find find command (for Win32's benefit)
46 FP_PROG_FIND
47
48 dnl ----------------------------------------------------------
49 FP_SETUP_PROJECT_VERSION
50
51 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
52 AC_SUBST([release], [1])
53
54 # First off, a distrib sanity check..
55 AC_CONFIG_SRCDIR([mk/config.mk.in])
56
57 dnl * We require autoconf version 2.52
58 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
59 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
60 AC_PREREQ([2.52])
61
62 # -------------------------------------------------------------------------
63 # Prepare to generate the following header files
64 #
65 #
66 AC_CONFIG_HEADER(mk/config.h)
67
68 # No, semi-sadly, we don't do `--srcdir'...
69 if test x"$srcdir" != 'x.' ; then
70     echo "This configuration does not support the \`--srcdir' option.."
71     exit 1
72 fi
73
74 dnl --------------------------------------------------------------
75 dnl * Project specific configuration options
76 dnl --------------------------------------------------------------
77 dnl What follows is a bunch of options that can either be configured
78 dnl through command line options to the configure script or by
79 dnl supplying defns in the build tree's mk/build.mk. Having the option to
80 dnl use either is considered a Feature.
81
82 dnl ** What command to use to compile compiler sources ?
83 dnl --------------------------------------------------------------
84
85 AC_ARG_WITH([ghc],
86 [AC_HELP_STRING([--with-ghc=ARG],
87   [Use ARG as the path to GHC  [default=autodetect]])],
88   [WithGhc="$withval"],
89   [if test "$GHC" = ""; then
90     AC_PATH_PROG([GHC], [ghc])
91   fi
92   WithGhc="$GHC"])
93
94 dnl ** Tell the make system which OS we are using
95 dnl $OSTYPE is set by the operating system to "msys" or "cygwin" or something 
96 AC_SUBST(OSTYPE)
97
98 dnl ** Booting from .hc files?
99 dnl --------------------------------------------------------------
100 AC_ARG_ENABLE(hc-boot,
101 [AC_HELP_STRING([--enable-hc-boot],
102 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
103  (This option is mostly of interest to porters.) [default=no]])],
104 [ if test x"$enableval" = x"yes"; then
105         BootingFromHc=YES
106   else
107         BootingFromHc=NO
108   fi
109 ],
110 [BootingFromHc=NO]
111 )
112 AC_SUBST(BootingFromHc)
113
114 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
115 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
116                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
117         EnableBootstrapWithDevelSnaphost=YES,
118         EnableBootstrapWithDevelSnaphost=NO
119 )
120
121 if test "$WithGhc" != ""; then
122   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
123
124   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
125      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
126   fi
127
128   AC_SUBST(GhcVersion)dnl
129   AC_SUBST(GhcMajVersion)dnl
130   AC_SUBST(GhcMinVersion)dnl
131   AC_SUBST(GhcPatchLevel)dnl
132   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
133   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
134
135   BOOTSTRAPPING_GHC_INFO_FIELD([OS_STAGE0],[target os])
136   BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
137   if test "x$OS_STAGE0" != "xOSDarwin"; then
138     BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command])
139     BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags])
140     BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file])
141   else
142     AR_STAGE0='$(AR)'
143     AR_OPTS_STAGE0='$(AR_OPTS)'
144     ArSupportsAtFile_STAGE0='$(ArSupportsAtFile)'
145   fi
146 fi
147
148 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
149 if test "$BootingFromHc" = "NO"; then
150   if test "$WithGhc" = ""; then
151      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
152   fi
153   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.4],
154     [AC_MSG_ERROR([GHC version 7.4 or later is required to compile GHC.])])dnl
155
156   if test `expr $GhcMinVersion % 2` = "1"; then
157      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
158         AC_MSG_ERROR([
159      $WithGhc is a development snapshot of GHC, version $GhcVersion.
160      Bootstrapping using this version of GHC is not supported, and may not
161      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
162      or --with-ghc to specify a different GHC to use.])
163      fi
164   fi
165
166   GHC_PACKAGE_DB_FLAG=package-db
167   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.5],GHC_PACKAGE_DB_FLAG=package-conf)
168   AC_SUBST(GHC_PACKAGE_DB_FLAG)
169 fi;
170
171 # GHC is passed to Cabal, so we need a native path
172 if test "${WithGhc}" != ""
173 then
174     ghc_host_os=`"${WithGhc}" +RTS --info | grep 'Host OS' | sed -e 's/.*, "//' -e 's/")//'`
175
176     if test "$ghc_host_os" = "mingw32"
177     then
178         if test "${OSTYPE}" = "msys"
179         then
180             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
181         else
182             # Canonicalise to <drive>:/path/to/ghc
183             WithGhc=`cygpath -m "${WithGhc}"`
184         fi
185         echo "GHC path canonicalised to: ${WithGhc}"
186     fi
187 fi
188 AC_SUBST([WithGhc])
189
190 dnl ** Without optimization some INLINE trickery fails for GHCi
191 SRC_CC_OPTS="-O"
192
193 dnl--------------------------------------------------------------------
194 dnl * Choose host(/target/build) platform
195 dnl--------------------------------------------------------------------
196 dnl If we aren't explicitly told what values to use with configure flags,
197 dnl we ask the bootstrapping compiler what platform it is for
198
199 if test "${WithGhc}" != ""
200 then
201         bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
202         bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
203         if test "$bootstrap_host" != "$bootstrap_target"
204         then
205                 echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work"
206         fi
207 fi
208
209 # We have to run these unconditionally, but we may discard their
210 # results in the following code
211 AC_CANONICAL_BUILD
212 AC_CANONICAL_HOST
213 AC_CANONICAL_TARGET
214
215 FPTOOLS_SET_PLATFORM_VARS
216
217 # Verify that the installed (bootstrap) GHC is capable of generating
218 # code for the requested build platform.
219 if test "$BootingFromHc" = "NO"
220 then
221     if test "$BuildPlatform" != "$bootstrap_target"
222     then
223         echo "This GHC (${WithGhc}) does not generate code for the build platform"
224         echo "   GHC target platform    : $bootstrap_target"
225         echo "   Desired build platform : $BuildPlatform"
226         exit 1
227     fi
228 fi
229
230 # Testing if we shall enable shared libs support on Solaris.
231 # Anything older than SunOS 5.11 aka Solaris 11 (Express) is broken.
232
233 SOLARIS_BROKEN_SHLD=NO
234
235 case $host in
236      i386-*-solaris2)
237      # here we go with the test
238      MINOR=`uname -r|cut -d '.' -f 2-`
239      if test "$MINOR" -lt "11"; then
240         SOLARIS_BROKEN_SHLD=YES
241      fi
242      ;;
243 esac
244
245 AC_SUBST(SOLARIS_BROKEN_SHLD)
246
247 dnl ** Do an unregisterised build?
248 dnl --------------------------------------------------------------
249 case "$HostArch" in
250     i386|x86_64|powerpc|arm)
251         UnregisterisedDefault=NO
252         ;;
253     *)
254         UnregisterisedDefault=YES
255         ;;
256 esac
257 AC_ARG_ENABLE(unregisterised,
258 [AC_HELP_STRING([--enable-unregisterised],
259 [Build an unregisterised compiler (enabled by default on platforms without registerised support) [default="$UnregisterisedDefault"]])],
260 [ if test x"$enableval" = x"yes"; then
261         Unregisterised=YES
262   else
263         Unregisterised=NO
264   fi
265 ],
266 [Unregisterised="$UnregisterisedDefault"]
267 )
268 AC_SUBST(Unregisterised)
269
270 AC_ARG_WITH(hc,
271 [AC_HELP_STRING([--with-hc=ARG],
272         [Use ARG as the path to the compiler for compiling ordinary
273          Haskell code  (default= value of --with-ghc)])],
274 [WithHc="$withval"],
275 [WithHc=$WithGhc]
276 )
277 AC_SUBST(WithHc)
278
279 # This uses GHC, so put it after the "GHC is required" check above:
280 FP_INTREE_GHC_PWD
281 FP_FIND_ROOT
282
283 if test "$HostOS" = "mingw32"
284 then
285     test -d inplace || mkdir inplace
286
287     if test "$HostArch" = "i386"
288     then
289         # NB. If you update the tarballs to a new version of gcc, don't
290         # forget to tweak the paths in driver/gcc/gcc.c.
291         if ! test -d inplace/mingw ||
292              test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma  ||
293              test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma  ||
294              test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma   ||
295              test inplace/mingw -ot ghc-tarballs/mingw/libgcc*.tar.gz      ||
296              test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz      ||
297              test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz      ||
298              test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz     ||
299              test inplace/mingw -ot ghc-tarballs/mingw/libstdc*.tar.lzma   ||
300              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz ||
301              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz ||
302              test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma
303         then
304             AC_MSG_NOTICE([Making in-tree mingw tree])
305             rm -rf inplace/mingw
306             mkdir inplace/mingw
307             (
308                 cd inplace/mingw &&
309                 tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma  &&
310                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma  &&
311                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma   &&
312                 tar --lzma -xf ../../ghc-tarballs/mingw/libgcc*.tar.lzma    &&
313                 tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma    &&
314                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma    &&
315                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma   &&
316                 tar --lzma -xf ../../ghc-tarballs/mingw/libstdc*.tar.lzma   &&
317                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz &&
318                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz &&
319                 tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma    &&
320                 mv bin/gcc.exe bin/realgcc.exe
321             )
322             PATH=`pwd`/inplace/mingw/bin:$PATH inplace/mingw/bin/realgcc.exe driver/gcc/gcc.c driver/utils/cwrapper.c driver/utils/getLocation.c -Idriver/utils -o inplace/mingw/bin/gcc.exe
323             AC_MSG_NOTICE([In-tree mingw tree created])
324         fi
325     else
326         # NB. If you update the tarballs to a new version of gcc, don't
327         # forget to tweak the paths in driver/gcc/gcc.c.
328         if ! test -d inplace/mingw ||
329              test inplace/mingw -ot ghc-tarballs/mingw64/*.tar.bz2
330         then
331             AC_MSG_NOTICE([Making in-tree mingw tree])
332             rm -rf inplace/mingw
333             mkdir inplace/mingw
334             (
335                 cd inplace/mingw &&
336                 tar -jxf ../../ghc-tarballs/mingw64/*.tar.bz2
337             )
338             AC_MSG_NOTICE([In-tree mingw tree created])
339         fi
340     fi
341
342     mingwbin="$hardtop/inplace/mingw/bin/"
343     CC="${mingwbin}gcc.exe"
344     LD="${mingwbin}ld.exe"
345     NM="${mingwbin}nm.exe"
346     OBJDUMP="${mingwbin}objdump.exe"
347     fp_prog_ar="${mingwbin}ar.exe"
348
349     if ! test -d inplace/perl ||
350          test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
351     then
352         AC_MSG_NOTICE([Making in-tree perl tree])
353         rm -rf inplace/perl
354         mkdir inplace/perl
355         (
356             cd inplace/perl &&
357             tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
358         )
359         AC_MSG_NOTICE([In-tree perl tree created])
360     fi
361 fi
362
363 # system libffi
364
365 AC_ARG_WITH([system-libffi],
366 [AC_HELP_STRING([--with-system-libffi],
367   [Use system provided libffi for RTS [default=no]])
368 ])
369
370 AS_IF([test "x$with_system_libffi" = "xyes"],
371   [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
372 )
373
374
375 AC_SUBST(UseSystemLibFFI)
376
377 AC_ARG_WITH([ffi-includes],
378 [AC_HELP_STRING([--with-ffi-includes=ARG]
379   [Find includes for libffi in ARG [default=system default]])
380 ],
381 [
382  if test "x$UseSystemLibFFI" != "xYES"; then
383     AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
384  else
385     FFIIncludeDir="$withval"
386     LIBFFI_CFLAGS="-I $withval" 
387  fi
388 ])
389
390 AC_SUBST(FFIIncludeDir)
391
392 AC_ARG_WITH([ffi-libraries],
393 [AC_HELP_STRING([--with-ffi-libraries=ARG]
394   [Find libffi in ARG [default=system default]])
395 ],
396 [
397  if test "x$UseSystemLibFFI" != "xYES"; then
398     AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
399  else
400     FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
401  fi
402 ])
403
404 AC_SUBST(FFILibDir)
405
406 AS_IF([test "$UseSystemLibFFI" = "YES"], [
407  CFLAGS2="$CFLAGS"
408  CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
409  LDFLAGS2="$LDFLAGS"
410  LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
411  AC_CHECK_LIB(ffi, ffi_call,
412   [AC_CHECK_HEADERS([ffi.h], [break], [])
413    AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
414   [AC_MSG_ERROR([Cannot find system libffi])])
415  CFLAGS="$CFLAGS2"
416  LDFLAGS="$LDFLAGS2"
417 ])
418
419 FP_ICONV
420 FP_GMP
421
422 XCODE_VERSION()
423
424 SplitObjsBroken=NO
425 if test "$TargetOS_CPP" = "darwin"
426 then
427     # Split objects is broken (#4013) with XCode < 3.2
428     if test "$XCodeVersion1" -lt 3
429     then
430         SplitObjsBroken=YES
431     else
432         if test "$XCodeVersion1" -eq 3
433         then
434             if test "$XCodeVersion2" -lt 2
435             then
436                 SplitObjsBroken=YES
437             fi
438         fi
439     fi
440 fi
441 AC_SUBST([SplitObjsBroken])
442
443 dnl ** Building a cross compiler?
444 dnl --------------------------------------------------------------
445 CrossCompiling=NO
446 # If 'host' and 'target' differ, then this means we are building a cross-compiler.
447 if test "$target" != "$host" ; then
448     CrossCompiling=YES
449     cross_compiling=yes   # This tells configure that it can accept just 'target',
450                           # otherwise you get
451                           #   configure: error: cannot run C compiled programs.
452                           #   If you meant to cross compile, use `--host'.
453 fi
454 if test "$build" != "$host" ; then
455    AC_MSG_ERROR([
456 You've selected:
457
458   BUILD:  $build   (the architecture we're building on)
459   HOST:   $host    (the architecture the compiler we're building will execute on)
460   TARGET: $target  (the architecture the compiler we're building will produce code for)
461
462 BUILD must equal HOST; that is, we do not support building GHC itself
463 with a cross-compiler.  To cross-compile GHC itself, set TARGET: stage
464 1 will be a cross-compiler, and stage 2 will be the cross-compiled
465 GHC.
466 ])
467 fi
468 if test "$CrossCompiling" = "YES"
469 then
470   CrossCompilePrefix="${target}-"
471 else
472   CrossCompilePrefix=""
473 fi
474 TargetPlatformFull="${target}"
475 AC_SUBST(CrossCompiling)
476 AC_SUBST(CrossCompilePrefix)
477 AC_SUBST(TargetPlatformFull)
478
479 dnl ** Which gcc to use?
480 dnl --------------------------------------------------------------
481 FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
482 CC="$WhatGccIsCalled"
483 export CC
484
485 dnl ** Which ld to use?
486 dnl --------------------------------------------------------------
487 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld])
488 LdCmd="$LD"
489 AC_SUBST([LdCmd])
490
491 dnl ** Which nm to use?
492 dnl --------------------------------------------------------------
493 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
494 NmCmd="$NM"
495 AC_SUBST([NmCmd])
496
497 # Note: we may not have objdump on OS X, and we only need it on Windows (for DLL checks)
498 case $HostOS_CPP in
499 cygwin32|mingw32)
500     dnl ** Which objdump to use?
501     dnl --------------------------------------------------------------
502     FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
503     ObjdumpCmd="$OBJDUMP"
504     AC_SUBST([ObjdumpCmd])
505     ;;
506 esac
507
508 dnl ** Which LLVM llc to use?
509 dnl --------------------------------------------------------------
510 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([LLC], [llc], [llc])
511 LlcCmd="$LLC"
512 AC_SUBST([LlcCmd])
513
514 dnl ** Which LLVM opt to use?
515 dnl --------------------------------------------------------------
516 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OPT], [opt], [opt])
517 OptCmd="$OPT"
518 AC_SUBST([OptCmd])
519
520 dnl ** Mac OS X: explicit deployment target
521 dnl --------------------------------------------------------------
522 AC_ARG_WITH([macosx-deployment-target],
523 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
524         [Build for Mac OS VERSION and higher  (default= version of build host)])],
525 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
526  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
527    # ignore everywhere, but on Mac OS
528    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
529    FP_MACOSX_DEPLOYMENT_TARGET=none
530  fi],
531 [FP_MACOSX_DEPLOYMENT_TARGET=none]
532 )
533 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
534 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
535 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
536
537 dnl --------------------------------------------------------------
538 dnl End of configure script option section
539 dnl --------------------------------------------------------------
540
541
542 dnl --------------------------------------------------------------
543 dnl * General configuration checks
544 dnl --------------------------------------------------------------
545
546 dnl ** Can the unix package be built?
547 dnl --------------------------------------------------------------
548
549 if test "$TargetOS" = "mingw32"
550 then
551     GhcLibsWithUnix=NO
552 else
553     GhcLibsWithUnix=YES
554 fi
555 AC_SUBST([GhcLibsWithUnix])
556
557 dnl ** does #! work?
558 AC_SYS_INTERPRETER()
559
560 dnl ** look for `perl'
561 case $HostOS_CPP in
562 cygwin32|mingw32)
563     PerlCmd=$hardtop/inplace/perl/perl
564     ;;
565 *)
566     AC_PATH_PROG(PerlCmd,perl)
567     if test -z "$PerlCmd"
568     then
569         echo "You must install perl before you can continue"
570         echo "Perhaps it is already installed, but not in your PATH?"
571         exit 1
572     else
573         FPTOOLS_CHECK_PERL_VERSION
574     fi
575     ;;
576 esac
577
578 dnl ** look for GCC and find out which version
579 dnl     Figure out which C compiler to use.  Gcc is preferred.
580 dnl     If gcc, make sure it's at least 3.0
581 dnl
582 FP_GCC_VERSION
583
584 dnl ** look to see if we have a C compiler using an llvm back end.
585 dnl
586 FP_CC_LLVM_BACKEND
587
588 FP_PROG_LD_HashSize31
589 FP_PROG_LD_ReduceMemoryOverheads
590 FP_PROG_LD_IS_GNU
591 FP_PROG_LD_BUILD_ID
592 FP_PROG_LD_NO_COMPACT_UNWIND
593
594
595 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
596 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
597 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
598 # Stage 3 won't be supported by cross-compilation
599 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
600
601 FP_GCC_EXTRA_FLAGS
602
603 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
604 AC_PROG_CPP
605
606 AC_SUBST(CONF_CC_OPTS_STAGE0)
607 AC_SUBST(CONF_CC_OPTS_STAGE1)
608 AC_SUBST(CONF_CC_OPTS_STAGE2)
609 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
610 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
611 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
612 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
613 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
614 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
615 AC_SUBST(CONF_CPP_OPTS_STAGE0)
616 AC_SUBST(CONF_CPP_OPTS_STAGE1)
617 AC_SUBST(CONF_CPP_OPTS_STAGE2)
618
619 dnl ** Set up the variables for the platform in the settings file.
620 dnl May need to use gcc to find platform details.
621 dnl --------------------------------------------------------------
622 FPTOOLS_SET_HASKELL_PLATFORM_VARS
623
624 dnl ** figure out how to do context diffs
625 FP_PROG_CONTEXT_DIFF
626
627 dnl Let's make sure install-sh is executable here.  If we got it from
628 dnl a darcs repo, it might not be (see bug #978).
629 chmod +x install-sh
630 dnl ** figure out how to do a BSD-ish install
631 AC_PROG_INSTALL
632
633 dnl If you can run configure, you certainly have /bin/sh
634 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
635
636 dnl ** how to invoke `ar' and `ranlib'
637 FP_PROG_AR_SUPPORTS_ATFILE
638 FP_PROG_AR_NEEDS_RANLIB
639
640 dnl ** Check to see whether ln -s works
641 AC_PROG_LN_S
642
643 FP_SETTINGS
644
645 dnl ** Find the path to sed
646 AC_PATH_PROGS(SedCmd,gsed sed,sed)
647
648
649 dnl ** check for time command
650 AC_PATH_PROG(TimeCmd,time)
651
652 dnl ** check for tar
653 dnl   if GNU tar is named gtar, look for it first.
654 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
655
656 dnl ** check for patch
657 dnl if GNU patch is named gpatch, look for it first
658 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
659
660 dnl ** check for dtrace (currently only implemented for Mac OS X)
661 HaveDtrace=NO
662 AC_PATH_PROG(DtraceCmd,dtrace)
663 if test -n "$DtraceCmd"; then
664   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
665     HaveDtrace=YES
666   fi
667 fi
668 AC_SUBST(HaveDtrace)
669
670 AC_PATH_PROG(HSCOLOUR,HsColour)
671 # HsColour is passed to Cabal, so we need a native path
672 if test "$HostOS"      = "mingw32" && \
673    test "${OSTYPE}"   != "msys"    && \
674    test "${HSCOLOUR}" != ""
675 then
676     # Canonicalise to <drive>:/path/to/gcc
677     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
678 fi
679
680 dnl ** check for DocBook toolchain
681 FP_CHECK_DOCBOOK_DTD
682 FP_DOCBOOK_XSL
683 FP_PROG_DBLATEX
684
685 dnl ** check for ghc-pkg command
686 FP_PROG_GHC_PKG
687
688 dnl ** check for installed happy binary + version
689 dnl    (don't do it if we're booting from .hc files though.)
690 if test "$BootingFromHc" = "NO"; then
691 FPTOOLS_HAPPY
692 fi;
693
694 dnl ** check for installed alex binary + version
695 dnl    (don't do it if we're booting from .hc files though.)
696 if test "$BootingFromHc" = "NO"; then
697 FPTOOLS_ALEX
698 fi;
699
700 dnl --------------------------------------------------
701 dnl ### program checking section ends here ###
702 dnl --------------------------------------------------
703
704 dnl --------------------------------------------------
705 dnl * Platform header file and syscall feature tests
706 dnl ### checking the state of the local header files and syscalls ###
707
708 dnl ** check for full ANSI header (.h) files
709 AC_HEADER_STDC
710
711 dnl ** Enable large file support.  NB. do this before testing the type of
712 dnl    off_t, because it will affect the result of that test.
713 AC_SYS_LARGEFILE
714
715 dnl ** check for specific header (.h) files that we are interested in
716 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/cpuset.h sys/mman.h sys/resource.h sys/select.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])
717
718 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
719 AC_HEADER_TIME
720
721 dnl ** do we have long longs?
722 AC_CHECK_TYPES([long long])
723
724 dnl ** what are the sizes of various types
725 AC_CHECK_SIZEOF(char,               1)
726 AC_CHECK_SIZEOF(double,             8)
727 AC_CHECK_SIZEOF(float,              4)
728 AC_CHECK_SIZEOF(int,                4)
729 AC_CHECK_SIZEOF(long,               4)
730 if test "$ac_cv_type_long_long" = yes; then
731 AC_CHECK_SIZEOF(long long,          8)
732 fi
733 AC_CHECK_SIZEOF(short,              2)
734 AC_CHECK_SIZEOF(unsigned char,      1)
735 AC_CHECK_SIZEOF(unsigned int,       4)
736 AC_CHECK_SIZEOF(unsigned long,      4)
737 if test "$ac_cv_type_long_long" = yes; then
738 AC_CHECK_SIZEOF(unsigned long long, 8)
739 fi
740 AC_CHECK_SIZEOF(unsigned short,     2)
741 AC_CHECK_SIZEOF(void *,             4)
742
743 dnl for use in settings.in
744 WordSize=$ac_cv_sizeof_void_p
745 AC_SUBST(WordSize)
746
747 dnl ** what are alignment constraints on various types
748 FP_CHECK_ALIGNMENT(char)
749 FP_CHECK_ALIGNMENT(double)
750 FP_CHECK_ALIGNMENT(float)
751 FP_CHECK_ALIGNMENT(int)
752 FP_CHECK_ALIGNMENT(long)
753 if test "$ac_cv_type_long_long" = yes; then
754 FP_CHECK_ALIGNMENT(long long)
755 fi
756 FP_CHECK_ALIGNMENT(short)
757 FP_CHECK_ALIGNMENT(unsigned char)
758 FP_CHECK_ALIGNMENT(unsigned int)
759 FP_CHECK_ALIGNMENT(unsigned long)
760 if test "$ac_cv_type_long_long" = yes; then
761 FP_CHECK_ALIGNMENT(unsigned long long)
762 fi
763 FP_CHECK_ALIGNMENT(unsigned short)
764 FP_CHECK_ALIGNMENT(void *)
765
766 FP_CHECK_FUNC([WinExec],
767   [@%:@include <windows.h>], [WinExec("",0)])
768
769 FP_CHECK_FUNC([GetModuleFileName],
770   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
771
772 dnl ** check return type of signal handlers
773 dnl Foo: assumes we can use prototypes.
774 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
775 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
776 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
777 dnl #include <signal.h>
778 dnl #ifdef signal
779 dnl #undef signal
780 dnl #endif
781 dnl void (*signal (int, void (*)(int)))(int);
782 dnl ]],
783 dnl [[int i;]])],
784 dnl [ac_cv_type_signal_handler=void_int],
785 dnl [ac_cv_type_signal_handler=int_void])])
786 dnl if test "$ac_cv_type_signal_handler" = void_int; then
787 dnl AC_DEFINE(VOID_INT_SIGNALS)
788 dnl fi
789
790 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
791 AC_TYPE_SIGNAL
792 if test "$ac_cv_type_signal" = void; then
793   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).])
794 fi
795
796 dnl ** check for more functions
797 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
798 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
799
800 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
801 dnl ** _POSIX_C_SOURCE is defined
802 AC_CHECK_DECLS([ctime_r], , ,
803 [#define _POSIX_SOURCE 1
804 #define _POSIX_C_SOURCE 199506L
805 #include <time.h>])
806
807 dnl ** check for mingwex library
808 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
809 AC_SUBST(HaveLibMingwEx)
810
811 if test $HaveLibMingwEx = YES ; then
812   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
813 fi
814
815 dnl ** check for math library
816 dnl    Keep that check as early as possible.
817 dnl    as we need to know whether we need libm
818 dnl    for math functions or not
819 dnl    (see http://hackage.haskell.org/trac/ghc/ticket/3730)
820 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
821 if test $HaveLibM = YES
822 then
823   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
824 fi
825
826 dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
827 dnl    the order of these tests matters: bfd needs libiberty
828 AC_CHECK_LIB(iberty, xmalloc)
829 AC_CHECK_LIB(bfd,    bfd_uncompress_section_contents)
830
831 dnl ################################################################
832 dnl Check for libraries
833 dnl ################################################################
834
835 dnl ** check whether we need -ldl to get dlopen()
836
837 AC_CHECK_LIB(dl, dlopen,
838     [HaveLibDL=YES
839      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
840      LIBS="$LIBS -ldl"],
841     [HaveLibDL=NO])
842 AC_SUBST(HaveLibDL)
843
844 dnl --------------------------------------------------
845 dnl * Miscellaneous feature tests
846 dnl --------------------------------------------------
847
848 dnl ** can we get alloca?
849 AC_FUNC_ALLOCA
850
851 dnl ** working vfork?
852 AC_FUNC_FORK
853
854 dnl ** determine whether or not const works
855 AC_C_CONST
856
857 dnl ** are we big endian?
858 AC_C_BIGENDIAN
859 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
860
861 dnl ** check for leading underscores in symbol names
862 FP_LEADING_UNDERSCORE
863
864 FP_VISIBILITY_HIDDEN
865
866 dnl ** check for librt
867 AC_CHECK_LIB(rt, clock_gettime)
868 AC_CHECK_FUNCS(clock_gettime timer_settime)
869 FP_CHECK_TIMER_CREATE
870
871 dnl ** check for Apple's "interesting" long double compatibility scheme
872 AC_MSG_CHECKING(for printf\$LDBLStub)
873 AC_TRY_LINK_FUNC(printf\$LDBLStub,
874     [
875         AC_MSG_RESULT(yes)
876         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
877             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
878     ],
879     [
880         AC_MSG_RESULT(no)
881         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
882             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
883     ])
884
885 dnl ** check for eventfd which is needed by the I/O manager
886 AC_CHECK_HEADERS([sys/eventfd.h])
887 AC_CHECK_FUNCS([eventfd])
888
889 # test for GTK+
890 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
891 if test -n "$GTK_CONFIG"; then
892   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
893     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
894   else
895     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
896     GTK_CONFIG=
897   fi
898 fi
899 AC_SUBST([GTK_CONFIG])
900
901 # checking for PAPI
902 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
903 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
904 AC_SUBST(HavePapiLib)
905 AC_SUBST(HavePapiHeader)
906
907 AC_CHECK_FUNCS(__mingw_vfprintf)
908
909 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
910    HavePapi=YES
911 else
912    HavePapi=NO
913 fi
914 AC_SUBST(HavePapi)
915
916 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
917    test "$XsltprocCmd" = ""
918 then
919     BUILD_DOCBOOK_HTML=NO
920 else
921     BUILD_DOCBOOK_HTML=YES
922 fi
923 AC_SUBST(BUILD_DOCBOOK_HTML)
924
925 if test "$DblatexCmd" = ""
926 then
927     BUILD_DOCBOOK_PS=NO
928     BUILD_DOCBOOK_PDF=NO
929 else
930     BUILD_DOCBOOK_PS=YES
931     BUILD_DOCBOOK_PDF=YES
932 fi
933 AC_SUBST(BUILD_DOCBOOK_PS)
934 AC_SUBST(BUILD_DOCBOOK_PDF)
935
936 LIBRARY_VERSION(base)
937 LIBRARY_VERSION(Cabal, Cabal/Cabal)
938 LIBRARY_VERSION(ghc-prim)
939 LIBRARY_ghc_VERSION="$ProjectVersion"
940 AC_SUBST(LIBRARY_ghc_VERSION)
941
942 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
943    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
944 fi
945
946 AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal ghc.spec settings docs/users_guide/ug-book.xml docs/users_guide/ug-ent.xml docs/index.html libraries/prologue.txt distrib/ghc.iss distrib/configure.ac])
947 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
948 AC_OUTPUT
949
950 # We got caught by
951 #     http://savannah.gnu.org/bugs/index.php?1516
952 #     $(eval ...) inside conditionals causes errors
953 # with make 3.80, so warn the user if it looks like they're about to
954 # try to use it.
955 # We would use "grep -q" here, but Solaris's grep doesn't support it.
956 checkMake380() {
957     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
958     then
959         echo
960         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
961         echo "This version cannot be used to build GHC."
962         echo "Please use GNU make >= 3.81."
963     fi
964 }
965
966 checkMake380 make
967 checkMake380 gmake
968
969 echo ["
970 ----------------------------------------------------------------------
971 Configure completed successfully.
972
973    Building GHC version  : $ProjectVersion
974
975    Build platform        : $BuildPlatform
976    Host platform         : $HostPlatform
977    Target platform       : $TargetPlatform
978 "]
979
980 if test "$BootingFromHc" = "YES"; then
981 echo ["\
982    Bootstrapping from HC files.
983 "]
984 else
985 echo ["\
986    Bootstrapping using   : $WithGhc
987       which is version   : $GhcVersion
988 "]
989 fi
990
991 echo ["\
992    Using GCC                 : $WhatGccIsCalled
993       which is version       : $GccVersion
994    Building a cross compiler : $CrossCompiling
995
996    ld       : $LdCmd
997    Happy    : $HappyCmd ($HappyVersion)
998    Alex     : $AlexCmd ($AlexVersion)
999    Perl     : $PerlCmd
1000    dblatex  : $DblatexCmd
1001    xsltproc : $XsltprocCmd"]
1002
1003 if test "$HSCOLOUR" = ""; then
1004 echo ["
1005    HsColour was not found; documentation will not contain source links
1006 "]
1007 else
1008 echo ["\
1009    HsColour : $HSCOLOUR
1010 "]
1011 fi
1012
1013 echo ["\
1014    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1015    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
1016    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
1017
1018 echo ["----------------------------------------------------------------------
1019 "]
1020
1021 echo "\
1022 For a standard build of GHC (fully optimised with profiling), type (g)make.
1023
1024 To make changes to the default build configuration, copy the file
1025 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1026
1027 For more information on how to configure your GHC build, see
1028    http://hackage.haskell.org/trac/ghc/wiki/Building
1029 "