add -fsimpleopt-before-flatten
[ghc-hetmet.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-2004
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.1], [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. 6.7, 6.6.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. 6.7.20070204).  The date is
24 # constructed by finding the date of the most recent patch in the
25 # darcs repository.  If this is a source distribution (not a darcs
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   if test $GhcCanonVersion -ge 613; then ghc_ge_613=YES; else ghc_ge_613=NO; fi
134   AC_SUBST(ghc_ge_613)dnl
135
136   BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command],['$(CC)'])
137 fi
138
139 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
140 if test "$BootingFromHc" = "NO"; then
141   if test "$WithGhc" = ""; then
142      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
143   fi
144   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.12],
145     [AC_MSG_ERROR([GHC version 6.12 or later is required to compile GHC.])])dnl
146
147   if test `expr $GhcMinVersion % 2` = "1"; then
148      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
149         AC_MSG_ERROR([
150      $WithGhc is a development snapshot of GHC, version $GhcVersion.
151      Bootstrapping using this version of GHC is not supported, and may not
152      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
153      or --with-ghc to specify a different GHC to use.])
154      fi
155   fi
156 fi;
157
158 # GHC is passed to Cabal, so we need a native path
159 if test "${WithGhc}" != ""
160 then
161     ghc_host=`"${WithGhc}" +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'`
162
163     if test "$ghc_host" = "i386-unknown-mingw32"
164     then
165         if test "${OSTYPE}" = "msys"
166         then
167             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
168         else
169             # Canonicalise to <drive>:/path/to/ghc
170             WithGhc=`cygpath -m "${WithGhc}"`
171         fi
172         echo "GHC path canonicalised to: ${WithGhc}"
173     fi
174 fi
175 AC_SUBST([WithGhc])
176
177 dnl ** Without optimization some INLINE trickery fails for GHCi
178 SRC_CC_OPTS="-O"
179
180 FP_ICONV
181 FP_GMP
182
183 dnl--------------------------------------------------------------------
184 dnl * Choose host(/target/build) platform
185 dnl--------------------------------------------------------------------
186 dnl If we aren't explicitly told what values to use with configure flags,
187 dnl we ask the bootstrapping compiler what platform it is for
188
189 if test "${WithGhc}" != ""
190 then
191         bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
192         bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
193         if test "$bootstrap_host" != "$bootstrap_target"
194         then
195                 echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work"
196         fi
197 fi
198
199 # We have to run these unconditionally, but we may discard their
200 # results in the following code
201 AC_CANONICAL_BUILD
202 AC_CANONICAL_HOST
203 AC_CANONICAL_TARGET
204
205 FPTOOLS_SET_PLATFORM_VARS
206
207 exeext=''
208 soext='.so'
209 case $host in
210 *-unknown-cygwin32)
211     AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
212     AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
213     exit 1
214     ;;
215 *-unknown-mingw32)
216     exeext='.exe'
217     soext='.dll'
218     ;;
219 i386-apple-darwin|powerpc-apple-darwin)
220     soext='.dylib'
221     ;;
222 x86_64-apple-darwin)
223     soext='.dylib'
224     ;;
225 esac
226
227 # Testing if we shall enable shared libs support on Solaris.
228 # Anything older than SunOS 5.11 aka Solaris 11 (Express) is broken.
229
230 SOLARIS_BROKEN_SHLD=NO
231
232 case $host in
233      i386-*-solaris2)
234      # here we go with the test
235      MINOR=`uname -r|cut -d '.' -f 2-`
236      if test "$MINOR" -lt "11"; then
237         SOLARIS_BROKEN_SHLD=YES
238      fi
239      ;;
240 esac
241
242 # Sync this with cTargetArch in compiler/ghc.mk
243 checkArch() {
244     case $1 in
245     alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64)
246         ;;
247     *)
248         echo "Unknown arch $1"
249         exit 1
250         ;;
251     esac
252 }
253
254 checkVendor() {
255     case $1 in
256     dec|unknown|hp|apple|next|sun|sgi|ibm)
257         ;;
258     *)
259         echo "Unknown vendor $1"
260         exit 1
261         ;;
262     esac
263 }
264
265 checkOS() {
266     case $1 in
267     linux|freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
268         ;;
269     *)
270         echo "Unknown OS '$1'"
271         exit 1
272         ;;
273     esac
274 }
275
276 BuildPlatform="$BuildArch-$BuildVendor-$BuildOS"
277 BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
278 BuildArch_CPP=`    echo "$BuildArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
279 BuildVendor_CPP=`  echo "$BuildVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
280 BuildOS_CPP=`      echo "$BuildOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
281
282 checkArch "$BuildArch"
283 checkVendor "$BuildVendor"
284 checkOS "$BuildOS"
285
286 HostPlatform="$HostArch-$HostVendor-$HostOS"
287 HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
288 HostArch_CPP=`    echo "$HostArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
289 HostVendor_CPP=`  echo "$HostVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
290 HostOS_CPP=`      echo "$HostOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
291
292 checkArch "$HostArch"
293 checkVendor "$HostVendor"
294 checkOS "$HostOS"
295
296 TargetPlatform="$TargetArch-$TargetVendor-$TargetOS"
297 TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
298 TargetArch_CPP=`    echo "$TargetArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
299 TargetVendor_CPP=`  echo "$TargetVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
300 TargetOS_CPP=`      echo "$TargetOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
301
302 checkArch "$TargetArch"
303 checkVendor "$TargetVendor"
304 checkOS "$TargetOS"
305
306 # Verify that the installed (bootstrap) GHC is capable of generating
307 # code for the requested build platform.
308 if test "$BuildPlatform" != "$bootstrap_target"
309 then
310     echo "This GHC (${WithGhc}) does not generate code for the build platform"
311     echo "   GHC target platform    : $bootstrap_target"
312     echo "   Desired build platform : $BuildPlatform"
313     exit 1
314 fi
315
316 echo "GHC build  : $BuildPlatform"
317 echo "GHC host   : $HostPlatform"
318 echo "GHC target : $TargetPlatform"
319
320 AC_SUBST(BuildPlatform)
321 AC_SUBST(HostPlatform)
322 AC_SUBST(TargetPlatform)
323 AC_SUBST(HostPlatform_CPP)
324 AC_SUBST(BuildPlatform_CPP)
325 AC_SUBST(TargetPlatform_CPP)
326
327 AC_SUBST(HostArch_CPP)
328 AC_SUBST(BuildArch_CPP)
329 AC_SUBST(TargetArch_CPP)
330
331 AC_SUBST(HostOS_CPP)
332 AC_SUBST(BuildOS_CPP)
333 AC_SUBST(TargetOS_CPP)
334
335 AC_SUBST(HostVendor_CPP)
336 AC_SUBST(BuildVendor_CPP)
337 AC_SUBST(TargetVendor_CPP)
338
339 AC_SUBST(exeext)
340 AC_SUBST(soext)
341
342 AC_SUBST(SOLARIS_BROKEN_SHLD)
343
344 AC_ARG_WITH(hc,
345 [AC_HELP_STRING([--with-hc=ARG],
346         [Use ARG as the path to the compiler for compiling ordinary
347          Haskell code  (default= value of --with-ghc)])],
348 [WithHc="$withval"],
349 [WithHc=$WithGhc]
350 )
351 AC_SUBST(WithHc)
352
353 # This uses GHC, so put it after the "GHC is required" check above:
354 FP_INTREE_GHC_PWD
355 FP_FIND_ROOT
356
357 if test "$HostOS" = "mingw32"
358 then
359     test -d inplace || mkdir inplace
360
361     CC="$hardtop/inplace/mingw/bin/gcc.exe"
362     LD="$hardtop/inplace/mingw/bin/ld.exe"
363     NM="$hardtop/inplace/mingw/bin/nm.exe"
364     fp_prog_ar_raw="$hardtop/inplace/mingw/bin/ar.exe"
365
366     # NB. If you update the tarbballs to a new version of gcc, don't
367     # forget to tweak the paths in driver/gcc/gcc.c.
368     if ! test -d inplace/mingw ||
369          test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma  ||
370          test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma  ||
371          test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma   ||
372          test inplace/mingw -ot ghc-tarballs/mingw/libgcc*.tar.gz      ||
373          test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz      ||
374          test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz      ||
375          test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz     ||
376          test inplace/mingw -ot ghc-tarballs/mingw/libstdc*.tar.lzma   ||
377          test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz ||
378          test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz ||
379          test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma
380     then
381         AC_MSG_NOTICE([Making in-tree mingw tree])
382         rm -rf inplace/mingw
383         mkdir inplace/mingw
384         (
385             cd inplace/mingw &&
386             tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma  &&
387             tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma  &&
388             tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma   &&
389             tar --lzma -xf ../../ghc-tarballs/mingw/libgcc*.tar.lzma    &&
390             tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma    &&
391             tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma    &&
392             tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma   &&
393             tar --lzma -xf ../../ghc-tarballs/mingw/libstdc*.tar.lzma   &&
394             tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz &&
395             tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz &&
396             tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma    &&
397             mv bin/gcc.exe bin/realgcc.exe
398         )
399         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
400         if ! test -e inplace/mingw/bin/gcc.exe
401         then
402             AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
403         fi
404         AC_MSG_NOTICE([In-tree mingw tree created])
405     fi
406     if ! test -d inplace/perl ||
407          test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
408     then
409         AC_MSG_NOTICE([Making in-tree perl tree])
410         rm -rf inplace/perl
411         mkdir inplace
412         mkdir inplace/perl
413         (
414             cd inplace/perl &&
415             tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
416         )
417         AC_MSG_NOTICE([In-tree perl tree created])
418     fi
419 fi
420
421 dnl ** Which gcc to use?
422 dnl --------------------------------------------------------------
423 FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
424 export CC
425 WhatGccIsCalled="$CC"
426 AC_SUBST(WhatGccIsCalled)
427
428 dnl ** Which ld to use?
429 dnl --------------------------------------------------------------
430 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld])
431 LdCmd="$LD"
432 AC_SUBST([LdCmd])
433
434 dnl ** Which nm to use?
435 dnl --------------------------------------------------------------
436 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm])
437 NmCmd="$NM"
438 AC_SUBST([NmCmd])
439
440 SplitObjsBroken=NO
441 if test "$TargetOS_CPP" = "darwin"
442 then
443     AC_MSG_CHECKING(XCode version)
444     XCodeVersion=`xcodebuild -version | grep Xcode | sed "s/Xcode //"`
445     # Old XCode versions don't actually give the XCode version
446     if test "$XCodeVersion" = ""
447     then
448         AC_MSG_RESULT(not found (too old?))
449         SplitObjsBroken=YES
450     else
451         AC_MSG_RESULT($XCodeVersion)
452         XCodeVersion1=`echo "$XCodeVersion" | sed 's/\..*//'`
453 changequote(, )dnl
454         XCodeVersion2=`echo "$XCodeVersion" | sed 's/[^.]*\.\([^.]*\).*/\1/'`
455 changequote([, ])dnl
456         AC_MSG_NOTICE(XCode version component 1: $XCodeVersion1)
457         AC_MSG_NOTICE(XCode version component 2: $XCodeVersion2)
458         # Split objects is broken (#4013) with XCode < 3.2
459         if test "$XCodeVersion1" -lt 3
460         then
461             SplitObjsBroken=YES
462         else
463             if test "$XCodeVersion1" -eq 3
464             then
465                 if test "$XCodeVersion2" -lt 2
466                 then
467                     SplitObjsBroken=YES
468                 fi
469             fi
470         fi
471     fi
472 fi
473 AC_SUBST([SplitObjsBroken])
474
475 dnl ** Mac OS X: explicit deployment target
476 dnl --------------------------------------------------------------
477 AC_ARG_WITH([macosx-deployment-target],
478 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
479         [Build for Mac OS VERSION and higher  (default= version of build host)])],
480 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
481  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
482    # ignore everywhere, but on Mac OS
483    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
484    FP_MACOSX_DEPLOYMENT_TARGET=none
485  fi],
486 [FP_MACOSX_DEPLOYMENT_TARGET=none]
487 )
488 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
489 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
490 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
491
492 dnl --------------------------------------------------------------
493 dnl End of configure script option section
494 dnl --------------------------------------------------------------
495
496
497 dnl --------------------------------------------------------------
498 dnl * General configuration checks
499 dnl --------------------------------------------------------------
500
501 dnl ** Can the unix package be built?
502 dnl --------------------------------------------------------------
503
504 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
505    GhcLibsWithUnix=NO
506 else
507    GhcLibsWithUnix=YES
508 fi
509 AC_SUBST([GhcLibsWithUnix])
510
511 dnl ** does #! work?
512 AC_SYS_INTERPRETER()
513
514 dnl ** look for `perl'
515 case $HostOS_CPP in
516 cygwin32|mingw32)
517     PerlCmd=$hardtop/inplace/perl/perl
518     ;;
519 *)
520     AC_PATH_PROG(PerlCmd,perl)
521     if test -z "$PerlCmd"
522     then
523         echo "You must install perl before you can continue"
524         echo "Perhaps it is already installed, but not in your PATH?"
525         exit 1
526     else
527         FPTOOLS_CHECK_PERL_VERSION
528     fi
529     ;;
530 esac
531
532 dnl ** does #! path/to/perl work? (sometimes it's too long...)
533 FPTOOLS_SHEBANG_PERL
534
535 dnl ** check for Python
536 AC_PATH_PROG(PythonCmd,python)
537
538 dnl ** look for GCC and find out which version
539 dnl     Figure out which C compiler to use.  Gcc is preferred.
540 dnl     If gcc, make sure it's at least 2.1
541 dnl
542 FP_GCC_VERSION
543
544 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
545 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
546 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
547 # Stage 3 won't be supported by cross-compilation
548 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
549
550 FP_GCC_EXTRA_FLAGS
551
552 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
553 AC_PROG_CPP
554
555 AC_SUBST(CONF_CC_OPTS_STAGE0)
556 AC_SUBST(CONF_CC_OPTS_STAGE1)
557 AC_SUBST(CONF_CC_OPTS_STAGE2)
558 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
559 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
560 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
561 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
562 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
563 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
564 AC_SUBST(CONF_CPP_OPTS_STAGE0)
565 AC_SUBST(CONF_CPP_OPTS_STAGE1)
566 AC_SUBST(CONF_CPP_OPTS_STAGE2)
567
568 dnl ** figure out how to do context diffs
569 FP_PROG_CONTEXT_DIFF
570
571 dnl Let's make sure install-sh is executable here.  If we got it from
572 dnl a darcs repo, it might not be (see bug #978).
573 chmod +x install-sh
574 dnl ** figure out how to do a BSD-ish install
575 AC_PROG_INSTALL
576
577 dnl If you can run configure, you certainly have /bin/sh
578 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
579
580 dnl ** how to invoke `ar' and `ranlib'
581 FP_PROG_AR_SUPPORTS_ATFILE
582 FP_PROG_AR_NEEDS_RANLIB
583
584 dnl ** Check to see whether ln -s works
585 AC_PROG_LN_S
586
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 "x$HostPlatform"  = "xi386-unknown-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 FP_PROG_HSTAGS
629
630 dnl ** check for ghc-pkg command
631 FP_PROG_GHC_PKG
632
633 dnl ** check for installed happy binary + version
634 dnl    (don't do it if we're booting from .hc files though.)
635 if test "$BootingFromHc" = "NO"; then
636 FPTOOLS_HAPPY
637 fi;
638
639 dnl ** check for installed alex binary + version
640 dnl    (don't do it if we're booting from .hc files though.)
641 if test "$BootingFromHc" = "NO"; then
642 FPTOOLS_ALEX
643 fi;
644
645 dnl --------------------------------------------------
646 dnl ### program checking section ends here ###
647 dnl --------------------------------------------------
648
649 dnl --------------------------------------------------
650 dnl * Platform header file and syscall feature tests
651 dnl ### checking the state of the local header files and syscalls ###
652
653 dnl ** check for full ANSI header (.h) files
654 AC_HEADER_STDC
655
656 dnl ** Enable large file support.  NB. do this before testing the type of
657 dnl    off_t, because it will affect the result of that test.
658 AC_SYS_LARGEFILE
659
660 dnl ** check for specific header (.h) files that we are interested in
661 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])
662
663 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
664 AC_HEADER_TIME
665
666 dnl ** do we have long longs?
667 AC_CHECK_TYPES([long long])
668
669 dnl ** what are the sizes of various types
670 AC_CHECK_SIZEOF(char,               1)
671 AC_CHECK_SIZEOF(double,             8)
672 AC_CHECK_SIZEOF(float,              4)
673 AC_CHECK_SIZEOF(int,                4)
674 AC_CHECK_SIZEOF(long,               4)
675 if test "$ac_cv_type_long_long" = yes; then
676 AC_CHECK_SIZEOF(long long,          8)
677 fi
678 AC_CHECK_SIZEOF(short,              2)
679 AC_CHECK_SIZEOF(unsigned char,      1)
680 AC_CHECK_SIZEOF(unsigned int,       4)
681 AC_CHECK_SIZEOF(unsigned long,      4)
682 if test "$ac_cv_type_long_long" = yes; then
683 AC_CHECK_SIZEOF(unsigned long long, 8)
684 fi
685 AC_CHECK_SIZEOF(unsigned short,     2)
686 AC_CHECK_SIZEOF(void *,             4)
687
688 dnl ** what are alignment constraints on various types
689 FP_CHECK_ALIGNMENT(char)
690 FP_CHECK_ALIGNMENT(double)
691 FP_CHECK_ALIGNMENT(float)
692 FP_CHECK_ALIGNMENT(int)
693 FP_CHECK_ALIGNMENT(long)
694 if test "$ac_cv_type_long_long" = yes; then
695 FP_CHECK_ALIGNMENT(long long)
696 fi
697 FP_CHECK_ALIGNMENT(short)
698 FP_CHECK_ALIGNMENT(unsigned char)
699 FP_CHECK_ALIGNMENT(unsigned int)
700 FP_CHECK_ALIGNMENT(unsigned long)
701 if test "$ac_cv_type_long_long" = yes; then
702 FP_CHECK_ALIGNMENT(unsigned long long)
703 fi
704 FP_CHECK_ALIGNMENT(unsigned short)
705 FP_CHECK_ALIGNMENT(void *)
706
707 FP_CHECK_FUNC([WinExec],
708   [@%:@include <windows.h>], [WinExec("",0)])
709
710 FP_CHECK_FUNC([GetModuleFileName],
711   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
712
713 dnl ** check return type of signal handlers
714 dnl Foo: assumes we can use prototypes.
715 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
716 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
717 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
718 dnl #include <signal.h>
719 dnl #ifdef signal
720 dnl #undef signal
721 dnl #endif
722 dnl void (*signal (int, void (*)(int)))(int);
723 dnl ]],
724 dnl [[int i;]])],
725 dnl [ac_cv_type_signal_handler=void_int],
726 dnl [ac_cv_type_signal_handler=int_void])])
727 dnl if test "$ac_cv_type_signal_handler" = void_int; then
728 dnl AC_DEFINE(VOID_INT_SIGNALS)
729 dnl fi
730
731 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
732 AC_TYPE_SIGNAL
733 if test "$ac_cv_type_signal" = void; then
734   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).])
735 fi
736
737 dnl ** check for more functions
738 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
739 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
740
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
753 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
754 dnl ** _POSIX_C_SOURCE is defined
755 AC_CHECK_DECLS([ctime_r], , ,
756 [#define _POSIX_SOURCE 1
757 #define _POSIX_C_SOURCE 199506L
758 #include <time.h>])
759
760 dnl ** check for mingwex library
761 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
762 AC_SUBST(HaveLibMingwEx)
763
764 if test $HaveLibMingwEx = YES ; then
765   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
766 fi
767
768 dnl ** check for math library
769 dnl    Keep that check as early as possible.
770 dnl    as we need to know whether we need libm
771 dnl    for math functions or not
772 dnl    (see http://hackage.haskell.org/trac/ghc/ticket/3730)
773 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
774 if test $HaveLibM = YES
775 then
776   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
777 fi
778
779 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
780 dnl    the order of these tests matters: bfd needs liberty
781 AC_CHECK_LIB(iberty, xmalloc)
782 AC_CHECK_LIB(bfd,    bfd_init)
783
784 dnl ################################################################
785 dnl Check for libraries
786 dnl ################################################################
787
788 dnl ** check whether we need -ldl to get dlopen()
789
790 AC_CHECK_LIB(dl, dlopen,
791     [HaveLibDL=YES
792      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
793      LIBS="$LIBS -ldl"],
794     [HaveLibDL=NO])
795 AC_SUBST(HaveLibDL)
796
797 dnl --------------------------------------------------
798 dnl * Miscellaneous feature tests
799 dnl --------------------------------------------------
800
801 dnl ** can we get alloca?
802 AC_FUNC_ALLOCA
803
804 dnl ** Working vfork?
805 AC_FUNC_FORK
806
807 dnl ** determine whether or not const works
808 AC_C_CONST
809
810 dnl ** are we big endian?
811 AC_C_BIGENDIAN
812 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
813
814 dnl ** check for leading underscores in symbol names
815 FP_LEADING_UNDERSCORE
816
817 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
818 FP_PROG_LD_X
819 FP_PROG_LD_IS_GNU
820 FP_PROG_LD_BUILD_ID
821
822 dnl ** check for Apple-style dead-stripping support
823 dnl    (.subsections-via-symbols assembler directive)
824
825
826 AC_MSG_CHECKING(for .subsections_via_symbols)
827 AC_COMPILE_IFELSE(
828     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
829     [AC_MSG_RESULT(yes)
830      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
831                [Define to 1 if Apple-style dead-stripping is supported.])
832     ],
833     [AC_MSG_RESULT(no)])
834
835 dnl *** check for GNU non-executable stack note support (ELF only)
836 dnl     (.section .note.GNU-stack,"",@progbits)
837
838 dnl This test doesn't work with "gcc -g" in gcc 4.4 (GHC trac #3889:
839 dnl     Error: can't resolve `.note.GNU-stack' {.note.GNU-stack section} - `.Ltext0' {.text section}
840 dnl so we empty CFLAGS while running this test
841 CFLAGS2="$CFLAGS"
842 CFLAGS=
843 AC_MSG_CHECKING(for GNU non-executable stack support)
844 AC_COMPILE_IFELSE(
845     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
846     [AC_MSG_RESULT(yes)
847      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
848                [Define to 1 if GNU non-executable stack notes are supported.])
849     ],
850     [AC_MSG_RESULT(no)])
851 CFLAGS="$CFLAGS2"
852
853 FP_VISIBILITY_HIDDEN
854
855 dnl ** check for librt
856 AC_CHECK_LIB(rt, clock_gettime)
857 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
858 FP_CHECK_TIMER_CREATE
859
860 dnl ** check for Apple's "interesting" long double compatibility scheme
861 AC_MSG_CHECKING(for printf\$LDBLStub)
862 AC_TRY_LINK_FUNC(printf\$LDBLStub,
863     [
864         AC_MSG_RESULT(yes)
865         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
866             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
867     ],
868     [
869         AC_MSG_RESULT(no)
870         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
871             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
872     ])
873
874 dnl ** check for eventfd which is needed by the I/O manager
875 AC_CHECK_HEADERS([sys/eventfd.h])
876 AC_CHECK_FUNCS([eventfd])
877
878 # test for GTK+
879 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
880 if test -n "$GTK_CONFIG"; then
881   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
882     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
883   else
884     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
885     GTK_CONFIG=
886   fi
887 fi
888 AC_SUBST([GTK_CONFIG])
889
890 #Checking for PAPI
891 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
892 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
893 AC_SUBST(HavePapiLib)
894 AC_SUBST(HavePapiHeader)
895
896 AC_CHECK_FUNCS(__mingw_vfprintf)
897
898 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
899    HavePapi=YES
900 else
901    HavePapi=NO
902 fi
903 AC_SUBST(HavePapi)
904
905 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
906    test "$XsltprocCmd" = ""
907 then
908     BUILD_DOCBOOK_HTML=NO
909 else
910     BUILD_DOCBOOK_HTML=YES
911 fi
912 AC_SUBST(BUILD_DOCBOOK_HTML)
913
914 if test "$DblatexCmd" = ""
915 then
916     BUILD_DOCBOOK_PS=NO
917     BUILD_DOCBOOK_PDF=NO
918 else
919     BUILD_DOCBOOK_PS=YES
920     BUILD_DOCBOOK_PDF=YES
921 fi
922 AC_SUBST(BUILD_DOCBOOK_PS)
923 AC_SUBST(BUILD_DOCBOOK_PDF)
924
925 LIBRARY_VERSION(base)
926 LIBRARY_VERSION(Cabal)
927 LIBRARY_VERSION(ghc-prim)
928 LIBRARY_ghc_VERSION="$ProjectVersion"
929 AC_SUBST(LIBRARY_ghc_VERSION)
930
931 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
932    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
933 fi
934
935 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])
936 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
937 AC_OUTPUT
938
939 # We get caught by
940 #     http://savannah.gnu.org/bugs/index.php?1516
941 #     $(eval ...) inside conditionals causes errors
942 # with make 3.80, so warn the user if it looks like they're about to
943 # try to use it.
944 # We would use "grep -q" here, but Solaris's grep doesn't support it.
945 checkMake380() {
946     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
947     then
948         echo
949         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
950         echo "This version cannot be used to build GHC."
951         echo "Please use GNU make >= 3.81."
952     fi
953 }
954
955 checkMake380 make
956 checkMake380 gmake
957
958 echo ["
959 ----------------------------------------------------------------------
960 Configure completed successfully.
961
962    Building GHC version  : $ProjectVersion
963
964    Build platform        : $BuildPlatform
965    Host platform         : $HostPlatform
966    Target platform       : $TargetPlatform
967 "]
968
969 if test "$BootingFromHc" = "YES"; then
970 echo ["\
971    Bootstrapping from HC files.
972 "]
973 else
974 echo ["\
975    Bootstrapping using   : $WithGhc
976       which is version   : $GhcVersion
977 "]
978 fi
979
980 echo ["\
981    Using GCC             : $WhatGccIsCalled
982       which is version   : $GccVersion
983
984    ld       : $LdCmd
985    Happy    : $HappyCmd ($HappyVersion)
986    Alex     : $AlexCmd ($AlexVersion)
987    Python   : $PythonCmd
988    Perl     : $PerlCmd
989    dblatex  : $DblatexCmd
990    xsltproc : $XsltprocCmd"]
991
992 if test "$HSCOLOUR" = ""; then
993 echo ["
994    HsColour was not found; documentation will not contain source links
995 "]
996 else
997 echo ["\
998    HsColour : $HSCOLOUR
999 "]
1000 fi
1001
1002 echo ["\
1003    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1004    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
1005    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
1006
1007 echo ["----------------------------------------------------------------------
1008 "]
1009
1010 echo "\
1011 For a standard build of GHC (fully optimised with profiling), type (g)make.
1012
1013 To make changes to the default build configuration, copy the file
1014 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1015
1016 For more information on how to configure your GHC build, see
1017    http://hackage.haskell.org/trac/ghc/wiki/Building
1018 "