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