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