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