Change how we find the host/build/target platforms
[ghc-hetmet.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], [6.11], [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 'sh boot'?"
31    exit 1
32 fi
33
34 AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
35
36 FP_SETUP_PROJECT_VERSION
37
38 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
39 AC_SUBST([release], [1])
40
41 # First off, a distrib sanity check..
42 AC_CONFIG_SRCDIR([mk/config.mk.in])
43
44 dnl * We require autoconf version 2.52
45 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
46 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
47 AC_PREREQ([2.52])
48
49 # -------------------------------------------------------------------------
50 # Prepare to generate the following header files
51 #
52 #
53 AC_CONFIG_HEADER(mk/config.h)
54
55 # No, semi-sadly, we don't do `--srcdir'...
56 if test x"$srcdir" != 'x.' ; then
57     echo "This configuration does not support the \`--srcdir' option.."
58     exit 1
59 fi
60
61 dnl--------------------------------------------------------------------
62 dnl * Deal with arguments telling us gmp is somewhere odd
63 dnl--------------------------------------------------------------------
64
65 FP_ARG_GMP
66
67 GMP_INCLUDE_DIRS=
68 GMP_LIB_DIRS=
69 if test "x$gmp_libraries" != "xNONE"; then
70   LDFLAGS="-L$gmp_libraries $LDFLAGS"
71   GMP_LIB_DIRS=$gmp_libraries
72 fi
73 if test "x$gmp_includes" != "xNONE"; then
74   CPPFLAGS="-I$gmp_includes $CPPFLAGS"
75   GMP_INCLUDE_DIRS=$gmp_includes
76 fi
77 AC_SUBST(GMP_INCLUDE_DIRS)
78 AC_SUBST(GMP_LIB_DIRS)
79
80 dnl --------------------------------------------------------------
81 dnl * Project specific configuration options
82 dnl --------------------------------------------------------------
83 dnl What follows is a bunch of options that can either be configured
84 dnl through command line options to the configure script or by
85 dnl supplying defns in the build tree's mk/build.mk. Having the option to
86 dnl use either is considered a Feature.
87
88 dnl ** What command to use to compile compiler sources ?
89 dnl --------------------------------------------------------------
90
91 AC_ARG_WITH([ghc],
92 [AC_HELP_STRING([--with-ghc=ARG],
93   [Use ARG as the path to GHC  [default=autodetect]])],
94   [WithGhc="$withval"],
95   [if test "$GHC" = ""; then
96     AC_PATH_PROG([GHC], [ghc])
97   fi
98   WithGhc="$GHC"])
99
100 dnl ** Booting from unregisterised .hc files?
101 dnl --------------------------------------------------------------
102 AC_ARG_ENABLE(hc-boot-unregisterised,
103 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
104 [ With --enable-hc-boot, treat the intermediate .hc files as
105  unregisterised rather than registerised code.
106  (This option is mostly of interest to porters.) [default=no]])],
107 [ if test x"$enableval" = x"yes"; then
108         BootingFromUnregisterisedHc=YES
109   else
110         BootingFromUnregisterisedHc=NO
111   fi
112 ],
113 [BootingFromUnregisterisedHc=NO]
114 )
115 AC_SUBST(BootingFromUnregisterisedHc)
116
117 if test "$BootingFromHc" = "NO"; then
118 if test "$BootingFromUnregisterisedHc" = "YES"; then
119 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
120 fi;
121 fi;
122
123 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
124 if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then
125   if test "$WithGhc" = ""; then
126      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
127   fi
128   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.8],
129     [AC_MSG_ERROR([GHC version 6.8 or later is required to compile GHC.])])dnl
130
131   if test `expr $GhcMinVersion % 2` = "1"; then
132      echo $EnableBootstrapWithDevelSnaphost
133      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
134         AC_MSG_ERROR([
135      $WithGhc is a development snapshot of GHC, version $GhcVersion.
136      Bootstrapping using this version of GHC is not supported, and may not
137      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
138      or --with-ghc to specify a different GHC to use.])
139      fi
140   fi
141 fi;
142
143 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
144 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
145                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
146         EnableBootstrapWithDevelSnaphost=YES,
147         EnableBootstrapWithDevelSnaphost=NO
148 )
149
150 if test "$WithGhc" != ""; then
151   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
152
153   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
154      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
155   fi
156
157   AC_SUBST(GhcVersion)dnl
158   AC_SUBST(GhcMajVersion)dnl
159   AC_SUBST(GhcMinVersion)dnl
160   AC_SUBST(GhcPatchLevel)dnl
161   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
162   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
163   if test $GhcCanonVersion -ge 607; then ghc_ge_607=YES; else ghc_ge_607=NO; fi
164   if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi
165   AC_SUBST(ghc_ge_607)dnl
166   AC_SUBST(ghc_ge_609)dnl
167 fi
168
169 # GHC is passed to Cabal, so we need a native path
170 if test "${WithGhc}" != ""
171 then
172     ghc_host=`${WithGhc} +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'`
173
174     if test "$ghc_host" = "i386-unknown-mingw32"
175     then
176         if test "${OSTYPE}" = "msys"
177         then
178             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
179         else
180             # Canonicalise to <drive>:/path/to/ghc
181             WithGhc=`cygpath -m ${WithGhc}`
182         fi
183         echo "GHC path canonicalised to: ${WithGhc}"
184     fi
185 fi
186 AC_SUBST([WithGhc])
187
188 dnl--------------------------------------------------------------------
189 dnl * Choose host(/target/build) platform
190 dnl--------------------------------------------------------------------
191 dnl We don't use the standard autoconf macros for this, but instead
192 dnl ask the bootstrapping compiler what platform it is for
193
194 dnl Guess host/target/build platform(s) if necessary.
195 m4_divert_once([HELP_CANON],
196 [[
197 System types:
198   --build=BUILD     configure for building on BUILD [guessed]
199   --host=HOST       cross-compile to build programs to run on HOST [guessed]
200   --target=TARGET   configure for building compilers for TARGET [guessed]]])dnl
201
202 if test "$build" = ""
203 then
204     if test "${WithGhc}" != ""
205     then
206         build=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//'`
207         echo "Build platform inferred as: $build"
208     else
209         echo "Can't work out build platform"
210         exit 1
211     fi
212 fi
213
214 if test "$host" = ""
215 then
216     if test "${WithGhc}" != ""
217     then
218         host=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//'`
219         echo "Host platform inferred as: $host"
220     else
221         echo "Can't work out host platform"
222         exit 1
223     fi
224 fi
225
226 if test "$target" = ""
227 then
228     if test "${WithGhc}" != ""
229     then
230         target=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//'`
231         echo "Target platform inferred as: $target"
232     else
233         echo "Can't work out target platform"
234         exit 1
235     fi
236 fi
237
238 exeext=''
239 soext='.so'
240 case $HostPlatform in
241 *-unknown-cygwin32)
242     AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
243     AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
244     exit 1
245     ;;
246 *-unknown-mingw32)
247     exeext='.exe'
248     soext='.dll'
249     ;;
250 i386-apple-darwin|powerpc-apple-darwin)
251     soext='.dylib'
252     ;;
253 x86_64-apple-darwin)
254     soext='.dylib'
255     CFLAGS="$CFLAGS -m64"
256     LDFLAGS="$LDFLAGS -m64"
257     ;;
258 esac
259
260 BuildPlatform=$build
261 BuildPlatform_CPP=`echo "$build" | sed 's/\.\|-/_/g'`
262 BuildArch_CPP=`echo "$build" | sed 's/-.*//' | sed 's/\.\|-/_/g'`
263 BuildVendor_CPP=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/' | sed 's/\.\|-/_/g'`
264 BuildOS_CPP=`echo "$build" | sed 's/.*-//' | sed 's/\.\|-/_/g'`
265
266 HostPlatform=$host
267 HostPlatform_CPP=`echo "$host" | sed 's/\.\|-/_/g'`
268 HostArch_CPP=`echo "$host" | sed 's/-.*//' | sed 's/\.\|-/_/g'`
269 HostVendor_CPP=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/' | sed 's/\.\|-/_/g'`
270 HostOS_CPP=`echo "$host" | sed 's/.*-//' | sed 's/\.\|-/_/g'`
271
272 TargetPlatform=$target
273 TargetPlatform_CPP=`echo "$target" | sed 's/\.\|-/_/g'`
274 TargetArch_CPP=`echo "$target" | sed 's/-.*//' | sed 's/\.\|-/_/g'`
275 TargetVendor_CPP=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/' | sed 's/\.\|-/_/g'`
276 TargetOS_CPP=`echo "$target" | sed 's/.*-//' | sed 's/\.\|-/_/g'`
277
278 AC_SUBST(BuildPlatform)
279 AC_SUBST(HostPlatform)
280 AC_SUBST(TargetPlatform)
281 AC_SUBST(HostPlatform_CPP)
282 AC_SUBST(BuildPlatform_CPP)
283 AC_SUBST(TargetPlatform_CPP)
284
285 AC_SUBST(HostArch_CPP)
286 AC_SUBST(BuildArch_CPP)
287 AC_SUBST(TargetArch_CPP)
288
289 AC_SUBST(HostOS_CPP)
290 AC_SUBST(BuildOS_CPP)
291 AC_SUBST(TargetOS_CPP)
292
293 AC_SUBST(HostVendor_CPP)
294 AC_SUBST(BuildVendor_CPP)
295 AC_SUBST(TargetVendor_CPP)
296
297 AC_SUBST(exeext)
298 AC_SUBST(soext)
299
300 AC_ARG_WITH(hc,
301 [AC_HELP_STRING([--with-hc=ARG],
302         [Use ARG as the path to the compiler for compiling ordinary
303          Haskell code  (default= value of --with-ghc)])],
304 [WithHc="$withval"],
305 [WithHc=$WithGhc]
306 )
307 AC_SUBST(WithHc)
308
309 AC_PATH_PROGS(NHC,nhc nhc98)
310 AC_PATH_PROG(HBC,hbc)
311
312 dnl ** Which gcc to use?
313 dnl --------------------------------------------------------------
314 AC_ARG_WITH(gcc,
315 [AC_HELP_STRING([--with-gcc=ARG],
316         [Use ARG as the path to GCC  [default=autodetect]])],
317 [WhatGccIsCalled="$withval"
318  if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
319     test "${OSTYPE}"      != "msys"                  && \
320     test "${withval}"     != ""
321  then
322      # Canonicalise to <drive>:/path/to/gcc
323      withval=`cygpath -m ${withval}`
324  fi;
325  CC="$withval"
326  export CC
327  ],
328 [WhatGccIsCalled="gcc"]
329 )
330 AC_SUBST(WhatGccIsCalled)
331
332 dnl ** Which ld to use?
333 dnl --------------------------------------------------------------
334 AC_ARG_WITH(ld,
335 [AC_HELP_STRING([--with-ld=ARG],
336         [Use ARG as the path to LD  [default=autodetect]])],
337 [if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
338     test "${OSTYPE}"      != "msys"                  && \
339     test "${withval}"     != ""
340  then
341      # Canonicalise to <drive>:/path/to/ld
342      withval=`cygpath -m ${withval}`
343  fi;
344  LD=$withval
345  FP_PROG_LD([$LD])
346  ],
347  [FP_PROG_LD()]
348 )
349
350 dnl ** Build shared and/or static libs?
351 dnl --------------------------------------------------------------
352 AC_ARG_ENABLE(shared,
353 [AC_HELP_STRING([--enable-shared],
354 [Build shared libraries, if available (EXPERIMENTAL, non-working). [default=no]])],
355 [ if test x"$enableval" = x"yes"; then
356         AC_MSG_WARN([--enable-shared is experimental and not fully supported at this time])
357         BuildSharedLibs=YES
358   else
359         BuildSharedLibs=NO
360   fi
361 ],
362 [BuildSharedLibs=NO]
363 )
364 AC_SUBST(BuildSharedLibs)
365
366 # ToDo later:
367 # AC_ARG_ENABLE(static,
368 # [AC_HELP_STRING([--enable-static],
369 # [Build static libraries. [default=yes]])],
370 # [ if test x"$enableval" = x"yes"; then
371 #         BuildStaticLibs=YES
372 #   else
373 #         BuildStaticLibs=NO
374 #   fi
375 # ],
376 # [BuildStaticLibs=YES]
377 # )
378 # AC_SUBST(BuildStaticLibs)
379
380 dnl ** Booting from .hc files?
381 dnl --------------------------------------------------------------
382 AC_ARG_ENABLE(hc-boot,
383 [AC_HELP_STRING([--enable-hc-boot],
384 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
385  (This option is mostly of interest to porters.) [default=no]])],
386 [ if test x"$enableval" = x"yes"; then
387         BootingFromHc=YES
388   else
389         BootingFromHc=NO
390   fi
391 ],
392 [BootingFromHc=NO]
393 )
394 AC_SUBST(BootingFromHc)
395
396 # This uses GHC, so put it after the "GHC is required" check above:
397 FP_FIND_ROOT
398
399 dnl ** Enable the construction of Win32 DLLs?
400 dnl --------------------------------------------------------------
401 dnl
402 dnl [ The ability to build the RTS and libraries as separate DLLs used
403 dnl   to be supported, but isn't currently (updates to the RTS, compiler
404 dnl   and build system would be required to bring it back again.)
405 dnl   Hence, exposing it as an option is false advertisement, so better
406 dnl   disable it to avoid confusion (but leave it commented-out rather
407 dnl   than removed in order to remind ourselves to bring back the
408 dnl   feature at some stage.) ]
409 dnl
410 dnl AC_ARG_ENABLE(win32-dlls,
411 dnl [  --enable-win32-dlls
412 dnl         If on a Win32 platform running mingw32/cygwin, enable the
413 dnl         construction of DLLs containing ghc-compiled code.
414 dnl ],
415 dnl [
416 dnl case $HostOS_CPP in
417 dnl cygwin32) ;;
418 dnl mingw32)  ;;
419 dnl *)    echo "Unrecognised win32 platform: $HostPlatform"
420 dnl       exit 1
421 dnl       ;;
422 dnl esac
423 dnl EnableWin32DLLs=YES
424 dnl ],
425 dnl [EnableWin32DLLs=NO]
426 dnl )
427 dnl AC_SUBST(EnableWin32DLLs)
428 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
429 dnl  AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
430 dnl fi
431
432 dnl ** Mac OS X: explicit deployment target
433 dnl --------------------------------------------------------------
434 AC_ARG_WITH([macosx-deployment-target],
435 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
436         [Build for Mac OS VERSION and higher  (default= version of build host)])],
437 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
438  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
439    # ignore everywhere, but on Mac OS
440    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
441    FP_MACOSX_DEPLOYMENT_TARGET=none
442  fi],
443 [FP_MACOSX_DEPLOYMENT_TARGET=none]
444 )
445 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
446 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
447 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
448
449 dnl --------------------------------------------------------------
450 dnl End of configure script option section
451 dnl --------------------------------------------------------------
452
453
454 dnl --------------------------------------------------------------
455 dnl * General configuration checks
456 dnl --------------------------------------------------------------
457
458 dnl ** Can the unix package be built?
459 dnl --------------------------------------------------------------
460
461 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
462    GhcLibsWithUnix=NO
463 else
464    GhcLibsWithUnix=YES
465 fi
466 AC_SUBST([GhcLibsWithUnix])
467
468 dnl ** does #! work?
469 AC_SYS_INTERPRETER()
470
471 dnl ** look for `perl', but only in /bin on Windows
472 case $HostOS_CPP in
473 cygwin32|mingw32)
474       AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
475       if test -z "$PerlCmd"; then
476          echo "You must install the version of Perl shipped with GHC"
477          echo "(or a compatible one) in /bin."
478          exit 1
479       fi
480    ;;
481 *)
482    AC_PATH_PROG(PerlCmd,perl)
483    if test -z "$PerlCmd"; then
484       echo "You must install perl before you can continue"
485       echo "Perhaps it is already installed, but not in your PATH?"
486       exit 1
487    else
488    FPTOOLS_CHECK_PERL_VERSION
489    fi
490    ;;
491 esac
492
493 dnl ** does #! path/to/perl work? (sometimes it's too long...)
494 FPTOOLS_SHEBANG_PERL
495
496 dnl ** check for Python
497 AC_PATH_PROG(PythonCmd,python)
498
499 dnl ** look for GCC and find out which version
500 dnl     Figure out which C compiler to use.  Gcc is preferred.
501 dnl     If gcc, make sure it's at least 2.1
502 dnl
503 FP_HAVE_GCC
504 FP_MINGW_GCC
505 FP_GCC_EXTRA_FLAGS
506
507 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
508 AC_PROG_CPP
509
510 dnl ** Without optimization some INLINE trickery fails for GHCi
511 SRC_CC_OPTS="-O"
512
513 SRC_CC_OPTS="$SRC_CC_OPTS $CFLAGS"
514 SRC_LD_OPTS="$SRC_LD_OPTS $LDFLAGS"
515
516 AC_SUBST(SRC_CC_OPTS)
517 AC_SUBST(SRC_LD_OPTS)
518
519 dnl ** figure out how to do context diffs
520 FP_PROG_CONTEXT_DIFF
521
522 dnl ** Find find command (for Win32's benefit)
523 FP_PROG_FIND
524
525 dnl ** Find sort command (for the benefit of Win32 environs)
526 FP_PROG_SORT
527
528 dnl Let's make sure install-sh is executable here.  If we got it from
529 dnl a darcs repo, it might not be (see bug #978).
530 chmod +x install-sh
531 dnl ** figure out how to do a BSD-ish install
532 AC_PROG_INSTALL
533
534 dnl If you can run configure, you certainly have /bin/sh
535 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
536
537 dnl ** how to invoke `ar' and `ranlib'
538 FP_PROG_AR_NEEDS_RANLIB
539 FP_PROG_AR_SUPPORTS_INPUT
540
541 dnl ** Check to see whether ln -s works
542 AC_PROG_LN_S
543
544
545 dnl ** Find the path to sed
546 AC_PATH_PROG(SedCmd,sed)
547
548
549 dnl ** check for time command
550 AC_PATH_PROG(TimeCmd,time)
551
552 dnl ** check for tar
553 dnl   if GNU tar is named gtar, look for it first.
554 AC_PATH_PROGS(TarCmd,gtar tar,tar)
555
556 dnl ** check for patch
557 dnl if GNU patch is named gpatch, look for it first
558 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
559
560 AC_PATH_PROG(HSCOLOUR,HsColour)
561 # HsColour is passed to Cabal, so we need a native path
562 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
563    test "${OSTYPE}"      != "msys"                  && \
564    test "${HSCOLOUR}"    != ""
565 then
566     # Canonicalise to <drive>:/path/to/gcc
567     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
568 fi
569
570 dnl ** check for DocBook toolchain
571 FP_CHECK_DOCBOOK_DTD
572 FP_DIR_DOCBOOK_XSL([/usr/share/xml/docbook/stylesheet/nwalsh/current /usr/share/xml/docbook/stylesheet/nwalsh /usr/share/xml/docbook/xsl-stylesheets* /usr/share/sgml/docbook/docbook-xsl-stylesheets* /usr/share/sgml/docbook/xsl-stylesheets* /opt/kde?/share/apps/ksgmltools2/docbook/xsl /usr/share/docbook-xsl /usr/share/sgml/docbkxsl /usr/local/share/xsl/docbook /sw/share/xml/xsl/docbook-xsl /opt/local/share/xsl/docbook-xsl])
573
574 FP_PROG_DBLATEX
575
576 FP_PROG_HSTAGS
577
578 dnl ** check for ghc-pkg command
579 FP_PROG_GHC_PKG
580
581 dnl ** check for installed happy binary + version
582 dnl    (don't do it if we're booting from .hc files though.)
583 if test "$BootingFromHc" = "NO"; then
584 FPTOOLS_HAPPY
585 fi;
586
587 dnl ** check for installed alex binary + version
588 dnl    (don't do it if we're booting from .hc files though.)
589 if test "$BootingFromHc" = "NO"; then
590 FPTOOLS_ALEX
591 fi;
592
593 dnl Check we have an acceptable version of windres
594 FPTOOLS_WINDRES
595
596 dnl --------------------------------------------------
597 dnl ### program checking section ends here ###
598 dnl --------------------------------------------------
599
600 dnl --------------------------------------------------
601 dnl * Platform header file and syscall feature tests
602 dnl ### checking the state of the local header files and syscalls ###
603
604 dnl ** check for full ANSI header (.h) files
605 AC_HEADER_STDC
606
607 dnl ** Enable large file support.  NB. do this before testing the type of
608 dnl    off_t, because it will affect the result of that test.
609 AC_SYS_LARGEFILE
610
611 dnl ** check for specific header (.h) files that we are interested in
612 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/mman.h sys/resource.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])
613
614 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
615 AC_HEADER_TIME
616
617 dnl ** do we have long longs?
618 AC_CHECK_TYPES([long long])
619
620 dnl ** what are the sizes of various types
621 AC_CHECK_SIZEOF(char,               1)
622 AC_CHECK_SIZEOF(double,             8)
623 AC_CHECK_SIZEOF(float,              4)
624 AC_CHECK_SIZEOF(int,                4)
625 AC_CHECK_SIZEOF(long,               4)
626 if test "$ac_cv_type_long_long" = yes; then
627 AC_CHECK_SIZEOF(long long,          8)
628 fi
629 AC_CHECK_SIZEOF(short,              2)
630 AC_CHECK_SIZEOF(unsigned char,      1)
631 AC_CHECK_SIZEOF(unsigned int,       4)
632 AC_CHECK_SIZEOF(unsigned long,      4)
633 if test "$ac_cv_type_long_long" = yes; then
634 AC_CHECK_SIZEOF(unsigned long long, 8)
635 fi
636 AC_CHECK_SIZEOF(unsigned short,     2)
637 AC_CHECK_SIZEOF(void *,             4)
638
639 dnl ** what are alignment constraints on various types
640 FP_CHECK_ALIGNMENT(char)
641 FP_CHECK_ALIGNMENT(double)
642 FP_CHECK_ALIGNMENT(float)
643 FP_CHECK_ALIGNMENT(int)
644 FP_CHECK_ALIGNMENT(long)
645 if test "$ac_cv_type_long_long" = yes; then
646 FP_CHECK_ALIGNMENT(long long)
647 fi
648 FP_CHECK_ALIGNMENT(short)
649 FP_CHECK_ALIGNMENT(unsigned char)
650 FP_CHECK_ALIGNMENT(unsigned int)
651 FP_CHECK_ALIGNMENT(unsigned long)
652 if test "$ac_cv_type_long_long" = yes; then
653 FP_CHECK_ALIGNMENT(unsigned long long)
654 fi
655 FP_CHECK_ALIGNMENT(unsigned short)
656 FP_CHECK_ALIGNMENT(void *)
657
658 FP_CHECK_FUNC([WinExec],
659   [@%:@include <windows.h>], [WinExec("",0)])
660
661 FP_CHECK_FUNC([GetModuleFileName],
662   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
663
664 dnl ** check return type of signal handlers
665 dnl Foo: assumes we can use prototypes.
666 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
667 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
668 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
669 dnl #include <signal.h>
670 dnl #ifdef signal
671 dnl #undef signal
672 dnl #endif
673 dnl void (*signal (int, void (*)(int)))(int);
674 dnl ]],
675 dnl [[int i;]])],
676 dnl [ac_cv_type_signal_handler=void_int],
677 dnl [ac_cv_type_signal_handler=int_void])])
678 dnl if test "$ac_cv_type_signal_handler" = void_int; then
679 dnl AC_DEFINE(VOID_INT_SIGNALS)
680 dnl fi
681
682 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
683 AC_TYPE_SIGNAL
684 if test "$ac_cv_type_signal" = void; then
685   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).])
686 fi
687
688 dnl ** check for more functions
689 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
690 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r, sched_setaffinity])
691
692 AC_TRY_RUN([
693 #include <sys/types.h>
694 #include <sys/time.h>
695 int main(void) {
696   struct itimerval tval;
697   tval.it_value.tv_sec = 1;
698   tval.it_value.tv_usec = 0;
699   tval.it_interval = tval.it_value;
700   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
701 }
702 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
703
704 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
705 dnl ** _POSIX_C_SOURCE is defined
706 AC_CHECK_DECLS([ctime_r], , ,
707 [#define _POSIX_SOURCE 1
708 #define _POSIX_C_SOURCE 199506L
709 #include <time.h>])
710
711 dnl ** For ghc/rts/gmp:
712 AC_CHECK_FUNCS([getpagesize])
713
714 dnl ** check whether this machine has gmp3 installed
715 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
716   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
717     HaveLibGmp=NO; LibGmp=not-installed))
718   if test $HaveLibGmp = YES; then
719     AC_DEFINE([HAVE_LIB_GMP], [1], [Define to 1 if GMP library is installed.])
720   fi;
721 AC_SUBST(HaveLibGmp)
722 AC_SUBST(LibGmp)
723
724 dnl ** (Mac OS X only: check for GMP.framework)
725 HaveFrameworkGMP=NO
726 case $HostPlatform in
727 *-apple-darwin)
728     AC_MSG_CHECKING([for GMP.framework])
729     save_libs="$LIBS"
730     LIBS="-framework GMP"
731     AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,)
732     if test $HaveFrameworkGMP = YES; then
733       AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).])
734     fi;
735     LIBS="$save_libs"
736     AC_MSG_RESULT([$HaveFrameworkGMP])
737     ;;
738 esac
739 AC_SUBST(HaveFrameworkGMP)
740
741 dnl ** check for mingwex library
742 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
743 AC_SUBST(HaveLibMingwEx)
744
745 if test $HaveLibMingwEx = YES ; then
746   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
747 fi
748
749 if test "$HaveLibGmp" = "NO"; then
750 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
751 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
752 fi;
753 fi;
754
755 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
756 dnl    the order of these tests matters: bfd needs liberty
757 AC_CHECK_LIB(iberty, xmalloc)
758 AC_CHECK_LIB(bfd,    bfd_init)
759
760 dnl ** check for math library
761 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
762 if test x"$fp_libm_not_needed" = xdunno; then
763    AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
764 fi
765 AC_SUBST([LIBM])
766
767 dnl ################################################################
768 dnl Check for libraries
769 dnl ################################################################
770
771 dnl ** check whether we need -ldl to get dlopen()
772
773 AC_CHECK_LIB(dl, dlopen,
774     [HaveLibDL=YES
775      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
776      LIBS="$LIBS -ldl"],
777     [HaveLibDL=NO])
778 AC_SUBST(HaveLibDL)
779
780 dnl --------------------------------------------------
781 dnl * Miscellaneous feature tests
782 dnl --------------------------------------------------
783
784 dnl ** can we get alloca?
785 AC_FUNC_ALLOCA
786
787 dnl ** Working vfork?
788 AC_FUNC_FORK
789
790 dnl ** determine whether or not const works
791 AC_C_CONST
792
793 dnl ** are we big endian?
794 AC_C_BIGENDIAN
795 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
796
797 dnl ** check for leading underscores in symbol names
798 FP_LEADING_UNDERSCORE
799
800 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
801 FP_PROG_LD_X
802 FP_PROG_LD_IS_GNU
803
804 dnl ** check for Apple-style dead-stripping support
805 dnl    (.subsections-via-symbols assembler directive)
806
807
808 AC_MSG_CHECKING(for .subsections_via_symbols)
809 AC_COMPILE_IFELSE(
810     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
811     [AC_MSG_RESULT(yes)
812      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
813                [Define to 1 if Apple-style dead-stripping is supported.])
814     ],
815     [AC_MSG_RESULT(no)])
816
817 dnl *** check for GNU non-executable stack note support (ELF only)
818 dnl     (.section .note.GNU-stack,"",@progbits)
819
820 AC_MSG_CHECKING(for GNU non-executable stack support)
821 AC_COMPILE_IFELSE(
822     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
823     [AC_MSG_RESULT(yes)
824      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
825                [Define to 1 if GNU non-executable stack notes are supported.])
826     ],
827     [AC_MSG_RESULT(no)])
828
829 dnl ** check for librt
830 AC_CHECK_LIB(rt, clock_gettime)
831 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
832 FP_CHECK_TIMER_CREATE
833
834 dnl ** check for Apple's "interesting" long double compatibility scheme
835 AC_MSG_CHECKING(for printf\$LDBLStub)
836 AC_TRY_LINK_FUNC(printf\$LDBLStub,
837     [
838         AC_MSG_RESULT(yes)
839         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
840             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
841     ],
842     [
843         AC_MSG_RESULT(no)
844         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
845             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
846     ])
847
848 # test for GTK+
849 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
850 if test -n "$GTK_CONFIG"; then
851   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
852     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
853   else
854     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
855     GTK_CONFIG=
856   fi
857 fi
858 AC_SUBST([GTK_CONFIG])
859
860 #Checking for PAPI
861 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
862 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
863 AC_SUBST(HavePapiLib)
864 AC_SUBST(HavePapiHeader)
865
866 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
867    HavePapi=YES
868 else
869    HavePapi=NO
870 fi
871 AC_SUBST(HavePapi)
872
873 if test "$DIR_DOCBOOK_XSL" = "" ||
874    test "$XsltprocCmd" = ""
875 then
876     BUILD_DOCBOOK_HTML=NO
877 else
878     BUILD_DOCBOOK_HTML=YES
879 fi
880 AC_SUBST(BUILD_DOCBOOK_HTML)
881
882 if test "$DblatexCmd" = ""
883 then
884     BUILD_DOCBOOK_PS=NO
885     BUILD_DOCBOOK_PDF=NO
886 else
887     BUILD_DOCBOOK_PS=YES
888     BUILD_DOCBOOK_PDF=YES
889 fi
890 AC_SUBST(BUILD_DOCBOOK_PS)
891 AC_SUBST(BUILD_DOCBOOK_PDF)
892
893 AC_CONFIG_FILES([mk/config.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml])
894 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
895 AC_OUTPUT
896
897 # We get caught by
898 #     http://savannah.gnu.org/bugs/index.php?1516
899 #     $(eval ...) inside conditionals causes errors
900 # with make 3.80, so warn the user if it looks like they're about to
901 # try to use it.
902 # We would use "grep -q" here, but Solaris's grep doesn't support it.
903 checkMake380() {
904     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
905     then
906         echo
907         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
908         echo "This version cannot be used to build GHC."
909         echo "Please use GNU make >= 3.81."
910     fi
911 }
912
913 checkMake380 make
914 checkMake380 gmake
915
916 echo ["
917 ----------------------------------------------------------------------
918 Configure completed successfully.
919
920    Building GHC version  : $ProjectVersion
921
922    Build platform        : $BuildPlatform
923    Host platform         : $HostPlatform
924    Target platform       : $TargetPlatform
925 "]
926
927 if test "$BootingFromHc" = "YES"; then
928 echo ["\
929    Bootstrapping from HC files.
930 "]
931 else
932 echo ["\
933    Bootstrapping using   : $WithGhc
934       which is version   : $GhcVersion
935 "]
936 fi
937
938 echo ["\
939    Using GCC             : $WhatGccIsCalled
940       which is version   : $GccVersion
941
942    ld       : $LdCmd
943    Happy    : $HappyCmd
944    Alex     : $AlexCmd
945    Python   : $PythonCmd
946    Perl     : $PerlCmd"]
947
948 if test "$HSCOLOUR" = ""; then
949 echo ["
950    HsColour was not found; documentation will not contain source links
951 "]
952 else
953 echo ["\
954    HsColour : $HSCOLOUR
955 "]
956 fi
957
958 echo "Building DocBook HTML documentation: $BUILD_DOCBOOK_HTML"
959 echo "Building DocBook PS documentation:   $BUILD_DOCBOOK_PS"
960 echo "Building DocBook PDF documentation:  $BUILD_DOCBOOK_PDF"
961
962 echo ["Building shared libraries      : $BuildSharedLibs"]
963
964 echo ["----------------------------------------------------------------------
965 "]
966
967 echo "\
968 For a standard build of GHC (fully optimised with profiling), type (g)make.
969
970 To make changes to the default build configuration, copy the file
971 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
972
973 For more information on how to configure your GHC build, see
974    http://hackage.haskell.org/trac/ghc/wiki/Building
975 "