Use stdint types to define SIZEOF and ALIGNMENT of INTx/WORDx
[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], [8.1], [glasgow-haskell-bugs@haskell.org], [ghc-AC_PACKAGE_VERSION])
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 this makes sure `./configure --target=<cross-compile-target>`
37 dnl works as expected, since we're slightly modifying how Autoconf
38 dnl interprets build/host/target and how this interacts with $CC tests
39 test -n "$target_alias" && ac_tool_prefix=$target_alias-
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 FP_PROG_SORT
48
49 dnl ----------------------------------------------------------
50 FP_SETUP_PROJECT_VERSION
51
52 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
53 AC_SUBST([release], [1])
54
55 # First off, a distrib sanity check..
56 AC_CONFIG_SRCDIR([mk/config.mk.in])
57
58 dnl * We require autoconf version 2.60
59 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
60 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
61 dnl Using autoconf 2.59 started to give nonsense like this
62 dnl  #define SIZEOF_CHAR 0
63 dnl recently.
64 AC_PREREQ([2.60])
65
66 # -------------------------------------------------------------------------
67 # Prepare to generate the following header files
68 #
69 #
70 AC_CONFIG_HEADER(mk/config.h)
71
72 # No, semi-sadly, we don't do `--srcdir'...
73 if test x"$srcdir" != 'x.' ; then
74     echo "This configuration does not support the \`--srcdir' option.."
75     exit 1
76 fi
77
78 dnl --------------------------------------------------------------
79 dnl * Project specific configuration options
80 dnl --------------------------------------------------------------
81 dnl What follows is a bunch of options that can either be configured
82 dnl through command line options to the configure script or by
83 dnl supplying defns in the build tree's mk/build.mk. Having the option to
84 dnl use either is considered a Feature.
85
86 dnl ** What command to use to compile compiler sources ?
87 dnl --------------------------------------------------------------
88
89 AC_ARG_WITH([ghc],
90 [AC_HELP_STRING([--with-ghc=ARG],
91   [Use ARG as the path to GHC  [default=autodetect]])],
92   [WithGhc="$withval"],
93   [if test "$GHC" = ""; then
94     AC_PATH_PROG([GHC], [ghc])
95   fi
96   WithGhc="$GHC"])
97
98 dnl ** Tell the make system which OS we are using
99 dnl $OSTYPE is set by the operating system to "msys" or "cygwin" or something
100 AC_SUBST(OSTYPE)
101
102 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
103 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
104                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
105         EnableBootstrapWithDevelSnaphost=YES,
106         EnableBootstrapWithDevelSnaphost=NO
107 )
108
109 AC_ARG_ENABLE(tarballs-autodownload,
110 [AC_HELP_STRING([--enable-tarballs-autodownload],
111                 [Automatically download Windows distribution binaries if needed.])],
112         TarballsAutodownload=YES,
113         TarballsAutodownload=NO
114 )
115
116 dnl CC_STAGE0 is like the "previous" variable CC (inherited by CC_STAGE[123])
117 dnl but instead used by stage0 for bootstrapping stage1
118 AC_ARG_VAR(CC_STAGE0, [C compiler command (bootstrap)])
119
120 if test "$WithGhc" != ""; then
121   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
122
123   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
124      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
125   fi
126
127   AC_SUBST(GhcVersion)dnl
128   AC_SUBST(GhcMajVersion)dnl
129   AC_SUBST(GhcMinVersion)dnl
130   AC_SUBST(GhcPatchLevel)dnl
131   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
132   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
133
134   dnl infer CC_STAGE0 from `ghc --info` unless explicitly set by user
135   if test -z "$CC_STAGE0"; then
136     BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
137   fi
138
139   BOOTSTRAPPING_GHC_INFO_FIELD([LD_STAGE0],[ld command])
140   BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command])
141   BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags])
142   BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file])
143 fi
144
145 dnl ** Must have GHC to build GHC
146 if test "$WithGhc" = ""
147 then
148     AC_MSG_ERROR([GHC is required.])
149 fi
150 FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.10],
151     [AC_MSG_ERROR([GHC version 7.10 or later is required to compile GHC.])])
152
153 if test `expr $GhcMinVersion % 2` = "1"
154 then
155     if test "$EnableBootstrapWithDevelSnaphost" = "NO"
156     then
157         AC_MSG_ERROR([
158      $WithGhc is a development snapshot of GHC, version $GhcVersion.
159      Bootstrapping using this version of GHC is not supported, and may not
160      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
161      or --with-ghc to specify a different GHC to use.])
162     fi
163 fi
164
165 GHC_PACKAGE_DB_FLAG=package-db
166 AC_SUBST(GHC_PACKAGE_DB_FLAG)
167
168 FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.11],
169                     SUPPORTS_THIS_UNIT_ID=NO,
170                     SUPPORTS_THIS_UNIT_ID=YES)
171 AC_SUBST(SUPPORTS_THIS_UNIT_ID)
172
173 # GHC is passed to Cabal, so we need a native path
174 if test "${WithGhc}" != ""
175 then
176     ghc_host_os=`"${WithGhc}" +RTS --info | grep 'Host OS' | sed -e 's/.*, "//' -e 's/")//'`
177
178     if test "$ghc_host_os" = "mingw32"
179     then
180         if test "${OSTYPE}" = "msys"
181         then
182             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
183         else
184             # Canonicalise to <drive>:/path/to/ghc
185             WithGhc=`cygpath -m "${WithGhc}"`
186         fi
187         echo "GHC path canonicalised to: ${WithGhc}"
188     fi
189 fi
190 AC_SUBST([WithGhc])
191
192 dnl ** Without optimization some INLINE trickery fails for GHCi
193 SRC_CC_OPTS="-O"
194
195 dnl--------------------------------------------------------------------
196 dnl * Choose host(/target/build) platform
197 dnl--------------------------------------------------------------------
198 dnl If we aren't explicitly told what values to use with configure flags,
199 dnl we ask the bootstrapping compiler what platform it is for
200
201 if test "${WithGhc}" != ""
202 then
203         bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
204         bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
205         if test "$bootstrap_host" != "$bootstrap_target"
206         then
207                 echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work"
208         fi
209 fi
210
211 # We have to run these unconditionally, but we may discard their
212 # results in the following code
213 AC_CANONICAL_BUILD
214 AC_CANONICAL_HOST
215 AC_CANONICAL_TARGET
216
217 FPTOOLS_SET_PLATFORM_VARS
218
219 # Verify that the installed (bootstrap) GHC is capable of generating
220 # code for the requested build platform.
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
229 # Testing if we shall enable shared libs support on Solaris.
230 # Anything older than SunOS 5.11 aka Solaris 11 (Express) is broken.
231
232 SOLARIS_BROKEN_SHLD=NO
233
234 case $host in
235      i386-*-solaris2)
236      # here we go with the test
237      MINOR=`uname -r|cut -d '.' -f 2-`
238      if test "$MINOR" -lt "11"; then
239          SOLARIS_BROKEN_SHLD=YES
240      fi
241      ;;
242 esac
243
244 AC_SUBST(SOLARIS_BROKEN_SHLD)
245
246 dnl ** Do an unregisterised build?
247 dnl --------------------------------------------------------------
248 case "$HostArch" in
249     i386|x86_64|powerpc|powerpc64|powerpc64le|arm)
250         UnregisterisedDefault=NO
251         ;;
252     *)
253         UnregisterisedDefault=YES
254         ;;
255 esac
256 AC_ARG_ENABLE(unregisterised,
257 [AC_HELP_STRING([--enable-unregisterised],
258 [Build an unregisterised compiler (enabled by default on platforms without registerised support) [default="$UnregisterisedDefault"]])],
259 [ if test x"$enableval" = x"yes"; then
260         Unregisterised=YES
261   else
262         Unregisterised=NO
263   fi
264 ],
265 [Unregisterised="$UnregisterisedDefault"]
266 )
267 AC_SUBST(Unregisterised)
268
269 # Requires FPTOOLS_SET_PLATFORM_VARS to be run first.
270 FP_FIND_ROOT
271
272 fail() {
273     echo >&2
274     echo "$1" >&2
275     exit 1
276 }
277
278
279 if test "$HostOS" = "mingw32"
280 then
281     # Find the mingw-w64 7z file to extract.
282     # NB. If you update the tarballs to a new version of gcc, don't
283     # forget to tweak the paths in driver/gcc/gcc.c.
284     if test "$HostArch" = "i386"
285     then
286         mingw_arch="i686"
287         tarball_dest_dir="mingw-w64/x86"
288         tarball_mingw_dir="mingw32"
289     else
290         mingw_arch="x86_64"
291         tarball_dest_dir="mingw-w64/x86_64"
292         tarball_mingw_dir="mingw64"
293     fi
294 fi
295
296 set_up_tarballs() {
297     AC_MSG_NOTICE([Checking for Windows toolchain tarballs...])
298     local action
299     if test "$TarballsAutodownload" = "NO"
300     then
301         action="verify"
302     else
303         action="download"
304     fi
305     mk/get-win32-tarballs.sh $action $HostArch > missing-win32-tarballs
306     case $? in
307         0)
308            rm missing-win32-tarballs
309            ;;
310         2)
311            echo
312            echo "Error:"
313            echo "Needed msys2 tarballs are missing. You have a few options to get them,"
314            echo
315            echo "  * run configure with the --enable-tarballs-autodownload option"
316            echo
317            echo "  * run mk/get-win32-tarballs.sh download ${HostArch}"
318            echo
319            echo "  * manually download the files listed in ./missing-win32-tarballs and place"
320            echo "    them in the ghc-tarballs directory."
321            echo
322            exit 1
323            ;;
324         *)
325            echo
326            echo "Error fetching msys2 tarballs; see errors above."
327            exit 1
328            ;;
329     esac
330
331     # Extract all the tarballs in one go
332     if ! test -d inplace/mingw
333     then
334         AC_MSG_NOTICE([Extracting Windows toolchain from archives (may take a while)...])
335         rm -rf inplace/mingw
336         local base_dir="../ghc-tarballs/${tarball_dest_dir}"
337         ( cd inplace &&
338         find "${base_dir}" -name "*.tar.xz" -exec tar xfJ {} \; &&
339         rm ".MTREE" &&
340         rm ".PKGINFO" &&
341         cd .. ) || fail "Error: Could not extract Windows toolchains."
342
343         mv "inplace/${tarball_mingw_dir}" inplace/mingw &&
344         touch inplace/mingw
345
346         # NB. Now since the GCC is hardcoded to use /mingw32 we need to
347         # make a wrapper around it to give it the proper paths
348         mv inplace/mingw/bin/gcc.exe inplace/mingw/bin/realgcc.exe
349         PATH=`pwd`/inplace/mingw/bin:$PATH
350         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
351
352         AC_MSG_NOTICE([In-tree MingW-w64 tree created])
353     fi
354 }
355
356 if test "$HostOS" = "mingw32"
357 then
358     test -d inplace || mkdir inplace
359
360     # NB. Download and extract the MingW-w64 distribution if required
361     set_up_tarballs
362
363     mingwbin="$hardtop/inplace/mingw/bin/"
364     CC="${mingwbin}gcc.exe"
365     LD="${mingwbin}ld.exe"
366     NM="${mingwbin}nm.exe"
367     RANLIB="${mingwbin}ranlib.exe"
368     OBJDUMP="${mingwbin}objdump.exe"
369     fp_prog_ar="${mingwbin}ar.exe"
370
371     # NB. Download the perl binaries if required
372     if ! test -d inplace/perl ||
373          test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
374     then
375         AC_MSG_NOTICE([Making in-tree perl tree])
376         rm -rf inplace/perl
377         mkdir inplace/perl
378         (
379             cd inplace/perl &&
380             tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
381         )
382         AC_MSG_NOTICE([In-tree perl tree created])
383     fi
384 fi
385
386 FP_ICONV
387 FP_GMP
388 FP_CURSES
389
390 XCODE_VERSION()
391
392 SplitObjsBroken=NO
393 if test "$TargetOS_CPP" = "darwin"
394 then
395     # Split objects is broken (#4013) with XCode < 3.2
396     if test "$XCodeVersion1" -lt 3
397     then
398         SplitObjsBroken=YES
399     else
400         if test "$XCodeVersion1" -eq 3
401         then
402             if test "$XCodeVersion2" -lt 2
403             then
404                 SplitObjsBroken=YES
405             fi
406         fi
407     fi
408 fi
409 AC_SUBST([SplitObjsBroken])
410
411 dnl ** Building a cross compiler?
412 dnl --------------------------------------------------------------
413 CrossCompiling=NO
414 # If 'host' and 'target' differ, then this means we are building a cross-compiler.
415 if test "$target" != "$host" ; then
416     CrossCompiling=YES
417     cross_compiling=yes   # This tells configure that it can accept just 'target',
418                           # otherwise you get
419                           #   configure: error: cannot run C compiled programs.
420                           #   If you meant to cross compile, use `--host'.
421 fi
422 if test "$build" != "$host" ; then
423    AC_MSG_ERROR([
424 You've selected:
425
426   BUILD:  $build   (the architecture we're building on)
427   HOST:   $host    (the architecture the compiler we're building will execute on)
428   TARGET: $target  (the architecture the compiler we're building will produce code for)
429
430 BUILD must equal HOST; that is, we do not support building GHC itself
431 with a cross-compiler.  To cross-compile GHC itself, set TARGET: stage
432 1 will be a cross-compiler, and stage 2 will be the cross-compiled
433 GHC.
434 ])
435 fi
436 if test "$CrossCompiling" = "YES"
437 then
438   CrossCompilePrefix="${target}-"
439 else
440   CrossCompilePrefix=""
441 fi
442 TargetPlatformFull="${target}"
443 AC_SUBST(CrossCompiling)
444 AC_SUBST(CrossCompilePrefix)
445 AC_SUBST(TargetPlatformFull)
446
447 dnl ** Which gcc to use?
448 dnl --------------------------------------------------------------
449
450 AC_ARG_WITH([gcc],
451         AS_HELP_STRING([--with-gcc=ARG], [Use ARG as the path to gcc (obsolete, use CC=ARG instead) [default=autodetect]]),
452         AC_MSG_ERROR([--with-gcc=$withval is obsolete (use './configure CC=$withval' or 'CC=$withval ./configure' instead)]))
453
454 AC_ARG_WITH([clang],
455         AS_HELP_STRING([--with-clang=ARG], [Use ARG as the path to gcc (obsolete, use CC=ARG instead) [default=autodetect]]),
456         AC_MSG_ERROR([--with-clang=$withval is obsolete (use './configure CC=$withval' or 'CC=$withval ./configure' instead)]))
457
458 dnl detect compiler (prefer gcc over clang) and set $CC (unless CC already set),
459 dnl later CC is copied to CC_STAGE{1,2,3}
460 AC_PROG_CC([gcc clang])
461
462 MAYBE_OVERRIDE_STAGE0([ar],[AR_STAGE0])
463
464 dnl make extensions visible to allow feature-tests to detect them lateron
465 AC_USE_SYSTEM_EXTENSIONS
466
467 dnl ** figure out how to invoke the C preprocessor (i.e. `gcc -E`)
468 AC_PROG_CPP
469
470 # --with-hs-cpp/--with-hs-cpp-flags
471 FP_CPP_CMD_WITH_ARGS(HaskellCPPCmd, HaskellCPPArgs)
472 AC_SUBST([HaskellCPPCmd])
473 AC_SUBST([HaskellCPPArgs])
474
475 FP_SET_CFLAGS_C99([CC],[CFLAGS],[CPPFLAGS])
476 FP_SET_CFLAGS_C99([CC_STAGE0],[CONF_CC_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
477 FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
478 FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
479
480 dnl ** Which ld to use?
481 dnl --------------------------------------------------------------
482 FIND_LD([LdCmd])
483 AC_SUBST([LdCmd])
484
485 dnl ** Which nm to use?
486 dnl --------------------------------------------------------------
487 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
488 NmCmd="$NM"
489 AC_SUBST([NmCmd])
490
491 dnl ** Which objdump to use?
492 dnl --------------------------------------------------------------
493 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OBJDUMP], [objdump], [objdump])
494 ObjdumpCmd="$OBJDUMP"
495 AC_SUBST([ObjdumpCmd])
496
497 dnl ** Which ar to use?
498 dnl --------------------------------------------------------------
499 FP_ARG_WITH_PATH_GNU_PROG([AR], [ar], [ar])
500 ArCmd="$AR"
501 fp_prog_ar="$AR"
502 AC_SUBST([ArCmd])
503
504 dnl ** Which ranlib to use?
505 dnl --------------------------------------------------------------
506 FP_ARG_WITH_PATH_GNU_PROG([RANLIB], [ranlib], [ranlib])
507 RanlibCmd="$RANLIB"
508 RANLIB="$RanlibCmd"
509
510
511 # Note: we may not have objdump on OS X, and we only need it on Windows (for DLL checks)
512 case $HostOS_CPP in
513 cygwin32|mingw32)
514     dnl ** Which objdump to use?
515     dnl --------------------------------------------------------------
516     FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
517     ObjdumpCmd="$OBJDUMP"
518     AC_SUBST([ObjdumpCmd])
519     ;;
520 esac
521
522 # Here is where we re-target which specific version of the LLVM
523 # tools we are looking for. In the past, GHC supported a number of
524 # versions of LLVM simultaneously, but that stopped working around
525 # 3.5/3.6 release of LLVM.
526 LlvmVersion=3.7
527 AC_SUBST([LlvmVersion])
528 sUPPORTED_LLVM_VERSION=$(echo \($LlvmVersion\) | sed 's/\./,/')
529 AC_DEFINE_UNQUOTED([sUPPORTED_LLVM_VERSION], ${sUPPORTED_LLVM_VERSION}, [The supported LLVM version number])
530
531 dnl ** Which LLVM llc to use?
532 dnl --------------------------------------------------------------
533 FIND_LLVM_PROG([LLC], [llc], [llc], [$LlvmVersion])
534 LlcCmd="$LLC"
535 AC_SUBST([LlcCmd])
536
537 dnl ** Which LLVM opt to use?
538 dnl --------------------------------------------------------------
539 FIND_LLVM_PROG([OPT], [opt], [opt], [$LlvmVersion])
540 OptCmd="$OPT"
541 AC_SUBST([OptCmd])
542
543 dnl --------------------------------------------------------------
544 dnl End of configure script option section
545 dnl --------------------------------------------------------------
546
547
548 dnl --------------------------------------------------------------
549 dnl * General configuration checks
550 dnl --------------------------------------------------------------
551
552 dnl ** Bug 9439: Some GHC 7.8 releases had broken LLVM code generator.
553 dnl Unfortunately we don't know whether the user is going to request a
554 dnl build with the LLVM backend as this is only given in build.mk.
555 dnl
556 dnl Instead, we try to do as much work as possible here, checking
557 dnl whether -fllvm is the stage 0 compiler's default. If so we
558 dnl fail. If not, we check whether -fllvm is affected explicitly and
559 dnl if so set a flag. The build system will later check this flag
560 dnl after the desired build flags are known.
561
562 dnl This problem is further complicated by the fact that the llvm
563 dnl version used by the bootstrap compiler may be different from the
564 dnl version we arre trying to compile GHC against. Therefore, we need
565 dnl to find the boostrap compiler's `settings` file then check to see
566 dnl if the `opt` and `llc` command strings are non-empty and if these
567 dnl programs exist. Only if they exist to we test for bug #9439.
568
569 FIND_GHC_BOOTSTRAP_PROG([BootstrapLlcCmd], [${WithGhc}], "LLVM llc command")
570 FIND_GHC_BOOTSTRAP_PROG([BootstrapOptCmd], [${WithGhc}], "LLVM opt command")
571
572 if test -n "$BootstrapLlcCmd" && test -n "$BootstrapOptCmd"
573 then
574     AC_MSG_CHECKING(whether bootstrap compiler is affected by bug 9439)
575     echo "main = putStrLn \"%function\"" > conftestghc.hs
576
577     # Check whether LLVM backend is default for this platform
578     "${WithGhc}" -pgmlc="${BootstrapLlcCmd}" -pgmlo="${BootstrapOptCmd}" conftestghc.hs 2>&1 >/dev/null
579     res=`./conftestghc`
580     if test "x$res" = "x%object"
581     then
582         AC_MSG_RESULT(yes)
583         echo "Buggy bootstrap compiler"
584         echo ""
585         echo "The stage 0 compiler $WithGhc is affected by GHC Bug \#9439"
586         echo "and therefore will miscompile the LLVM backend if -fllvm is"
587         echo "used."
588         echo
589         echo "Please use another bootstrap compiler"
590         exit 1
591     fi
592
593     # -fllvm is not the default, but set a flag so the Makefile can check
594     # -for it in the build flags later on
595     "${WithGhc}" -fforce-recomp -pgmlc="${BootstrapLlcCmd}" -pgmlo="${BootstrapOptCmd}" -fllvm conftestghc.hs 2>&1 >/dev/null
596     if test $? = 0
597     then
598         res=`./conftestghc`
599         if test "x$res" = "x%object"
600         then
601             AC_MSG_RESULT(yes)
602             GHC_LLVM_AFFECTED_BY_9439=1
603         elif test "x$res" = "x%function"
604         then
605             AC_MSG_RESULT(no)
606             GHC_LLVM_AFFECTED_BY_9439=0
607         else
608             AC_MSG_WARN(unexpected output $res)
609         fi
610     else
611         AC_MSG_RESULT(failed to compile, assuming no)
612     fi
613 fi
614 AC_SUBST([GHC_LLVM_AFFECTED_BY_9439])
615
616 dnl ** Can the unix package be built?
617 dnl --------------------------------------------------------------
618
619 if test "$TargetOS" = "mingw32"
620 then
621     GhcLibsWithUnix=NO
622 else
623     GhcLibsWithUnix=YES
624 fi
625 AC_SUBST([GhcLibsWithUnix])
626
627 dnl ** does #! work?
628 AC_SYS_INTERPRETER()
629
630 dnl ** look for `perl'
631 case $HostOS_CPP in
632 cygwin32|mingw32)
633     PerlCmd=$hardtop/inplace/perl/perl
634     ;;
635 *)
636     AC_PATH_PROG(PerlCmd,perl)
637     if test -z "$PerlCmd"
638     then
639         echo "You must install perl before you can continue"
640         echo "Perhaps it is already installed, but not in your PATH?"
641         exit 1
642     else
643         FPTOOLS_CHECK_PERL_VERSION
644     fi
645     ;;
646 esac
647
648 dnl ** look for GCC and find out which version
649 dnl     Figure out which C compiler to use.  Gcc is preferred.
650 dnl     If gcc, make sure it's at least 3.0
651 dnl
652 FP_GCC_VERSION
653
654 dnl ** look to see if we have a C compiler using an llvm back end.
655 dnl
656 FP_CC_LLVM_BACKEND
657
658 FP_PROG_LD_IS_GNU
659 FP_PROG_LD_BUILD_ID
660 FP_PROG_LD_NO_COMPACT_UNWIND
661 FP_PROG_LD_FILELIST
662
663
664 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
665 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
666 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
667 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
668 # Stage 3 won't be supported by cross-compilation
669
670 FP_GCC_EXTRA_FLAGS
671
672 AC_SUBST(CONF_CC_OPTS_STAGE0)
673 AC_SUBST(CONF_CC_OPTS_STAGE1)
674 AC_SUBST(CONF_CC_OPTS_STAGE2)
675 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
676 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
677 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
678 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
679 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
680 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
681 AC_SUBST(CONF_CPP_OPTS_STAGE0)
682 AC_SUBST(CONF_CPP_OPTS_STAGE1)
683 AC_SUBST(CONF_CPP_OPTS_STAGE2)
684
685 dnl ** Set up the variables for the platform in the settings file.
686 dnl May need to use gcc to find platform details.
687 dnl --------------------------------------------------------------
688 FPTOOLS_SET_HASKELL_PLATFORM_VARS
689
690 dnl ** figure out how to do context diffs
691 FP_PROG_CONTEXT_DIFF
692
693 dnl Let's make sure install-sh is executable here.  If we got it from
694 dnl a darcs repo, it might not be (see bug #978).
695 chmod +x install-sh
696 dnl ** figure out how to do a BSD-ish install
697 AC_PROG_INSTALL
698
699 dnl ** how to invoke `ar' and `ranlib'
700 FP_PROG_AR_SUPPORTS_ATFILE
701 FP_PROG_AR_NEEDS_RANLIB
702
703 dnl ** Check to see whether ln -s works
704 AC_PROG_LN_S
705
706 FP_SETTINGS
707
708 dnl ** Find the path to sed
709 AC_PATH_PROGS(SedCmd,gsed sed,sed)
710
711
712 dnl ** check for time command
713 AC_PATH_PROG(TimeCmd,time)
714
715 dnl ** check for tar
716 dnl   if GNU tar is named gtar, look for it first.
717 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
718
719 dnl ** check for patch
720 dnl if GNU patch is named gpatch, look for it first
721 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
722
723 dnl ** check for dtrace (currently only implemented for Mac OS X)
724 HaveDtrace=NO
725 AC_PATH_PROG(DtraceCmd,dtrace)
726 if test -n "$DtraceCmd"; then
727   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
728     HaveDtrace=YES
729   fi
730 fi
731 AC_SUBST(HaveDtrace)
732
733 AC_PATH_PROG(HSCOLOUR,HsColour)
734 # HsColour is passed to Cabal, so we need a native path
735 if test "$HostOS"      = "mingw32" && \
736    test "${OSTYPE}"   != "msys"    && \
737    test "${HSCOLOUR}" != ""
738 then
739     # Canonicalise to <drive>:/path/to/gcc
740     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
741 fi
742
743 dnl ** check for Sphinx toolchain
744 AC_PATH_PROG(SPHINXBUILD,sphinx-build)
745 AC_CACHE_CHECK([for version of sphinx-build], fp_cv_sphinx_version,
746 changequote(, )dnl
747 [if test -n "$SPHINXBUILD"; then
748   fp_cv_sphinx_version=`"$SPHINXBUILD" --version 2>&1 | sed 's/Sphinx\( (sphinx-build)\)\? v\?\([0-9]\.[0-9]\.[0-9]\)/\2/' | head -n1`;
749 fi;
750 changequote([, ])dnl
751 ])
752 FP_COMPARE_VERSIONS([$fp_cv_sphinx_version],-lt,1.0.0,
753     [AC_MSG_WARN([Sphinx version 1.0.0 or later is required to build documentation]); SPHINXBUILD=;])
754
755 dnl ** check for xelatex
756 AC_PATH_PROG(XELATEX,xelatex)
757
758 dnl ** check for ghc-pkg command
759 FP_PROG_GHC_PKG
760
761 dnl ** check for installed happy binary + version
762 FPTOOLS_HAPPY
763
764 dnl ** check for installed alex binary + version
765 FPTOOLS_ALEX
766
767 dnl --------------------------------------------------
768 dnl ### program checking section ends here ###
769 dnl --------------------------------------------------
770
771 dnl --------------------------------------------------
772 dnl * Platform header file and syscall feature tests
773 dnl ### checking the state of the local header files and syscalls ###
774
775 dnl ** check for full ANSI header (.h) files
776 AC_HEADER_STDC
777
778 dnl ** Enable large file support.  NB. do this before testing the type of
779 dnl    off_t, because it will affect the result of that test.
780 AC_SYS_LARGEFILE
781
782 dnl ** check for specific header (.h) files that we are interested in
783 AC_CHECK_HEADERS([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/param.h sys/mman.h sys/resource.h sys/select.h sys/time.h sys/timeb.h sys/timerfd.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])
784
785 dnl sys/cpuset.h needs sys/param.h to be included first on FreeBSD 9.1; #7708
786 AC_CHECK_HEADERS([sys/cpuset.h], [], [],
787 [[#if HAVE_SYS_PARAM_H
788 # include <sys/param.h>
789 #endif
790 ]])
791
792 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
793 AC_HEADER_TIME
794
795 dnl ** do we have long longs?
796 AC_CHECK_TYPES([long long])
797
798 dnl ** what are the sizes of various types
799 FP_CHECK_SIZEOF_AND_ALIGNMENT(char)
800 FP_CHECK_SIZEOF_AND_ALIGNMENT(double)
801 FP_CHECK_SIZEOF_AND_ALIGNMENT(float)
802 FP_CHECK_SIZEOF_AND_ALIGNMENT(int)
803 FP_CHECK_SIZEOF_AND_ALIGNMENT(long)
804 if test "$ac_cv_type_long_long" = yes; then
805 FP_CHECK_SIZEOF_AND_ALIGNMENT(long long)
806 fi
807 FP_CHECK_SIZEOF_AND_ALIGNMENT(short)
808 FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned char)
809 FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned int)
810 FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long)
811 if test "$ac_cv_type_long_long" = yes; then
812 FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long long)
813 fi
814 FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned short)
815 FP_CHECK_SIZEOF_AND_ALIGNMENT(void *)
816
817 FP_CHECK_SIZEOF_AND_ALIGNMENT(int8_t)
818 FP_CHECK_SIZEOF_AND_ALIGNMENT(uint8_t)
819 FP_CHECK_SIZEOF_AND_ALIGNMENT(int16_t)
820 FP_CHECK_SIZEOF_AND_ALIGNMENT(uint16_t)
821 FP_CHECK_SIZEOF_AND_ALIGNMENT(int32_t)
822 FP_CHECK_SIZEOF_AND_ALIGNMENT(uint32_t)
823 FP_CHECK_SIZEOF_AND_ALIGNMENT(int64_t)
824 FP_CHECK_SIZEOF_AND_ALIGNMENT(uint64_t)
825
826
827 dnl for use in settings.in
828 WordSize=$ac_cv_sizeof_void_p
829 AC_SUBST(WordSize)
830 FP_CHECK_FUNC([WinExec],
831   [@%:@include <windows.h>], [WinExec("",0)])
832
833 FP_CHECK_FUNC([GetModuleFileName],
834   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
835
836 dnl ** check for more functions
837 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
838 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
839
840 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
841 dnl ** _POSIX_C_SOURCE is defined
842 AC_CHECK_DECLS([ctime_r], , ,
843 [#define _POSIX_SOURCE 1
844 #define _POSIX_C_SOURCE 199506L
845 #include <time.h>])
846
847 dnl ** check for mingwex library
848 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
849 AC_SUBST(HaveLibMingwEx)
850
851 if test $HaveLibMingwEx = YES ; then
852   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
853 fi
854
855 dnl ** check for math library
856 dnl    Keep that check as early as possible.
857 dnl    as we need to know whether we need libm
858 dnl    for math functions or not
859 dnl    (see http://ghc.haskell.org/trac/ghc/ticket/3730)
860 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
861 if test $HaveLibM = YES
862 then
863   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
864 fi
865
866 FP_BFD_SUPPORT
867
868 dnl ################################################################
869 dnl Check for libraries
870 dnl ################################################################
871
872 # system libffi
873
874 AC_ARG_WITH([system-libffi],
875 [AC_HELP_STRING([--with-system-libffi],
876   [Use system provided libffi for RTS [default=no]])
877 ])
878
879 AS_IF([test "x$with_system_libffi" = "xyes"],
880   [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
881 )
882
883
884 AC_SUBST(UseSystemLibFFI)
885
886 AC_ARG_WITH([ffi-includes],
887 [AC_HELP_STRING([--with-ffi-includes=ARG],
888   [Find includes for libffi in ARG [default=system default]])
889 ],
890 [
891  if test "x$UseSystemLibFFI" != "xYES"; then
892     AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
893  else
894     FFIIncludeDir="$withval"
895     LIBFFI_CFLAGS="-I$withval"
896  fi
897 ])
898
899 AC_SUBST(FFIIncludeDir)
900
901 AC_ARG_WITH([ffi-libraries],
902 [AC_HELP_STRING([--with-ffi-libraries=ARG],
903   [Find libffi in ARG [default=system default]])
904 ],
905 [
906  if test "x$UseSystemLibFFI" != "xYES"; then
907     AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
908  else
909     FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
910  fi
911 ])
912
913 AC_SUBST(FFILibDir)
914
915 AS_IF([test "$UseSystemLibFFI" = "YES"], [
916  CFLAGS2="$CFLAGS"
917  CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
918  LDFLAGS2="$LDFLAGS"
919  LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
920  if test "$HostOS" = "openbsd";
921  then
922    # OpenBSD's libffi is not directly linked to the libpthread but
923    # still requires pthread functionality. This means that any client
924    # binary which links with libffi also needs to link with
925    # libpthread. If it does not, then linking fails with unresolved
926    # symbols.
927    LDFLAGS="$LDFLAGS -lpthread"
928  fi
929  AC_CHECK_LIB(ffi, ffi_call,
930   [AC_CHECK_HEADERS([ffi.h], [break], [])
931    AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
932   [AC_MSG_ERROR([Cannot find system libffi])])
933  CFLAGS="$CFLAGS2"
934  LDFLAGS="$LDFLAGS2"
935 ])
936
937 dnl ** check whether we need -ldl to get dlopen()
938 AC_CHECK_LIB(dl, dlopen)
939
940 dnl --------------------------------------------------
941 dnl * Miscellaneous feature tests
942 dnl --------------------------------------------------
943
944 dnl ** can we get alloca?
945 AC_FUNC_ALLOCA
946
947 dnl ** working vfork?
948 AC_FUNC_FORK
949
950 dnl ** determine whether or not const works
951 AC_C_CONST
952
953 dnl ** are we big endian?
954 AC_C_BIGENDIAN
955 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
956
957 dnl ** check for leading underscores in symbol names
958 FP_LEADING_UNDERSCORE
959
960 FP_VISIBILITY_HIDDEN
961
962 dnl ** check for librt
963 AC_CHECK_LIB(rt, clock_gettime)
964 AC_CHECK_FUNCS(clock_gettime timer_settime)
965 FP_CHECK_TIMER_CREATE
966
967 dnl ** check for Apple's "interesting" long double compatibility scheme
968 AC_MSG_CHECKING(for printf\$LDBLStub)
969 AC_TRY_LINK_FUNC(printf\$LDBLStub,
970     [
971         AC_MSG_RESULT(yes)
972         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
973             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
974     ],
975     [
976         AC_MSG_RESULT(no)
977         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
978             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
979     ])
980
981 dnl ** pthread_setname_np is a recent addition to glibc, and OS X has
982 dnl    a different single-argument version.
983 AC_CHECK_LIB(pthread, pthread_setname_np)
984 AC_MSG_CHECKING(for pthread_setname_np)
985 AC_TRY_LINK(
986 [
987 #define _GNU_SOURCE
988 #include <pthread.h>
989 ],
990 [pthread_setname_np(pthread_self(), "name");],
991     AC_MSG_RESULT(yes)
992     AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1],
993       [Define to 1 if you have the glibc version of pthread_setname_np]),
994     AC_MSG_RESULT(no)
995 )
996
997 dnl ** check for eventfd which is needed by the I/O manager
998 AC_CHECK_HEADERS([sys/eventfd.h])
999 AC_CHECK_FUNCS([eventfd])
1000
1001 dnl ** Check for __thread support in the compiler
1002 AC_MSG_CHECKING(for __thread support)
1003 AC_COMPILE_IFELSE(
1004   [ AC_LANG_SOURCE([[__thread int tester = 0;]]) ],
1005   [
1006    AC_MSG_RESULT(yes)
1007    AC_DEFINE([CC_SUPPORTS_TLS],[1],[Define to 1 if __thread is supported])
1008   ],
1009   [
1010    AC_MSG_RESULT(no)
1011    AC_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
1012   ])
1013
1014 dnl large address space support (see includes/rts/storage/MBlock.h)
1015 dnl
1016 dnl Darwin has vm_allocate/vm_protect
1017 dnl Linux has mmap(MAP_NORESERVE)/madv(MADV_DONTNEED)
1018 dnl FreeBSD, Solaris and maybe other have MAP_NORESERVE/MADV_FREE
1019 dnl (They also have MADV_DONTNEED, but it means something else!)
1020 dnl
1021 dnl Windows has VirtualAlloc MEM_RESERVE/MEM_COMMIT, however
1022 dnl it counts page-table space as committed memory, and so quickly
1023 dnl runs out of paging file when we have multiple processes reserving
1024 dnl 1TB of address space, we get the following error:
1025 dnl    VirtualAlloc MEM_RESERVE 1099512676352 bytes failed: The paging file is too small for this operation to complete.
1026 dnl
1027
1028 AC_ARG_ENABLE(large-address-space,
1029     [AC_HELP_STRING([--enable-large-address-space],
1030         [Use a single large address space on 64 bit systems (enabled by default on 64 bit platforms)])],
1031     EnableLargeAddressSpace=$enableval,
1032     EnableLargeAddressSpace=yes
1033 )
1034
1035 use_large_address_space=no
1036 if test "$ac_cv_sizeof_void_p" -eq 8 ; then
1037     if test "x$EnableLargeAddressSpace" = "xyes" ; then
1038         if test "$ghc_host_os" = "darwin" ; then
1039             use_large_address_space=yes
1040         elif test "$ghc_host_os" = "openbsd" ; then
1041             # as of OpenBSD 5.8 (2015), OpenBSD does not support mmap with MAP_NORESERVE.
1042             # The flag MAP_NORESERVE is supported for source compatibility reasons,
1043             # but is completely ignored by OS mmap
1044             use_large_address_space=no
1045         else
1046             AC_CHECK_DECLS([MAP_NORESERVE, MADV_FREE, MADV_DONTNEED],[],[],
1047                 [
1048                 #include <unistd.h>
1049                 #include <sys/types.h>
1050                 #include <sys/mman.h>
1051                 #include <fcntl.h>
1052             ])
1053             if test "$ac_cv_have_decl_MAP_NORESERVE" = "yes" &&
1054                 test "$ac_cv_have_decl_MADV_FREE" = "yes" ||
1055                 test "$ac_cv_have_decl_MADV_DONTNEED" = "yes" ; then
1056                     use_large_address_space=yes
1057             fi
1058         fi
1059     fi
1060 fi
1061 if test "$use_large_address_space" = "yes" ; then
1062    AC_DEFINE([USE_LARGE_ADDRESS_SPACE], [1], [Enable single heap address space support])
1063 fi
1064
1065 dnl ** Have libdw?
1066 dnl --------------------------------------------------------------
1067 AC_ARG_ENABLE(libdw,
1068     [AC_HELP_STRING([--enable-dwarf-unwind],
1069         [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])],
1070     [AC_CHECK_LIB(dw, dwfl_attach_state, [HaveLibdw=YES], [HaveLibdw=NO])],
1071     [HaveLibdw=NO]
1072 )
1073 AC_SUBST(HaveLibdw)
1074
1075 if test -n "$SPHINXBUILD"; then
1076     BUILD_MAN=YES
1077     BUILD_SPHINX_HTML=YES
1078     if test -n "$XELATEX"; then
1079         BUILD_SPHINX_PDF=YES
1080     else
1081         BUILD_SPHINX_PDF=NO
1082     fi
1083 else
1084     BUILD_MAN=NO
1085     BUILD_SPHINX_HTML=NO
1086     BUILD_SPHINX_PDF=NO
1087 fi
1088 AC_SUBST(BUILD_MAN)
1089 AC_SUBST(BUILD_SPHINX_HTML)
1090 AC_SUBST(BUILD_SPHINX_PDF)
1091
1092 LIBRARY_VERSION(base)
1093 LIBRARY_VERSION(Cabal, Cabal/Cabal)
1094 LIBRARY_VERSION(ghc-prim)
1095 LIBRARY_ghc_VERSION="$ProjectVersion"
1096 AC_SUBST(LIBRARY_ghc_VERSION)
1097
1098 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
1099    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
1100 fi
1101
1102 # Create the configuration for the Shake-based build system if it is present
1103 if test -e shake-build/cfg/system.config.in; then
1104     AC_CONFIG_FILES([shake-build/cfg/system.config])
1105 fi
1106
1107 # We got caught by
1108 #     http://savannah.gnu.org/bugs/index.php?1516
1109 #     $(eval ...) inside conditionals causes errors
1110 # with make 3.80, so warn the user if it looks like they're about to
1111 # try to use it.
1112 # We would use "grep -q" here, but Solaris's grep doesn't support it.
1113 print_make_warning=""
1114 checkMake380() {
1115     make_ver=`$1 --version 2>&1 | head -1`
1116     if echo "$make_ver" | grep 'GNU Make 3\.80' > /dev/null
1117     then
1118         print_make_warning="true"
1119     fi
1120     if echo "$make_ver" | grep 'GNU Make' > /dev/null
1121     then
1122         MakeCmd=$1
1123         AC_SUBST(MakeCmd)
1124     fi
1125 }
1126
1127 checkMake380 make
1128 checkMake380 gmake
1129
1130 AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal libraries/ghc-boot/ghc-boot.cabal libraries/ghci/ghci.cabal settings docs/users_guide/ghc_config.py docs/index.html libraries/prologue.txt distrib/configure.ac])
1131 AC_OUTPUT
1132
1133 if test "$print_make_warning" = "true"; then
1134    echo
1135    echo "WARNING: It looks like \"$MakeCmd\" is GNU make 3.80."
1136    echo "This version cannot be used to build GHC."
1137    echo "Please use GNU make >= 3.81."
1138 fi
1139
1140 echo ["
1141 ----------------------------------------------------------------------
1142 Configure completed successfully.
1143
1144    Building GHC version  : $ProjectVersion
1145           Git commit id  : $ProjectGitCommitId
1146
1147    Build platform        : $BuildPlatform
1148    Host platform         : $HostPlatform
1149    Target platform       : $TargetPlatform
1150 "]
1151
1152 echo ["\
1153    Bootstrapping using   : $WithGhc
1154       which is version   : $GhcVersion
1155 "]
1156
1157 if test "x$CC_LLVM_BACKEND" = "x1"; then
1158     if test "x$CC_CLANG_BACKEND" = "x1"; then
1159         CompilerName="clang        "
1160     else
1161         CompilerName="llvm-gcc     "
1162     fi
1163 else
1164     CompilerName="gcc          "
1165 fi
1166
1167 echo ["\
1168    Using (for bootstrapping) : $CC_STAGE0
1169    Using $CompilerName       : $CC
1170       which is version       : $GccVersion
1171    Building a cross compiler : $CrossCompiling
1172    hs-cpp       : $HaskellCPPCmd
1173    hs-cpp-flags : $HaskellCPPArgs
1174    ld           : $LdCmd
1175    nm           : $NmCmd
1176    objdump      : $ObjdumpCmd
1177    Happy        : $HappyCmd ($HappyVersion)
1178    Alex         : $AlexCmd ($AlexVersion)
1179    Perl         : $PerlCmd
1180    sphinx-build : $SPHINXBUILD
1181    xelatex      : $XELATEX
1182
1183    Using LLVM tools
1184       llc   : $LlcCmd
1185       opt   : $OptCmd"]
1186
1187 if test "$HSCOLOUR" = ""; then
1188 echo ["
1189    HsColour was not found; documentation will not contain source links
1190 "]
1191 else
1192 echo ["\
1193    HsColour : $HSCOLOUR
1194 "]
1195 fi
1196
1197 echo ["\
1198    Tools to build Sphinx HTML documentation available: $BUILD_SPHINX_HTML
1199    Tools to build Sphinx PDF documentation available: $BUILD_SPHINX_PDF"]
1200
1201 echo ["----------------------------------------------------------------------
1202 "]
1203
1204 echo "\
1205 For a standard build of GHC (fully optimised with profiling), type (g)make.
1206
1207 To make changes to the default build configuration, copy the file
1208 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1209
1210 For more information on how to configure your GHC build, see
1211    http://ghc.haskell.org/trac/ghc/wiki/Building
1212 "