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