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