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