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