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