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