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