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