update copyright, cite realistic version numbers, fix a smattering of typos
[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 ** Which gcc to use?
337 dnl --------------------------------------------------------------
338 FIND_GCC()
339
340 dnl ** Which ld to use?
341 dnl --------------------------------------------------------------
342 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld])
343 LdCmd="$LD"
344 AC_SUBST([LdCmd])
345
346 dnl ** Which nm to use?
347 dnl --------------------------------------------------------------
348 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm])
349 NmCmd="$NM"
350 AC_SUBST([NmCmd])
351
352 dnl ** Mac OS X: explicit deployment target
353 dnl --------------------------------------------------------------
354 AC_ARG_WITH([macosx-deployment-target],
355 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
356         [Build for Mac OS VERSION and higher  (default= version of build host)])],
357 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
358  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
359    # ignore everywhere, but on Mac OS
360    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
361    FP_MACOSX_DEPLOYMENT_TARGET=none
362  fi],
363 [FP_MACOSX_DEPLOYMENT_TARGET=none]
364 )
365 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
366 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
367 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
368
369 dnl --------------------------------------------------------------
370 dnl End of configure script option section
371 dnl --------------------------------------------------------------
372
373
374 dnl --------------------------------------------------------------
375 dnl * General configuration checks
376 dnl --------------------------------------------------------------
377
378 dnl ** Can the unix package be built?
379 dnl --------------------------------------------------------------
380
381 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
382    GhcLibsWithUnix=NO
383 else
384    GhcLibsWithUnix=YES
385 fi
386 AC_SUBST([GhcLibsWithUnix])
387
388 dnl ** does #! work?
389 AC_SYS_INTERPRETER()
390
391 dnl ** look for `perl'
392 case $HostOS_CPP in
393 cygwin32|mingw32)
394     PerlCmd=$hardtop/inplace/perl/perl
395     ;;
396 *)
397     AC_PATH_PROG(PerlCmd,perl)
398     if test -z "$PerlCmd"
399     then
400         echo "You must install perl before you can continue"
401         echo "Perhaps it is already installed, but not in your PATH?"
402         exit 1
403     else
404         FPTOOLS_CHECK_PERL_VERSION
405     fi
406     ;;
407 esac
408
409 dnl ** does #! path/to/perl work? (sometimes it's too long...)
410 FPTOOLS_SHEBANG_PERL
411
412 dnl ** check for Python
413 AC_PATH_PROG(PythonCmd,python)
414
415 dnl ** look for GCC and find out which version
416 dnl     Figure out which C compiler to use.  Gcc is preferred.
417 dnl     If gcc, make sure it's at least 2.1
418 dnl
419 FP_GCC_VERSION
420
421 dnl ** look to see if we have a C compiler using an llvm back end.
422 dnl
423 FP_CC_LLVM_BACKEND
424
425 FP_PROG_LD_HashSize31
426 FP_PROG_LD_ReduceMemoryOverheads
427
428 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
429 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
430 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
431 # Stage 3 won't be supported by cross-compilation
432 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
433
434 FP_GCC_EXTRA_FLAGS
435
436 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
437 AC_PROG_CPP
438
439 AC_SUBST(CONF_CC_OPTS_STAGE0)
440 AC_SUBST(CONF_CC_OPTS_STAGE1)
441 AC_SUBST(CONF_CC_OPTS_STAGE2)
442 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
443 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
444 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
445 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
446 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
447 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
448 AC_SUBST(CONF_CPP_OPTS_STAGE0)
449 AC_SUBST(CONF_CPP_OPTS_STAGE1)
450 AC_SUBST(CONF_CPP_OPTS_STAGE2)
451
452 dnl ** Set up the variables for the platform in the settings file.
453 dnl May need to use gcc to find platform details.
454 dnl --------------------------------------------------------------
455 FPTOOLS_SET_HASKELL_PLATFORM_VARS
456
457 FP_SETTINGS
458
459 dnl ** figure out how to do context diffs
460 FP_PROG_CONTEXT_DIFF
461
462 dnl Let's make sure install-sh is executable here.  If we got it from
463 dnl a darcs repo, it might not be (see bug #978).
464 chmod +x install-sh
465 dnl ** figure out how to do a BSD-ish install
466 AC_PROG_INSTALL
467
468 dnl If you can run configure, you certainly have /bin/sh
469 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
470
471 dnl ** how to invoke `ar' and `ranlib'
472 FP_PROG_AR_SUPPORTS_ATFILE
473 FP_PROG_AR_NEEDS_RANLIB
474
475 dnl ** Check to see whether ln -s works
476 AC_PROG_LN_S
477
478
479 dnl ** Find the path to sed
480 AC_PATH_PROGS(SedCmd,gsed sed,sed)
481
482
483 dnl ** check for time command
484 AC_PATH_PROG(TimeCmd,time)
485
486 dnl ** check for tar
487 dnl   if GNU tar is named gtar, look for it first.
488 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
489
490 dnl ** check for patch
491 dnl if GNU patch is named gpatch, look for it first
492 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
493
494 dnl ** check for dtrace (currently only implemented for Mac OS X)
495 HaveDtrace=NO
496 AC_PATH_PROG(DtraceCmd,dtrace)
497 if test -n "$DtraceCmd"; then
498   if test "x$TargetOS_CPP-$TargetVendor_CPP" == "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" == "xsolaris2-unknown"; then
499     HaveDtrace=YES
500   fi
501 fi
502 AC_SUBST(HaveDtrace)
503
504 AC_PATH_PROG(HSCOLOUR,HsColour)
505 # HsColour is passed to Cabal, so we need a native path
506 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
507    test "${OSTYPE}"      != "msys"                  && \
508    test "${HSCOLOUR}"    != ""
509 then
510     # Canonicalise to <drive>:/path/to/gcc
511     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
512 fi
513
514 dnl ** check for DocBook toolchain
515 FP_CHECK_DOCBOOK_DTD
516 FP_DOCBOOK_XSL
517 FP_PROG_DBLATEX
518
519 dnl ** check for ghc-pkg command
520 FP_PROG_GHC_PKG
521
522 dnl ** check for installed happy binary + version
523 dnl    (don't do it if we're booting from .hc files though.)
524 if test "$BootingFromHc" = "NO"; then
525 FPTOOLS_HAPPY
526 fi;
527
528 dnl ** check for installed alex binary + version
529 dnl    (don't do it if we're booting from .hc files though.)
530 if test "$BootingFromHc" = "NO"; then
531 FPTOOLS_ALEX
532 fi;
533
534 dnl --------------------------------------------------
535 dnl ### program checking section ends here ###
536 dnl --------------------------------------------------
537
538 dnl --------------------------------------------------
539 dnl * Platform header file and syscall feature tests
540 dnl ### checking the state of the local header files and syscalls ###
541
542 dnl ** check for full ANSI header (.h) files
543 AC_HEADER_STDC
544
545 dnl ** Enable large file support.  NB. do this before testing the type of
546 dnl    off_t, because it will affect the result of that test.
547 AC_SYS_LARGEFILE
548
549 dnl ** check for specific header (.h) files that we are interested in
550 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])
551
552 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
553 AC_HEADER_TIME
554
555 dnl ** do we have long longs?
556 AC_CHECK_TYPES([long long])
557
558 dnl ** what are the sizes of various types
559 AC_CHECK_SIZEOF(char,               1)
560 AC_CHECK_SIZEOF(double,             8)
561 AC_CHECK_SIZEOF(float,              4)
562 AC_CHECK_SIZEOF(int,                4)
563 AC_CHECK_SIZEOF(long,               4)
564 if test "$ac_cv_type_long_long" = yes; then
565 AC_CHECK_SIZEOF(long long,          8)
566 fi
567 AC_CHECK_SIZEOF(short,              2)
568 AC_CHECK_SIZEOF(unsigned char,      1)
569 AC_CHECK_SIZEOF(unsigned int,       4)
570 AC_CHECK_SIZEOF(unsigned long,      4)
571 if test "$ac_cv_type_long_long" = yes; then
572 AC_CHECK_SIZEOF(unsigned long long, 8)
573 fi
574 AC_CHECK_SIZEOF(unsigned short,     2)
575 AC_CHECK_SIZEOF(void *,             4)
576
577 dnl for use in settings.in
578 WordSize=$ac_cv_sizeof_void_p
579 AC_SUBST(WordSize)
580
581 dnl ** what are alignment constraints on various types
582 FP_CHECK_ALIGNMENT(char)
583 FP_CHECK_ALIGNMENT(double)
584 FP_CHECK_ALIGNMENT(float)
585 FP_CHECK_ALIGNMENT(int)
586 FP_CHECK_ALIGNMENT(long)
587 if test "$ac_cv_type_long_long" = yes; then
588 FP_CHECK_ALIGNMENT(long long)
589 fi
590 FP_CHECK_ALIGNMENT(short)
591 FP_CHECK_ALIGNMENT(unsigned char)
592 FP_CHECK_ALIGNMENT(unsigned int)
593 FP_CHECK_ALIGNMENT(unsigned long)
594 if test "$ac_cv_type_long_long" = yes; then
595 FP_CHECK_ALIGNMENT(unsigned long long)
596 fi
597 FP_CHECK_ALIGNMENT(unsigned short)
598 FP_CHECK_ALIGNMENT(void *)
599
600 FP_CHECK_FUNC([WinExec],
601   [@%:@include <windows.h>], [WinExec("",0)])
602
603 FP_CHECK_FUNC([GetModuleFileName],
604   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
605
606 dnl ** check return type of signal handlers
607 dnl Foo: assumes we can use prototypes.
608 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
609 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
610 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
611 dnl #include <signal.h>
612 dnl #ifdef signal
613 dnl #undef signal
614 dnl #endif
615 dnl void (*signal (int, void (*)(int)))(int);
616 dnl ]],
617 dnl [[int i;]])],
618 dnl [ac_cv_type_signal_handler=void_int],
619 dnl [ac_cv_type_signal_handler=int_void])])
620 dnl if test "$ac_cv_type_signal_handler" = void_int; then
621 dnl AC_DEFINE(VOID_INT_SIGNALS)
622 dnl fi
623
624 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
625 AC_TYPE_SIGNAL
626 if test "$ac_cv_type_signal" = void; then
627   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).])
628 fi
629
630 dnl ** check for more functions
631 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
632 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
633
634 AC_TRY_RUN([
635 #include <sys/types.h>
636 #include <sys/time.h>
637 int main(void) {
638   struct itimerval tval;
639   tval.it_value.tv_sec = 1;
640   tval.it_value.tv_usec = 0;
641   tval.it_interval = tval.it_value;
642   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
643 }
644 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
645
646 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
647 dnl ** _POSIX_C_SOURCE is defined
648 AC_CHECK_DECLS([ctime_r], , ,
649 [#define _POSIX_SOURCE 1
650 #define _POSIX_C_SOURCE 199506L
651 #include <time.h>])
652
653 dnl ** check for mingwex library
654 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
655 AC_SUBST(HaveLibMingwEx)
656
657 if test $HaveLibMingwEx = YES ; then
658   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
659 fi
660
661 dnl ** check for math library
662 dnl    Keep that check as early as possible.
663 dnl    as we need to know whether we need libm
664 dnl    for math functions or not
665 dnl    (see http://hackage.haskell.org/trac/ghc/ticket/3730)
666 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
667 if test $HaveLibM = YES
668 then
669   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
670 fi
671
672 dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
673 dnl    the order of these tests matters: bfd needs libiberty
674 AC_CHECK_LIB(iberty, xmalloc)
675 AC_CHECK_LIB(bfd,    bfd_uncompress_section_contents)
676
677 dnl ################################################################
678 dnl Check for libraries
679 dnl ################################################################
680
681 dnl ** check whether we need -ldl to get dlopen()
682
683 AC_CHECK_LIB(dl, dlopen,
684     [HaveLibDL=YES
685      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
686      LIBS="$LIBS -ldl"],
687     [HaveLibDL=NO])
688 AC_SUBST(HaveLibDL)
689
690 dnl --------------------------------------------------
691 dnl * Miscellaneous feature tests
692 dnl --------------------------------------------------
693
694 dnl ** can we get alloca?
695 AC_FUNC_ALLOCA
696
697 dnl ** working vfork?
698 AC_FUNC_FORK
699
700 dnl ** determine whether or not const works
701 AC_C_CONST
702
703 dnl ** are we big endian?
704 AC_C_BIGENDIAN
705 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
706
707 dnl ** check for leading underscores in symbol names
708 FP_LEADING_UNDERSCORE
709
710 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
711 FP_PROG_LD_X
712 FP_PROG_LD_IS_GNU
713 FP_PROG_LD_BUILD_ID
714 FP_PROG_LD_NO_COMPACT_UNWIND
715
716 FP_VISIBILITY_HIDDEN
717
718 dnl ** check for librt
719 AC_CHECK_LIB(rt, clock_gettime)
720 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
721 FP_CHECK_TIMER_CREATE
722
723 dnl ** check for Apple's "interesting" long double compatibility scheme
724 AC_MSG_CHECKING(for printf\$LDBLStub)
725 AC_TRY_LINK_FUNC(printf\$LDBLStub,
726     [
727         AC_MSG_RESULT(yes)
728         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
729             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
730     ],
731     [
732         AC_MSG_RESULT(no)
733         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
734             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
735     ])
736
737 dnl ** check for eventfd which is needed by the I/O manager
738 AC_CHECK_HEADERS([sys/eventfd.h])
739 AC_CHECK_FUNCS([eventfd])
740
741 # test for GTK+
742 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
743 if test -n "$GTK_CONFIG"; then
744   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
745     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
746   else
747     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
748     GTK_CONFIG=
749   fi
750 fi
751 AC_SUBST([GTK_CONFIG])
752
753 # checking for PAPI
754 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
755 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
756 AC_SUBST(HavePapiLib)
757 AC_SUBST(HavePapiHeader)
758
759 AC_CHECK_FUNCS(__mingw_vfprintf)
760
761 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
762    HavePapi=YES
763 else
764    HavePapi=NO
765 fi
766 AC_SUBST(HavePapi)
767
768 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
769    test "$XsltprocCmd" = ""
770 then
771     BUILD_DOCBOOK_HTML=NO
772 else
773     BUILD_DOCBOOK_HTML=YES
774 fi
775 AC_SUBST(BUILD_DOCBOOK_HTML)
776
777 if test "$DblatexCmd" = ""
778 then
779     BUILD_DOCBOOK_PS=NO
780     BUILD_DOCBOOK_PDF=NO
781 else
782     BUILD_DOCBOOK_PS=YES
783     BUILD_DOCBOOK_PDF=YES
784 fi
785 AC_SUBST(BUILD_DOCBOOK_PS)
786 AC_SUBST(BUILD_DOCBOOK_PDF)
787
788 LIBRARY_VERSION(base)
789 LIBRARY_VERSION(Cabal, Cabal/Cabal)
790 LIBRARY_VERSION(ghc-prim)
791 LIBRARY_ghc_VERSION="$ProjectVersion"
792 AC_SUBST(LIBRARY_ghc_VERSION)
793
794 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
795    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
796 fi
797
798 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])
799 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
800 AC_OUTPUT
801
802 # We got caught by
803 #     http://savannah.gnu.org/bugs/index.php?1516
804 #     $(eval ...) inside conditionals causes errors
805 # with make 3.80, so warn the user if it looks like they're about to
806 # try to use it.
807 # We would use "grep -q" here, but Solaris's grep doesn't support it.
808 checkMake380() {
809     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
810     then
811         echo
812         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
813         echo "This version cannot be used to build GHC."
814         echo "Please use GNU make >= 3.81."
815     fi
816 }
817
818 checkMake380 make
819 checkMake380 gmake
820
821 echo ["
822 ----------------------------------------------------------------------
823 Configure completed successfully.
824
825    Building GHC version  : $ProjectVersion
826
827    Build platform        : $BuildPlatform
828    Host platform         : $HostPlatform
829    Target platform       : $TargetPlatform
830 "]
831
832 if test "$BootingFromHc" = "YES"; then
833 echo ["\
834    Bootstrapping from HC files.
835 "]
836 else
837 echo ["\
838    Bootstrapping using   : $WithGhc
839       which is version   : $GhcVersion
840 "]
841 fi
842
843 echo ["\
844    Using GCC             : $WhatGccIsCalled
845       which is version   : $GccVersion
846
847    ld       : $LdCmd
848    Happy    : $HappyCmd ($HappyVersion)
849    Alex     : $AlexCmd ($AlexVersion)
850    Python   : $PythonCmd
851    Perl     : $PerlCmd
852    dblatex  : $DblatexCmd
853    xsltproc : $XsltprocCmd"]
854
855 if test "$HSCOLOUR" = ""; then
856 echo ["
857    HsColour was not found; documentation will not contain source links
858 "]
859 else
860 echo ["\
861    HsColour : $HSCOLOUR
862 "]
863 fi
864
865 echo ["\
866    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
867    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
868    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
869
870 echo ["----------------------------------------------------------------------
871 "]
872
873 echo "\
874 For a standard build of GHC (fully optimised with profiling), type (g)make.
875
876 To make changes to the default build configuration, copy the file
877 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
878
879 For more information on how to configure your GHC build, see
880    http://hackage.haskell.org/trac/ghc/wiki/Building
881 "