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