Rework CC/CC_STAGE0 handling in `configure.ac`
[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 AC_CHECK_SIZEOF(char,               1)
800 AC_CHECK_SIZEOF(double,             8)
801 AC_CHECK_SIZEOF(float,              4)
802 AC_CHECK_SIZEOF(int,                4)
803 AC_CHECK_SIZEOF(long,               4)
804 if test "$ac_cv_type_long_long" = yes; then
805 AC_CHECK_SIZEOF(long long,          8)
806 fi
807 AC_CHECK_SIZEOF(short,              2)
808 AC_CHECK_SIZEOF(unsigned char,      1)
809 AC_CHECK_SIZEOF(unsigned int,       4)
810 AC_CHECK_SIZEOF(unsigned long,      4)
811 if test "$ac_cv_type_long_long" = yes; then
812 AC_CHECK_SIZEOF(unsigned long long, 8)
813 fi
814 AC_CHECK_SIZEOF(unsigned short,     2)
815 AC_CHECK_SIZEOF(void *,             4)
816
817 dnl for use in settings.in
818 WordSize=$ac_cv_sizeof_void_p
819 AC_SUBST(WordSize)
820
821 dnl ** what are alignment constraints on various types
822 FP_CHECK_ALIGNMENT(char)
823 FP_CHECK_ALIGNMENT(double)
824 FP_CHECK_ALIGNMENT(float)
825 FP_CHECK_ALIGNMENT(int)
826 FP_CHECK_ALIGNMENT(long)
827 if test "$ac_cv_type_long_long" = yes; then
828 FP_CHECK_ALIGNMENT(long long)
829 fi
830 FP_CHECK_ALIGNMENT(short)
831 FP_CHECK_ALIGNMENT(unsigned char)
832 FP_CHECK_ALIGNMENT(unsigned int)
833 FP_CHECK_ALIGNMENT(unsigned long)
834 if test "$ac_cv_type_long_long" = yes; then
835 FP_CHECK_ALIGNMENT(unsigned long long)
836 fi
837 FP_CHECK_ALIGNMENT(unsigned short)
838 FP_CHECK_ALIGNMENT(void *)
839
840 FP_CHECK_FUNC([WinExec],
841   [@%:@include <windows.h>], [WinExec("",0)])
842
843 FP_CHECK_FUNC([GetModuleFileName],
844   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
845
846 dnl ** check for more functions
847 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
848 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
849
850 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
851 dnl ** _POSIX_C_SOURCE is defined
852 AC_CHECK_DECLS([ctime_r], , ,
853 [#define _POSIX_SOURCE 1
854 #define _POSIX_C_SOURCE 199506L
855 #include <time.h>])
856
857 dnl ** check for mingwex library
858 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
859 AC_SUBST(HaveLibMingwEx)
860
861 if test $HaveLibMingwEx = YES ; then
862   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
863 fi
864
865 dnl ** check for math library
866 dnl    Keep that check as early as possible.
867 dnl    as we need to know whether we need libm
868 dnl    for math functions or not
869 dnl    (see http://ghc.haskell.org/trac/ghc/ticket/3730)
870 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
871 if test $HaveLibM = YES
872 then
873   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
874 fi
875
876 FP_BFD_SUPPORT
877
878 dnl ################################################################
879 dnl Check for libraries
880 dnl ################################################################
881
882 # system libffi
883
884 AC_ARG_WITH([system-libffi],
885 [AC_HELP_STRING([--with-system-libffi],
886   [Use system provided libffi for RTS [default=no]])
887 ])
888
889 AS_IF([test "x$with_system_libffi" = "xyes"],
890   [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
891 )
892
893
894 AC_SUBST(UseSystemLibFFI)
895
896 AC_ARG_WITH([ffi-includes],
897 [AC_HELP_STRING([--with-ffi-includes=ARG],
898   [Find includes for libffi in ARG [default=system default]])
899 ],
900 [
901  if test "x$UseSystemLibFFI" != "xYES"; then
902     AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
903  else
904     FFIIncludeDir="$withval"
905     LIBFFI_CFLAGS="-I$withval"
906  fi
907 ])
908
909 AC_SUBST(FFIIncludeDir)
910
911 AC_ARG_WITH([ffi-libraries],
912 [AC_HELP_STRING([--with-ffi-libraries=ARG],
913   [Find libffi in ARG [default=system default]])
914 ],
915 [
916  if test "x$UseSystemLibFFI" != "xYES"; then
917     AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
918  else
919     FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
920  fi
921 ])
922
923 AC_SUBST(FFILibDir)
924
925 AS_IF([test "$UseSystemLibFFI" = "YES"], [
926  CFLAGS2="$CFLAGS"
927  CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
928  LDFLAGS2="$LDFLAGS"
929  LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
930  if test "$HostOS" = "openbsd";
931  then
932    # OpenBSD's libffi is not directly linked to the libpthread but
933    # still requires pthread functionality. This means that any client
934    # binary which links with libffi also needs to link with
935    # libpthread. If it does not, then linking fails with unresolved
936    # symbols.
937    LDFLAGS="$LDFLAGS -lpthread"
938  fi
939  AC_CHECK_LIB(ffi, ffi_call,
940   [AC_CHECK_HEADERS([ffi.h], [break], [])
941    AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
942   [AC_MSG_ERROR([Cannot find system libffi])])
943  CFLAGS="$CFLAGS2"
944  LDFLAGS="$LDFLAGS2"
945 ])
946
947 dnl ** check whether we need -ldl to get dlopen()
948 AC_CHECK_LIB(dl, dlopen)
949
950 dnl --------------------------------------------------
951 dnl * Miscellaneous feature tests
952 dnl --------------------------------------------------
953
954 dnl ** can we get alloca?
955 AC_FUNC_ALLOCA
956
957 dnl ** working vfork?
958 AC_FUNC_FORK
959
960 dnl ** determine whether or not const works
961 AC_C_CONST
962
963 dnl ** are we big endian?
964 AC_C_BIGENDIAN
965 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
966
967 dnl ** check for leading underscores in symbol names
968 FP_LEADING_UNDERSCORE
969
970 FP_VISIBILITY_HIDDEN
971
972 dnl ** check for librt
973 AC_CHECK_LIB(rt, clock_gettime)
974 AC_CHECK_FUNCS(clock_gettime timer_settime)
975 FP_CHECK_TIMER_CREATE
976
977 dnl ** check for Apple's "interesting" long double compatibility scheme
978 AC_MSG_CHECKING(for printf\$LDBLStub)
979 AC_TRY_LINK_FUNC(printf\$LDBLStub,
980     [
981         AC_MSG_RESULT(yes)
982         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
983             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
984     ],
985     [
986         AC_MSG_RESULT(no)
987         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
988             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
989     ])
990
991 dnl ** pthread_setname_np is a recent addition to glibc, and OS X has
992 dnl    a different single-argument version.
993 AC_CHECK_LIB(pthread, pthread_setname_np)
994 AC_MSG_CHECKING(for pthread_setname_np)
995 AC_TRY_LINK(
996 [
997 #define _GNU_SOURCE
998 #include <pthread.h>
999 ],
1000 [pthread_setname_np(pthread_self(), "name");],
1001     AC_MSG_RESULT(yes)
1002     AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1],
1003       [Define to 1 if you have the glibc version of pthread_setname_np]),
1004     AC_MSG_RESULT(no)
1005 )
1006
1007 dnl ** check for eventfd which is needed by the I/O manager
1008 AC_CHECK_HEADERS([sys/eventfd.h])
1009 AC_CHECK_FUNCS([eventfd])
1010
1011 dnl ** Check for __thread support in the compiler
1012 AC_MSG_CHECKING(for __thread support)
1013 AC_COMPILE_IFELSE(
1014   [ AC_LANG_SOURCE([[__thread int tester = 0;]]) ],
1015   [
1016    AC_MSG_RESULT(yes)
1017    AC_DEFINE([CC_SUPPORTS_TLS],[1],[Define to 1 if __thread is supported])
1018   ],
1019   [
1020    AC_MSG_RESULT(no)
1021    AC_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
1022   ])
1023
1024 dnl large address space support (see includes/rts/storage/MBlock.h)
1025 dnl
1026 dnl Darwin has vm_allocate/vm_protect
1027 dnl Linux has mmap(MAP_NORESERVE)/madv(MADV_DONTNEED)
1028 dnl FreeBSD, Solaris and maybe other have MAP_NORESERVE/MADV_FREE
1029 dnl (They also have MADV_DONTNEED, but it means something else!)
1030 dnl
1031 dnl Windows has VirtualAlloc MEM_RESERVE/MEM_COMMIT, however
1032 dnl it counts page-table space as committed memory, and so quickly
1033 dnl runs out of paging file when we have multiple processes reserving
1034 dnl 1TB of address space, we get the following error:
1035 dnl    VirtualAlloc MEM_RESERVE 1099512676352 bytes failed: The paging file is too small for this operation to complete.
1036 dnl
1037
1038 AC_ARG_ENABLE(large-address-space,
1039     [AC_HELP_STRING([--enable-large-address-space],
1040         [Use a single large address space on 64 bit systems (enabled by default on 64 bit platforms)])],
1041     EnableLargeAddressSpace=$enableval,
1042     EnableLargeAddressSpace=yes
1043 )
1044
1045 use_large_address_space=no
1046 if test "$ac_cv_sizeof_void_p" -eq 8 ; then
1047     if test "x$EnableLargeAddressSpace" = "xyes" ; then
1048         if test "$ghc_host_os" = "darwin" ; then
1049             use_large_address_space=yes
1050         elif test "$ghc_host_os" = "openbsd" ; then
1051             # as of OpenBSD 5.8 (2015), OpenBSD does not support mmap with MAP_NORESERVE.
1052             # The flag MAP_NORESERVE is supported for source compatibility reasons,
1053             # but is completely ignored by OS mmap
1054             use_large_address_space=no
1055         else
1056             AC_CHECK_DECLS([MAP_NORESERVE, MADV_FREE, MADV_DONTNEED],[],[],
1057                 [
1058                 #include <unistd.h>
1059                 #include <sys/types.h>
1060                 #include <sys/mman.h>
1061                 #include <fcntl.h>
1062             ])
1063             if test "$ac_cv_have_decl_MAP_NORESERVE" = "yes" &&
1064                 test "$ac_cv_have_decl_MADV_FREE" = "yes" ||
1065                 test "$ac_cv_have_decl_MADV_DONTNEED" = "yes" ; then
1066                     use_large_address_space=yes
1067             fi
1068         fi
1069     fi
1070 fi
1071 if test "$use_large_address_space" = "yes" ; then
1072    AC_DEFINE([USE_LARGE_ADDRESS_SPACE], [1], [Enable single heap address space support])
1073 fi
1074
1075 dnl ** Have libdw?
1076 dnl --------------------------------------------------------------
1077 AC_ARG_ENABLE(libdw,
1078     [AC_HELP_STRING([--enable-dwarf-unwind],
1079         [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])],
1080     [AC_CHECK_LIB(dw, dwfl_attach_state, [HaveLibdw=YES], [HaveLibdw=NO])],
1081     [HaveLibdw=NO]
1082 )
1083 AC_SUBST(HaveLibdw)
1084
1085 if test -n "$SPHINXBUILD"; then
1086     BUILD_MAN=YES
1087     BUILD_SPHINX_HTML=YES
1088     if test -n "$XELATEX"; then
1089         BUILD_SPHINX_PDF=YES
1090     else
1091         BUILD_SPHINX_PDF=NO
1092     fi
1093 else
1094     BUILD_MAN=NO
1095     BUILD_SPHINX_HTML=NO
1096     BUILD_SPHINX_PDF=NO
1097 fi
1098 AC_SUBST(BUILD_MAN)
1099 AC_SUBST(BUILD_SPHINX_HTML)
1100 AC_SUBST(BUILD_SPHINX_PDF)
1101
1102 LIBRARY_VERSION(base)
1103 LIBRARY_VERSION(Cabal, Cabal/Cabal)
1104 LIBRARY_VERSION(ghc-prim)
1105 LIBRARY_ghc_VERSION="$ProjectVersion"
1106 AC_SUBST(LIBRARY_ghc_VERSION)
1107
1108 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
1109    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
1110 fi
1111
1112 # Create the configuration for the Shake-based build system if it is present
1113 if test -e shake-build/cfg/system.config.in; then
1114     AC_CONFIG_FILES([shake-build/cfg/system.config])
1115 fi
1116
1117 # We got caught by
1118 #     http://savannah.gnu.org/bugs/index.php?1516
1119 #     $(eval ...) inside conditionals causes errors
1120 # with make 3.80, so warn the user if it looks like they're about to
1121 # try to use it.
1122 # We would use "grep -q" here, but Solaris's grep doesn't support it.
1123 print_make_warning=""
1124 checkMake380() {
1125     make_ver=`$1 --version 2>&1 | head -1`
1126     if echo "$make_ver" | grep 'GNU Make 3\.80' > /dev/null
1127     then
1128         print_make_warning="true"
1129     fi
1130     if echo "$make_ver" | grep 'GNU Make' > /dev/null
1131     then
1132         MakeCmd=$1
1133         AC_SUBST(MakeCmd)
1134     fi
1135 }
1136
1137 checkMake380 make
1138 checkMake380 gmake
1139
1140 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])
1141 AC_OUTPUT
1142
1143 if test "$print_make_warning" = "true"; then
1144    echo
1145    echo "WARNING: It looks like \"$MakeCmd\" is GNU make 3.80."
1146    echo "This version cannot be used to build GHC."
1147    echo "Please use GNU make >= 3.81."
1148 fi
1149
1150 echo ["
1151 ----------------------------------------------------------------------
1152 Configure completed successfully.
1153
1154    Building GHC version  : $ProjectVersion
1155           Git commit id  : $ProjectGitCommitId
1156
1157    Build platform        : $BuildPlatform
1158    Host platform         : $HostPlatform
1159    Target platform       : $TargetPlatform
1160 "]
1161
1162 echo ["\
1163    Bootstrapping using   : $WithGhc
1164       which is version   : $GhcVersion
1165 "]
1166
1167 if test "x$CC_LLVM_BACKEND" = "x1"; then
1168     if test "x$CC_CLANG_BACKEND" = "x1"; then
1169         CompilerName="clang        "
1170     else
1171         CompilerName="llvm-gcc     "
1172     fi
1173 else
1174     CompilerName="gcc          "
1175 fi
1176
1177 echo ["\
1178    Using (for bootstrapping) : $CC_STAGE0
1179    Using $CompilerName       : $CC
1180       which is version       : $GccVersion
1181    Building a cross compiler : $CrossCompiling
1182    hs-cpp       : $HaskellCPPCmd
1183    hs-cpp-flags : $HaskellCPPArgs
1184    ld           : $LdCmd
1185    nm           : $NmCmd
1186    objdump      : $ObjdumpCmd
1187    Happy        : $HappyCmd ($HappyVersion)
1188    Alex         : $AlexCmd ($AlexVersion)
1189    Perl         : $PerlCmd
1190    sphinx-build : $SPHINXBUILD
1191    xelatex      : $XELATEX
1192
1193    Using LLVM tools
1194       llc   : $LlcCmd
1195       opt   : $OptCmd"]
1196
1197 if test "$HSCOLOUR" = ""; then
1198 echo ["
1199    HsColour was not found; documentation will not contain source links
1200 "]
1201 else
1202 echo ["\
1203    HsColour : $HSCOLOUR
1204 "]
1205 fi
1206
1207 echo ["\
1208    Tools to build Sphinx HTML documentation available: $BUILD_SPHINX_HTML
1209    Tools to build Sphinx PDF documentation available: $BUILD_SPHINX_PDF"]
1210
1211 echo ["----------------------------------------------------------------------
1212 "]
1213
1214 echo "\
1215 For a standard build of GHC (fully optimised with profiling), type (g)make.
1216
1217 To make changes to the default build configuration, copy the file
1218 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1219
1220 For more information on how to configure your GHC build, see
1221    http://ghc.haskell.org/trac/ghc/wiki/Building
1222 "