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