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