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