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