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