e7d467f470b358ebb7a7371f743f288024ba062a
[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], [7.11], [glasgow-haskell-bugs@haskell.org], [ghc])
17
18 # Set this to YES for a released version, otherwise NO
19 : ${RELEASE=NO}
20
21 # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line
22 # above.  If this is not a released version, then we will append the
23 # date to the version number (e.g. 7.4.20111220).  The date is
24 # constructed by finding the date of the most recent patch in the
25 # git repository.  If this is a source distribution (not a git
26 # checkout), then we ship a file 'VERSION' containing the full version
27 # when the source distribution was created.
28
29 if test ! -f mk/config.h.in; then
30    echo "mk/config.h.in doesn't exist: perhaps you haven't run 'perl boot'?"
31    exit 1
32 fi
33
34 AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
35
36 dnl ----------------------------------------------------------
37 dnl ** Find unixy sort and find commands,
38 dnl ** which are needed by FP_SETUP_PROJECT_VERSION
39
40 dnl ** Find find command (for Win32's benefit)
41 FP_PROG_FIND
42 FP_PROG_SORT
43
44 dnl ----------------------------------------------------------
45 FP_SETUP_PROJECT_VERSION
46
47 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
48 AC_SUBST([release], [1])
49
50 # First off, a distrib sanity check..
51 AC_CONFIG_SRCDIR([mk/config.mk.in])
52
53 dnl * We require autoconf version 2.60
54 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
55 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
56 dnl Using autoconf 2.59 started to give nonsense like this
57 dnl  #define SIZEOF_CHAR 0
58 dnl recently.
59 AC_PREREQ([2.60])
60
61 # -------------------------------------------------------------------------
62 # Prepare to generate the following header files
63 #
64 #
65 AC_CONFIG_HEADER(mk/config.h)
66
67 # No, semi-sadly, we don't do `--srcdir'...
68 if test x"$srcdir" != 'x.' ; then
69     echo "This configuration does not support the \`--srcdir' option.."
70     exit 1
71 fi
72
73 dnl --------------------------------------------------------------
74 dnl * Project specific configuration options
75 dnl --------------------------------------------------------------
76 dnl What follows is a bunch of options that can either be configured
77 dnl through command line options to the configure script or by
78 dnl supplying defns in the build tree's mk/build.mk. Having the option to
79 dnl use either is considered a Feature.
80
81 dnl ** What command to use to compile compiler sources ?
82 dnl --------------------------------------------------------------
83
84 AC_ARG_WITH([ghc],
85 [AC_HELP_STRING([--with-ghc=ARG],
86   [Use ARG as the path to GHC  [default=autodetect]])],
87   [WithGhc="$withval"],
88   [if test "$GHC" = ""; then
89     AC_PATH_PROG([GHC], [ghc])
90   fi
91   WithGhc="$GHC"])
92
93 dnl ** Tell the make system which OS we are using
94 dnl $OSTYPE is set by the operating system to "msys" or "cygwin" or something
95 AC_SUBST(OSTYPE)
96
97 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
98 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
99                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
100         EnableBootstrapWithDevelSnaphost=YES,
101         EnableBootstrapWithDevelSnaphost=NO
102 )
103
104 if test "$WithGhc" != ""; then
105   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
106
107   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
108      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
109   fi
110
111   AC_SUBST(GhcVersion)dnl
112   AC_SUBST(GhcMajVersion)dnl
113   AC_SUBST(GhcMinVersion)dnl
114   AC_SUBST(GhcPatchLevel)dnl
115   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
116   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
117
118   BOOTSTRAPPING_GHC_INFO_FIELD([OS_STAGE0],[target os])
119   BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
120   dnl ToDo, once "ld command" is reliably available.
121   dnl Then, we can remove the LD_STAGE0 hack in mk/build-package-date.mk
122   dnl BOOTSTRAPPING_GHC_INFO_FIELD([LD_STAGE0],[ld command])
123   if test "x$OS_STAGE0" != "xOSDarwin"; then
124     BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command])
125     BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags])
126     BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file])
127   else
128     AR_STAGE0='$(AR)'
129     AR_OPTS_STAGE0='$(AR_OPTS)'
130     ArSupportsAtFile_STAGE0='$(ArSupportsAtFile)'
131   fi
132 fi
133
134 dnl ** Must have GHC to build GHC
135 if test "$WithGhc" = ""
136 then
137     AC_MSG_ERROR([GHC is required.])
138 fi
139 FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.6],
140     [AC_MSG_ERROR([GHC version 7.6 or later is required to compile GHC.])])
141
142 if test `expr $GhcMinVersion % 2` = "1"
143 then
144     if test "$EnableBootstrapWithDevelSnaphost" = "NO"
145     then
146         AC_MSG_ERROR([
147      $WithGhc is a development snapshot of GHC, version $GhcVersion.
148      Bootstrapping using this version of GHC is not supported, and may not
149      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
150      or --with-ghc to specify a different GHC to use.])
151     fi
152 fi
153
154 GHC_PACKAGE_DB_FLAG=package-db
155 AC_SUBST(GHC_PACKAGE_DB_FLAG)
156
157 # GHC 7.7+ needs -fcmm-sink when compiling Parser.hs. See #8182
158 FP_COMPARE_VERSIONS([$GhcVersion],[-gt],[7.7],
159                     CMM_SINK_BOOTSTRAP_IS_NEEDED=YES,
160                     CMM_SINK_BOOTSTRAP_IS_NEEDED=NO)
161 AC_SUBST(CMM_SINK_BOOTSTRAP_IS_NEEDED)
162
163 FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.9],
164                     SUPPORTS_PACKAGE_KEY=NO,
165                     SUPPORTS_PACKAGE_KEY=YES)
166 AC_SUBST(SUPPORTS_PACKAGE_KEY)
167
168 # GHC is passed to Cabal, so we need a native path
169 if test "${WithGhc}" != ""
170 then
171     ghc_host_os=`"${WithGhc}" +RTS --info | grep 'Host OS' | sed -e 's/.*, "//' -e 's/")//'`
172
173     if test "$ghc_host_os" = "mingw32"
174     then
175         if test "${OSTYPE}" = "msys"
176         then
177             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
178         else
179             # Canonicalise to <drive>:/path/to/ghc
180             WithGhc=`cygpath -m "${WithGhc}"`
181         fi
182         echo "GHC path canonicalised to: ${WithGhc}"
183     fi
184 fi
185 AC_SUBST([WithGhc])
186
187 dnl ** Without optimization some INLINE trickery fails for GHCi
188 SRC_CC_OPTS="-O"
189
190 dnl--------------------------------------------------------------------
191 dnl * Choose host(/target/build) platform
192 dnl--------------------------------------------------------------------
193 dnl If we aren't explicitly told what values to use with configure flags,
194 dnl we ask the bootstrapping compiler what platform it is for
195
196 if test "${WithGhc}" != ""
197 then
198         bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
199         bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
200         if test "$bootstrap_host" != "$bootstrap_target"
201         then
202                 echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work"
203         fi
204 fi
205
206 # We have to run these unconditionally, but we may discard their
207 # results in the following code
208 AC_CANONICAL_BUILD
209 AC_CANONICAL_HOST
210 AC_CANONICAL_TARGET
211
212 FPTOOLS_SET_PLATFORM_VARS
213
214 # Verify that the installed (bootstrap) GHC is capable of generating
215 # code for the requested build platform.
216 if test "$BuildPlatform" != "$bootstrap_target"
217 then
218     echo "This GHC (${WithGhc}) does not generate code for the build platform"
219     echo "   GHC target platform    : $bootstrap_target"
220     echo "   Desired build platform : $BuildPlatform"
221     exit 1
222 fi
223
224 # Testing if we shall enable shared libs support on Solaris.
225 # Anything older than SunOS 5.11 aka Solaris 11 (Express) is broken.
226
227 SOLARIS_BROKEN_SHLD=NO
228
229 case $host in
230      i386-*-solaris2)
231      # here we go with the test
232      MINOR=`uname -r|cut -d '.' -f 2-`
233      if test "$MINOR" -lt "11"; then
234          SOLARIS_BROKEN_SHLD=YES
235      fi
236      ;;
237 esac
238
239 AC_SUBST(SOLARIS_BROKEN_SHLD)
240
241 dnl ** Do an unregisterised build?
242 dnl --------------------------------------------------------------
243 case "$HostArch" in
244     i386|x86_64|powerpc|arm)
245         UnregisterisedDefault=NO
246         ;;
247     *)
248         UnregisterisedDefault=YES
249         ;;
250 esac
251 AC_ARG_ENABLE(unregisterised,
252 [AC_HELP_STRING([--enable-unregisterised],
253 [Build an unregisterised compiler (enabled by default on platforms without registerised support) [default="$UnregisterisedDefault"]])],
254 [ if test x"$enableval" = x"yes"; then
255         Unregisterised=YES
256   else
257         Unregisterised=NO
258   fi
259 ],
260 [Unregisterised="$UnregisterisedDefault"]
261 )
262 AC_SUBST(Unregisterised)
263
264 AC_ARG_WITH(hc,
265 [AC_HELP_STRING([--with-hc=ARG],
266         [Use ARG as the path to the compiler for compiling ordinary
267          Haskell code  (default= value of --with-ghc)])],
268 [WithHc="$withval"],
269 [WithHc=$WithGhc]
270 )
271 AC_SUBST(WithHc)
272
273 # This uses GHC, so put it after the "GHC is required" check above:
274 FP_INTREE_GHC_PWD
275 FP_FIND_ROOT
276
277 if test "$HostOS" = "mingw32"
278 then
279     test -d inplace || mkdir inplace
280
281     if test "$HostArch" = "i386"
282     then
283         # NB. If you update the tarballs to a new version of gcc, don't
284         # forget to tweak the paths in driver/gcc/gcc.c.
285         if ! test -d inplace/mingw ||
286              test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma  ||
287              test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma  ||
288              test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma   ||
289              test inplace/mingw -ot ghc-tarballs/mingw/libgcc*.tar.gz      ||
290              test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz      ||
291              test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz      ||
292              test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz     ||
293              test inplace/mingw -ot ghc-tarballs/mingw/libstdc*.tar.lzma   ||
294              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz ||
295              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz ||
296              test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma
297         then
298             AC_MSG_NOTICE([Making in-tree mingw tree])
299             rm -rf inplace/mingw
300             mkdir inplace/mingw
301             (
302                 cd inplace/mingw &&
303                 tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma  &&
304                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma  &&
305                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma   &&
306                 tar --lzma -xf ../../ghc-tarballs/mingw/libgcc*.tar.lzma    &&
307                 tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma    &&
308                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma    &&
309                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma   &&
310                 tar --lzma -xf ../../ghc-tarballs/mingw/libstdc*.tar.lzma   &&
311                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz &&
312                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz &&
313                 tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma    &&
314                 mv bin/gcc.exe bin/realgcc.exe
315             )
316             PATH=`pwd`/inplace/mingw/bin:$PATH 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
317             AC_MSG_NOTICE([In-tree mingw tree created])
318         fi
319     else
320         # NB. If you update the tarballs to a new version of gcc, don't
321         # forget to tweak the paths in driver/gcc/gcc.c.
322         if ! test -d inplace/mingw ||
323              test inplace/mingw -ot ghc-tarballs/mingw64/*.tar.bz2
324         then
325             AC_MSG_NOTICE([Making in-tree mingw tree])
326             rm -rf inplace/mingw
327             mkdir inplace/mingw
328             (
329                 cd inplace/mingw &&
330                 tar -jxf ../../ghc-tarballs/mingw64/*.tar.bz2
331             )
332             AC_MSG_NOTICE([In-tree mingw tree created])
333         fi
334     fi
335
336     mingwbin="$hardtop/inplace/mingw/bin/"
337     CC="${mingwbin}gcc.exe"
338     LD="${mingwbin}ld.exe"
339     NM="${mingwbin}nm.exe"
340     RANLIB="${mingwbin}ranlib.exe"
341     OBJDUMP="${mingwbin}objdump.exe"
342     fp_prog_ar="${mingwbin}ar.exe"
343
344     if ! test -d inplace/perl ||
345          test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
346     then
347         AC_MSG_NOTICE([Making in-tree perl tree])
348         rm -rf inplace/perl
349         mkdir inplace/perl
350         (
351             cd inplace/perl &&
352             tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
353         )
354         AC_MSG_NOTICE([In-tree perl tree created])
355     fi
356 fi
357
358 FP_ICONV
359 FP_GMP
360 FP_CURSES
361
362 XCODE_VERSION()
363
364 SplitObjsBroken=NO
365 if test "$TargetOS_CPP" = "darwin"
366 then
367     # Split objects is broken (#4013) with XCode < 3.2
368     if test "$XCodeVersion1" -lt 3
369     then
370         SplitObjsBroken=YES
371     else
372         if test "$XCodeVersion1" -eq 3
373         then
374             if test "$XCodeVersion2" -lt 2
375             then
376                 SplitObjsBroken=YES
377             fi
378         fi
379     fi
380 fi
381 AC_SUBST([SplitObjsBroken])
382
383 dnl ** Building a cross compiler?
384 dnl --------------------------------------------------------------
385 CrossCompiling=NO
386 # If 'host' and 'target' differ, then this means we are building a cross-compiler.
387 if test "$target" != "$host" ; then
388     CrossCompiling=YES
389     cross_compiling=yes   # This tells configure that it can accept just 'target',
390                           # otherwise you get
391                           #   configure: error: cannot run C compiled programs.
392                           #   If you meant to cross compile, use `--host'.
393 fi
394 if test "$build" != "$host" ; then
395    AC_MSG_ERROR([
396 You've selected:
397
398   BUILD:  $build   (the architecture we're building on)
399   HOST:   $host    (the architecture the compiler we're building will execute on)
400   TARGET: $target  (the architecture the compiler we're building will produce code for)
401
402 BUILD must equal HOST; that is, we do not support building GHC itself
403 with a cross-compiler.  To cross-compile GHC itself, set TARGET: stage
404 1 will be a cross-compiler, and stage 2 will be the cross-compiled
405 GHC.
406 ])
407 fi
408 if test "$CrossCompiling" = "YES"
409 then
410   CrossCompilePrefix="${target}-"
411 else
412   CrossCompilePrefix=""
413 fi
414 TargetPlatformFull="${target}"
415 AC_SUBST(CrossCompiling)
416 AC_SUBST(CrossCompilePrefix)
417 AC_SUBST(TargetPlatformFull)
418
419 dnl ** Which gcc to use?
420 dnl --------------------------------------------------------------
421 FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
422 CC="$WhatGccIsCalled"
423 export CC
424
425 # If --with-gcc was used, and we're not cross-compiling, then it also
426 # applies to the stage0 compiler.
427 MAYBE_OVERRIDE_STAGE0([gcc],[CC_STAGE0])
428 MAYBE_OVERRIDE_STAGE0([ar],[AR_STAGE0])
429
430 dnl ** figure out how to invoke the C preprocessor (i.e. `gcc -E`)
431 AC_PROG_CPP
432
433 # --with-hs-cpp/--with-hs-cpp-flags
434 FP_CPP_CMD_WITH_ARGS(HaskellCPPCmd, HaskellCPPArgs)
435 AC_SUBST([HaskellCPPCmd])
436 AC_SUBST([HaskellCPPArgs])
437
438 dnl ** Which ld to use?
439 dnl --------------------------------------------------------------
440 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld])
441 case $target in
442 arm*linux*)
443         # Arm requires use of the binutils ld.gold linker.
444         # This case should catch at least arm-unknown-linux-gnueabihf and
445         # arm-linux-androideabi.
446         FP_ARG_WITH_PATH_GNU_PROG([LD_GOLD], [ld.gold], [ld.gold])
447         LdCmd="$LD_GOLD"
448         ;;
449 *)
450         LdCmd="$LD"
451         ;;
452 esac
453 AC_SUBST([LdCmd])
454
455 dnl ** Which nm to use?
456 dnl --------------------------------------------------------------
457 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
458 NmCmd="$NM"
459 AC_SUBST([NmCmd])
460
461 dnl ** Which ar to use?
462 dnl --------------------------------------------------------------
463 FP_ARG_WITH_PATH_GNU_PROG([AR], [ar], [ar])
464 ArCmd="$AR"
465 fp_prog_ar="$AR"
466 AC_SUBST([ArCmd])
467
468 dnl ** Which ranlib to use?
469 dnl --------------------------------------------------------------
470 FP_ARG_WITH_PATH_GNU_PROG([RANLIB], [ranlib], [ranlib])
471 RanlibCmd="$RANLIB"
472 RANLIB="$RanlibCmd"
473
474
475 # Note: we may not have objdump on OS X, and we only need it on Windows (for DLL checks)
476 case $HostOS_CPP in
477 cygwin32|mingw32)
478     dnl ** Which objdump to use?
479     dnl --------------------------------------------------------------
480     FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
481     ObjdumpCmd="$OBJDUMP"
482     AC_SUBST([ObjdumpCmd])
483     ;;
484 esac
485
486 dnl ** Which LLVM llc to use?
487 dnl --------------------------------------------------------------
488 FIND_LLVM_PROG([LLC], [llc], [llc])
489 LlcCmd="$LLC"
490 AC_SUBST([LlcCmd])
491
492 dnl ** Which LLVM opt to use?
493 dnl --------------------------------------------------------------
494 FIND_LLVM_PROG([OPT], [opt], [opt])
495 OptCmd="$OPT"
496 AC_SUBST([OptCmd])
497
498 dnl --------------------------------------------------------------
499 dnl End of configure script option section
500 dnl --------------------------------------------------------------
501
502
503 dnl --------------------------------------------------------------
504 dnl * General configuration checks
505 dnl --------------------------------------------------------------
506
507 dnl ** Bug 9439: Some GHC 7.8 releases had broken LLVM code generator.
508 dnl Unfortunately we don't know whether the user is going to request a
509 dnl build with the LLVM backend as this is only given in build.mk.
510 dnl
511 dnl Instead, we try to do as much work as possible here, checking
512 dnl whether -fllvm is the stage 0 compiler's default. If so we
513 dnl fail. If not, we check whether -fllvm is affected explicitly and
514 dnl if so set a flag. The build system will later check this flag
515 dnl after the desired build flags are known.
516 if test -n "$LlcCmd" && test -n "$OptCmd"
517 then
518     AC_MSG_CHECKING(whether bootstrap compiler is affected by bug 9439)
519     echo "main = putStrLn \"%function\"" > conftestghc.hs
520
521     # Check whether LLVM backend is default for this platform
522     "${WithGhc}" -pgmlc="${LlcCmd}" -pgmlo="${OptCmd}" conftestghc.hs 2>&1 >/dev/null
523     res=`./conftestghc`
524     if test "x$res" = "x%object"
525     then
526         AC_MSG_RESULT(yes)
527         echo "Buggy bootstrap compiler"
528         echo ""
529         echo "The stage 0 compiler $WithGhc is affected by GHC Bug \#9439"
530         echo "and therefore will miscompile the LLVM backend if -fllvm is"
531         echo "used."
532         echo
533         echo "Please use another bootstrap compiler"
534         exit 1
535     fi
536
537     # -fllvm is not the default, but set a flag so the Makefile can check
538     # -for it in the build flags later on
539     "${WithGhc}" -fforce-recomp -pgmlc="${LlcCmd}" -pgmlo="${OptCmd}" -fllvm conftestghc.hs 2>&1 >/dev/null
540     if test $? = 0
541     then
542         res=`./conftestghc`
543         if test "x$res" = "x%object"
544         then
545             AC_MSG_RESULT(yes)
546             GHC_LLVM_AFFECTED_BY_9439=1
547         elif test "x$res" = "x%function"
548         then
549             AC_MSG_RESULT(no)
550             GHC_LLVM_AFFECTED_BY_9439=0
551         else
552             AC_MSG_WARN(unexpected output $res)
553         fi
554     else
555         AC_MSG_RESULT(failed to compile, assuming no)
556     fi
557 fi
558 AC_SUBST([GHC_LLVM_AFFECTED_BY_9439])
559
560 dnl ** Can the unix package be built?
561 dnl --------------------------------------------------------------
562
563 if test "$TargetOS" = "mingw32"
564 then
565     GhcLibsWithUnix=NO
566 else
567     GhcLibsWithUnix=YES
568 fi
569 AC_SUBST([GhcLibsWithUnix])
570
571 dnl ** does #! work?
572 AC_SYS_INTERPRETER()
573
574 dnl ** look for `perl'
575 case $HostOS_CPP in
576 cygwin32|mingw32)
577     PerlCmd=$hardtop/inplace/perl/perl
578     ;;
579 *)
580     AC_PATH_PROG(PerlCmd,perl)
581     if test -z "$PerlCmd"
582     then
583         echo "You must install perl before you can continue"
584         echo "Perhaps it is already installed, but not in your PATH?"
585         exit 1
586     else
587         FPTOOLS_CHECK_PERL_VERSION
588     fi
589     ;;
590 esac
591
592 dnl ** look for GCC and find out which version
593 dnl     Figure out which C compiler to use.  Gcc is preferred.
594 dnl     If gcc, make sure it's at least 3.0
595 dnl
596 FP_GCC_VERSION
597
598 dnl ** look to see if we have a C compiler using an llvm back end.
599 dnl
600 FP_CC_LLVM_BACKEND
601
602 FP_PROG_LD_IS_GNU
603 FP_PROG_LD_BUILD_ID
604 FP_PROG_LD_NO_COMPACT_UNWIND
605 FP_PROG_LD_FILELIST
606
607
608 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
609 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
610 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
611 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
612 # Stage 3 won't be supported by cross-compilation
613
614 FP_GCC_EXTRA_FLAGS
615
616 AC_SUBST(CONF_CC_OPTS_STAGE0)
617 AC_SUBST(CONF_CC_OPTS_STAGE1)
618 AC_SUBST(CONF_CC_OPTS_STAGE2)
619 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
620 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
621 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
622 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
623 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
624 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
625 AC_SUBST(CONF_CPP_OPTS_STAGE0)
626 AC_SUBST(CONF_CPP_OPTS_STAGE1)
627 AC_SUBST(CONF_CPP_OPTS_STAGE2)
628
629 dnl ** Set up the variables for the platform in the settings file.
630 dnl May need to use gcc to find platform details.
631 dnl --------------------------------------------------------------
632 FPTOOLS_SET_HASKELL_PLATFORM_VARS
633
634 dnl ** figure out how to do context diffs
635 FP_PROG_CONTEXT_DIFF
636
637 dnl Let's make sure install-sh is executable here.  If we got it from
638 dnl a darcs repo, it might not be (see bug #978).
639 chmod +x install-sh
640 dnl ** figure out how to do a BSD-ish install
641 AC_PROG_INSTALL
642
643 dnl ** how to invoke `ar' and `ranlib'
644 FP_PROG_AR_SUPPORTS_ATFILE
645 FP_PROG_AR_NEEDS_RANLIB
646
647 dnl ** Check to see whether ln -s works
648 AC_PROG_LN_S
649
650 FP_SETTINGS
651
652 dnl ** Find the path to sed
653 AC_PATH_PROGS(SedCmd,gsed sed,sed)
654
655
656 dnl ** check for time command
657 AC_PATH_PROG(TimeCmd,time)
658
659 dnl ** check for tar
660 dnl   if GNU tar is named gtar, look for it first.
661 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
662
663 dnl ** check for patch
664 dnl if GNU patch is named gpatch, look for it first
665 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
666
667 dnl ** check for dtrace (currently only implemented for Mac OS X)
668 HaveDtrace=NO
669 AC_PATH_PROG(DtraceCmd,dtrace)
670 if test -n "$DtraceCmd"; then
671   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
672     HaveDtrace=YES
673   fi
674 fi
675 AC_SUBST(HaveDtrace)
676
677 AC_PATH_PROG(HSCOLOUR,HsColour)
678 # HsColour is passed to Cabal, so we need a native path
679 if test "$HostOS"      = "mingw32" && \
680    test "${OSTYPE}"   != "msys"    && \
681    test "${HSCOLOUR}" != ""
682 then
683     # Canonicalise to <drive>:/path/to/gcc
684     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
685 fi
686
687 dnl ** check for DocBook toolchain
688 FP_CHECK_DOCBOOK_DTD
689 FP_DOCBOOK_XSL
690 FP_PROG_DBLATEX
691
692 dnl ** check for ghc-pkg command
693 FP_PROG_GHC_PKG
694
695 dnl ** check for installed happy binary + version
696 FPTOOLS_HAPPY
697
698 dnl ** check for installed alex binary + version
699 FPTOOLS_ALEX
700
701 dnl --------------------------------------------------
702 dnl ### program checking section ends here ###
703 dnl --------------------------------------------------
704
705 dnl --------------------------------------------------
706 dnl * Platform header file and syscall feature tests
707 dnl ### checking the state of the local header files and syscalls ###
708
709 dnl ** check for full ANSI header (.h) files
710 AC_HEADER_STDC
711
712 dnl ** Enable large file support.  NB. do this before testing the type of
713 dnl    off_t, because it will affect the result of that test.
714 AC_SYS_LARGEFILE
715
716 dnl ** check for specific header (.h) files that we are interested in
717 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/timers.h sys/times.h sys/utsname.h sys/wait.h termios.h time.h utime.h windows.h winsock.h sched.h])
718
719 dnl sys/cpuset.h needs sys/param.h to be included first on FreeBSD 9.1; #7708
720 AC_CHECK_HEADERS([sys/cpuset.h], [], [],
721 [[#if HAVE_SYS_PARAM_H
722 # include <sys/param.h>
723 #endif
724 ]])
725
726 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
727 AC_HEADER_TIME
728
729 dnl ** do we have long longs?
730 AC_CHECK_TYPES([long long])
731
732 dnl ** what are the sizes of various types
733 AC_CHECK_SIZEOF(char,               1)
734 AC_CHECK_SIZEOF(double,             8)
735 AC_CHECK_SIZEOF(float,              4)
736 AC_CHECK_SIZEOF(int,                4)
737 AC_CHECK_SIZEOF(long,               4)
738 if test "$ac_cv_type_long_long" = yes; then
739 AC_CHECK_SIZEOF(long long,          8)
740 fi
741 AC_CHECK_SIZEOF(short,              2)
742 AC_CHECK_SIZEOF(unsigned char,      1)
743 AC_CHECK_SIZEOF(unsigned int,       4)
744 AC_CHECK_SIZEOF(unsigned long,      4)
745 if test "$ac_cv_type_long_long" = yes; then
746 AC_CHECK_SIZEOF(unsigned long long, 8)
747 fi
748 AC_CHECK_SIZEOF(unsigned short,     2)
749 AC_CHECK_SIZEOF(void *,             4)
750
751 dnl for use in settings.in
752 WordSize=$ac_cv_sizeof_void_p
753 AC_SUBST(WordSize)
754
755 dnl ** what are alignment constraints on various types
756 FP_CHECK_ALIGNMENT(char)
757 FP_CHECK_ALIGNMENT(double)
758 FP_CHECK_ALIGNMENT(float)
759 FP_CHECK_ALIGNMENT(int)
760 FP_CHECK_ALIGNMENT(long)
761 if test "$ac_cv_type_long_long" = yes; then
762 FP_CHECK_ALIGNMENT(long long)
763 fi
764 FP_CHECK_ALIGNMENT(short)
765 FP_CHECK_ALIGNMENT(unsigned char)
766 FP_CHECK_ALIGNMENT(unsigned int)
767 FP_CHECK_ALIGNMENT(unsigned long)
768 if test "$ac_cv_type_long_long" = yes; then
769 FP_CHECK_ALIGNMENT(unsigned long long)
770 fi
771 FP_CHECK_ALIGNMENT(unsigned short)
772 FP_CHECK_ALIGNMENT(void *)
773
774 FP_CHECK_FUNC([WinExec],
775   [@%:@include <windows.h>], [WinExec("",0)])
776
777 FP_CHECK_FUNC([GetModuleFileName],
778   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
779
780 dnl ** check for more functions
781 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
782 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
783
784 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
785 dnl ** _POSIX_C_SOURCE is defined
786 AC_CHECK_DECLS([ctime_r], , ,
787 [#define _POSIX_SOURCE 1
788 #define _POSIX_C_SOURCE 199506L
789 #include <time.h>])
790
791 dnl ** check for mingwex library
792 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
793 AC_SUBST(HaveLibMingwEx)
794
795 if test $HaveLibMingwEx = YES ; then
796   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
797 fi
798
799 dnl ** check for math library
800 dnl    Keep that check as early as possible.
801 dnl    as we need to know whether we need libm
802 dnl    for math functions or not
803 dnl    (see http://ghc.haskell.org/trac/ghc/ticket/3730)
804 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
805 if test $HaveLibM = YES
806 then
807   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
808 fi
809
810 FP_BFD_SUPPORT
811
812 dnl ################################################################
813 dnl Check for libraries
814 dnl ################################################################
815
816 # system libffi
817
818 AC_ARG_WITH([system-libffi],
819 [AC_HELP_STRING([--with-system-libffi],
820   [Use system provided libffi for RTS [default=no]])
821 ])
822
823 AS_IF([test "x$with_system_libffi" = "xyes"],
824   [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
825 )
826
827
828 AC_SUBST(UseSystemLibFFI)
829
830 AC_ARG_WITH([ffi-includes],
831 [AC_HELP_STRING([--with-ffi-includes=ARG],
832   [Find includes for libffi in ARG [default=system default]])
833 ],
834 [
835  if test "x$UseSystemLibFFI" != "xYES"; then
836     AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
837  else
838     FFIIncludeDir="$withval"
839     LIBFFI_CFLAGS="-I$withval"
840  fi
841 ])
842
843 AC_SUBST(FFIIncludeDir)
844
845 AC_ARG_WITH([ffi-libraries],
846 [AC_HELP_STRING([--with-ffi-libraries=ARG],
847   [Find libffi in ARG [default=system default]])
848 ],
849 [
850  if test "x$UseSystemLibFFI" != "xYES"; then
851     AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
852  else
853     FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
854  fi
855 ])
856
857 AC_SUBST(FFILibDir)
858
859 AS_IF([test "$UseSystemLibFFI" = "YES"], [
860  CFLAGS2="$CFLAGS"
861  CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
862  LDFLAGS2="$LDFLAGS"
863  LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
864  AC_CHECK_LIB(ffi, ffi_call,
865   [AC_CHECK_HEADERS([ffi.h], [break], [])
866    AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
867   [AC_MSG_ERROR([Cannot find system libffi])])
868  CFLAGS="$CFLAGS2"
869  LDFLAGS="$LDFLAGS2"
870 ])
871
872 dnl ** check whether we need -ldl to get dlopen()
873 AC_CHECK_LIB(dl, dlopen)
874
875 dnl --------------------------------------------------
876 dnl * Miscellaneous feature tests
877 dnl --------------------------------------------------
878
879 dnl ** can we get alloca?
880 AC_FUNC_ALLOCA
881
882 dnl ** working vfork?
883 AC_FUNC_FORK
884
885 dnl ** determine whether or not const works
886 AC_C_CONST
887
888 dnl ** are we big endian?
889 AC_C_BIGENDIAN
890 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
891
892 dnl ** check for leading underscores in symbol names
893 FP_LEADING_UNDERSCORE
894
895 FP_VISIBILITY_HIDDEN
896
897 dnl ** check for librt
898 AC_CHECK_LIB(rt, clock_gettime)
899 AC_CHECK_FUNCS(clock_gettime timer_settime)
900 FP_CHECK_TIMER_CREATE
901
902 dnl ** check for Apple's "interesting" long double compatibility scheme
903 AC_MSG_CHECKING(for printf\$LDBLStub)
904 AC_TRY_LINK_FUNC(printf\$LDBLStub,
905     [
906         AC_MSG_RESULT(yes)
907         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
908             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
909     ],
910     [
911         AC_MSG_RESULT(no)
912         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
913             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
914     ])
915
916 dnl ** pthread_setname_np is a recent addition to glibc, and OS X has
917 dnl    a different single-argument version.
918 AC_CHECK_LIB(pthread, pthread_setname_np)
919 AC_MSG_CHECKING(for pthread_setname_np)
920 AC_TRY_LINK(
921 [
922 #define _GNU_SOURCE
923 #include <pthread.h>
924 ],
925 [pthread_setname_np(pthread_self(), "name");],
926     AC_MSG_RESULT(yes)
927     AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1],
928       [Define to 1 if you have the glibc version of pthread_setname_np]),
929     AC_MSG_RESULT(no)
930 )
931
932 dnl ** check for eventfd which is needed by the I/O manager
933 AC_CHECK_HEADERS([sys/eventfd.h])
934 AC_CHECK_FUNCS([eventfd])
935
936 dnl ** Check for __thread support in the compiler
937 AC_MSG_CHECKING(for __thread support)
938 AC_COMPILE_IFELSE(
939   [ AC_LANG_SOURCE([[__thread int tester = 0;]]) ],
940   [
941    AC_MSG_RESULT(yes)
942    AC_DEFINE([CC_SUPPORTS_TLS],[1],[Define to 1 if __thread is supported])
943   ],
944   [
945    AC_MSG_RESULT(no)
946    AC_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
947   ])
948
949
950 dnl ** checking for PAPI
951 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
952 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
953 AC_SUBST(HavePapiLib)
954 AC_SUBST(HavePapiHeader)
955
956 AC_CHECK_FUNCS(__mingw_vfprintf)
957
958 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
959    HavePapi=YES
960 else
961    HavePapi=NO
962 fi
963 AC_SUBST(HavePapi)
964
965 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
966    test "$XsltprocCmd" = ""
967 then
968     BUILD_DOCBOOK_HTML=NO
969 else
970     BUILD_DOCBOOK_HTML=YES
971 fi
972 AC_SUBST(BUILD_DOCBOOK_HTML)
973
974 if test "$DblatexCmd" = ""
975 then
976     BUILD_DOCBOOK_PS=NO
977     BUILD_DOCBOOK_PDF=NO
978 else
979     BUILD_DOCBOOK_PS=YES
980     BUILD_DOCBOOK_PDF=YES
981 fi
982 AC_SUBST(BUILD_DOCBOOK_PS)
983 AC_SUBST(BUILD_DOCBOOK_PDF)
984
985 LIBRARY_VERSION(base)
986 LIBRARY_VERSION(Cabal, Cabal/Cabal)
987 LIBRARY_VERSION(ghc-prim)
988 LIBRARY_ghc_VERSION="$ProjectVersion"
989 AC_SUBST(LIBRARY_ghc_VERSION)
990
991 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
992    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
993 fi
994
995 AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal settings docs/users_guide/ug-book.xml docs/users_guide/ug-ent.xml docs/index.html libraries/prologue.txt distrib/configure.ac])
996 AC_OUTPUT
997
998 # We got caught by
999 #     http://savannah.gnu.org/bugs/index.php?1516
1000 #     $(eval ...) inside conditionals causes errors
1001 # with make 3.80, so warn the user if it looks like they're about to
1002 # try to use it.
1003 # We would use "grep -q" here, but Solaris's grep doesn't support it.
1004 checkMake380() {
1005     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
1006     then
1007         echo
1008         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
1009         echo "This version cannot be used to build GHC."
1010         echo "Please use GNU make >= 3.81."
1011     fi
1012 }
1013
1014 checkMake380 make
1015 checkMake380 gmake
1016
1017 echo ["
1018 ----------------------------------------------------------------------
1019 Configure completed successfully.
1020
1021    Building GHC version  : $ProjectVersion
1022           Git commit id  : $ProjectGitCommitId
1023
1024    Build platform        : $BuildPlatform
1025    Host platform         : $HostPlatform
1026    Target platform       : $TargetPlatform
1027 "]
1028
1029 echo ["\
1030    Bootstrapping using   : $WithGhc
1031       which is version   : $GhcVersion
1032 "]
1033
1034 if test "x$CC_LLVM_BACKEND" = "x1"; then
1035     if test "x$CC_CLANG_BACKEND" = "x1"; then
1036         CompilerName="clang        "
1037     else
1038         CompilerName="llvm-gcc     "
1039     fi
1040 else
1041     CompilerName="gcc          "
1042 fi
1043
1044 echo ["\
1045    Using $CompilerName       : $WhatGccIsCalled
1046       which is version       : $GccVersion
1047    Building a cross compiler : $CrossCompiling
1048    hs-cpp       : $HaskellCPPCmd
1049    hs-cpp-flags : $HaskellCPPArgs
1050    ld           : $LdCmd
1051    Happy        : $HappyCmd ($HappyVersion)
1052    Alex         : $AlexCmd ($AlexVersion)
1053    Perl         : $PerlCmd
1054    dblatex      : $DblatexCmd
1055    xsltproc     : $XsltprocCmd
1056
1057    Using LLVM tools
1058       llc   : $LlcCmd
1059       opt   : $OptCmd"]
1060
1061 if test "$HSCOLOUR" = ""; then
1062 echo ["
1063    HsColour was not found; documentation will not contain source links
1064 "]
1065 else
1066 echo ["\
1067    HsColour : $HSCOLOUR
1068 "]
1069 fi
1070
1071 echo ["\
1072    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1073    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
1074    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
1075
1076 echo ["----------------------------------------------------------------------
1077 "]
1078
1079 echo "\
1080 For a standard build of GHC (fully optimised with profiling), type (g)make.
1081
1082 To make changes to the default build configuration, copy the file
1083 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1084
1085 For more information on how to configure your GHC build, see
1086    http://ghc.haskell.org/trac/ghc/wiki/Building
1087 "