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