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