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