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