Sanity check the platforms we are given
[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 checkArch() {
261     case $1 in
262     alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64)
263         ;;
264     *)
265         echo "Unknown arch $1"
266         exit 1
267         ;;
268     esac
269 }
270
271 checkVendor() {
272     case $1 in
273     dec|unknown|hp|apple|next|sun|sgi|ibm)
274         ;;
275     *)
276         echo "Unknown vendor $1"
277         exit 1
278         ;;
279     esac
280 }
281
282 checkOS() {
283     case $1 in
284     linux|freebsd|netbsd|openbsd|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix)
285         ;;
286     *)
287         echo "Unknown OS $1"
288         exit 1
289         ;;
290     esac
291 }
292
293 BuildPlatform=$build
294 BuildArch=`echo "$build" | sed 's/-.*//'`
295 BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
296 BuildOS=`echo "$build" | sed 's/.*-//'`
297 BuildPlatform_CPP=`echo "$BuildPlatform" | sed 's/\.\|-/_/g'`
298 BuildArch_CPP=`echo "$BuildArch" | sed 's/\.\|-/_/g'`
299 BuildVendor_CPP=`echo "$BuildVendor" | sed 's/\.\|-/_/g'`
300 BuildOS_CPP=`echo "$BuildOS" | sed 's/\.\|-/_/g'`
301
302 checkArch "$BuildArch"
303 checkVendor "$BuildVendor"
304 checkOS "$BuildOS"
305
306 HostPlatform=$host
307 HostArch=`echo "$host" | sed 's/-.*//'`
308 HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
309 HostOS=`echo "$host" | sed 's/.*-//'`
310 HostPlatform_CPP=`echo "$HostPlatform" | sed 's/\.\|-/_/g'`
311 HostArch_CPP=`echo "$HostArch" | sed 's/\.\|-/_/g'`
312 HostVendor_CPP=`echo "$HostVendor" | sed 's/\.\|-/_/g'`
313 HostOS_CPP=`echo "$HostOS" | sed 's/\.\|-/_/g'`
314
315 checkArch "$HostArch"
316 checkVendor "$HostVendor"
317 checkOS "$HostOS"
318
319 TargetPlatform=$target
320 TargetArch=`echo "$target" | sed 's/-.*//'`
321 TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
322 TargetOS=`echo "$target" | sed 's/.*-//'`
323 TargetPlatform_CPP=`echo "$TargetPlatform" | sed 's/\.\|-/_/g'`
324 TargetArch_CPP=`echo "$TargetArch" | sed 's/\.\|-/_/g'`
325 TargetVendor_CPP=`echo "$TargetVendor" | sed 's/\.\|-/_/g'`
326 TargetOS_CPP=`echo "$TargetOS" | sed 's/\.\|-/_/g'`
327
328 checkArch "$TargetArch"
329 checkVendor "$TargetVendor"
330 checkOS "$TargetOS"
331
332 AC_SUBST(BuildPlatform)
333 AC_SUBST(HostPlatform)
334 AC_SUBST(TargetPlatform)
335 AC_SUBST(HostPlatform_CPP)
336 AC_SUBST(BuildPlatform_CPP)
337 AC_SUBST(TargetPlatform_CPP)
338
339 AC_SUBST(HostArch_CPP)
340 AC_SUBST(BuildArch_CPP)
341 AC_SUBST(TargetArch_CPP)
342
343 AC_SUBST(HostOS_CPP)
344 AC_SUBST(BuildOS_CPP)
345 AC_SUBST(TargetOS_CPP)
346
347 AC_SUBST(HostVendor_CPP)
348 AC_SUBST(BuildVendor_CPP)
349 AC_SUBST(TargetVendor_CPP)
350
351 AC_SUBST(exeext)
352 AC_SUBST(soext)
353
354 AC_ARG_WITH(hc,
355 [AC_HELP_STRING([--with-hc=ARG],
356         [Use ARG as the path to the compiler for compiling ordinary
357          Haskell code  (default= value of --with-ghc)])],
358 [WithHc="$withval"],
359 [WithHc=$WithGhc]
360 )
361 AC_SUBST(WithHc)
362
363 AC_PATH_PROGS(NHC,nhc nhc98)
364 AC_PATH_PROG(HBC,hbc)
365
366 dnl ** Which gcc to use?
367 dnl --------------------------------------------------------------
368 AC_ARG_WITH(gcc,
369 [AC_HELP_STRING([--with-gcc=ARG],
370         [Use ARG as the path to GCC  [default=autodetect]])],
371 [WhatGccIsCalled="$withval"
372  if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
373     test "${OSTYPE}"      != "msys"                  && \
374     test "${withval}"     != ""
375  then
376      # Canonicalise to <drive>:/path/to/gcc
377      withval=`cygpath -m ${withval}`
378  fi;
379  CC="$withval"
380  export CC
381  ],
382 [WhatGccIsCalled="gcc"]
383 )
384 AC_SUBST(WhatGccIsCalled)
385
386 dnl ** Which ld to use?
387 dnl --------------------------------------------------------------
388 AC_ARG_WITH(ld,
389 [AC_HELP_STRING([--with-ld=ARG],
390         [Use ARG as the path to LD  [default=autodetect]])],
391 [if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
392     test "${OSTYPE}"      != "msys"                  && \
393     test "${withval}"     != ""
394  then
395      # Canonicalise to <drive>:/path/to/ld
396      withval=`cygpath -m ${withval}`
397  fi;
398  LD=$withval
399  FP_PROG_LD([$LD])
400  ],
401  [FP_PROG_LD()]
402 )
403
404 dnl ** Build shared and/or static libs?
405 dnl --------------------------------------------------------------
406 AC_ARG_ENABLE(shared,
407 [AC_HELP_STRING([--enable-shared],
408 [Build shared libraries, if available (EXPERIMENTAL, non-working). [default=no]])],
409 [ if test x"$enableval" = x"yes"; then
410         AC_MSG_WARN([--enable-shared is experimental and not fully supported at this time])
411         BuildSharedLibs=YES
412   else
413         BuildSharedLibs=NO
414   fi
415 ],
416 [BuildSharedLibs=NO]
417 )
418 AC_SUBST(BuildSharedLibs)
419
420 # ToDo later:
421 # AC_ARG_ENABLE(static,
422 # [AC_HELP_STRING([--enable-static],
423 # [Build static libraries. [default=yes]])],
424 # [ if test x"$enableval" = x"yes"; then
425 #         BuildStaticLibs=YES
426 #   else
427 #         BuildStaticLibs=NO
428 #   fi
429 # ],
430 # [BuildStaticLibs=YES]
431 # )
432 # AC_SUBST(BuildStaticLibs)
433
434 dnl ** Booting from .hc files?
435 dnl --------------------------------------------------------------
436 AC_ARG_ENABLE(hc-boot,
437 [AC_HELP_STRING([--enable-hc-boot],
438 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
439  (This option is mostly of interest to porters.) [default=no]])],
440 [ if test x"$enableval" = x"yes"; then
441         BootingFromHc=YES
442   else
443         BootingFromHc=NO
444   fi
445 ],
446 [BootingFromHc=NO]
447 )
448 AC_SUBST(BootingFromHc)
449
450 # This uses GHC, so put it after the "GHC is required" check above:
451 FP_FIND_ROOT
452
453 dnl ** Enable the construction of Win32 DLLs?
454 dnl --------------------------------------------------------------
455 dnl
456 dnl [ The ability to build the RTS and libraries as separate DLLs used
457 dnl   to be supported, but isn't currently (updates to the RTS, compiler
458 dnl   and build system would be required to bring it back again.)
459 dnl   Hence, exposing it as an option is false advertisement, so better
460 dnl   disable it to avoid confusion (but leave it commented-out rather
461 dnl   than removed in order to remind ourselves to bring back the
462 dnl   feature at some stage.) ]
463 dnl
464 dnl AC_ARG_ENABLE(win32-dlls,
465 dnl [  --enable-win32-dlls
466 dnl         If on a Win32 platform running mingw32/cygwin, enable the
467 dnl         construction of DLLs containing ghc-compiled code.
468 dnl ],
469 dnl [
470 dnl case $HostOS_CPP in
471 dnl cygwin32) ;;
472 dnl mingw32)  ;;
473 dnl *)    echo "Unrecognised win32 platform: $HostPlatform"
474 dnl       exit 1
475 dnl       ;;
476 dnl esac
477 dnl EnableWin32DLLs=YES
478 dnl ],
479 dnl [EnableWin32DLLs=NO]
480 dnl )
481 dnl AC_SUBST(EnableWin32DLLs)
482 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
483 dnl  AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
484 dnl fi
485
486 dnl ** Mac OS X: explicit deployment target
487 dnl --------------------------------------------------------------
488 AC_ARG_WITH([macosx-deployment-target],
489 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
490         [Build for Mac OS VERSION and higher  (default= version of build host)])],
491 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
492  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
493    # ignore everywhere, but on Mac OS
494    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
495    FP_MACOSX_DEPLOYMENT_TARGET=none
496  fi],
497 [FP_MACOSX_DEPLOYMENT_TARGET=none]
498 )
499 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
500 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
501 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
502
503 dnl --------------------------------------------------------------
504 dnl End of configure script option section
505 dnl --------------------------------------------------------------
506
507
508 dnl --------------------------------------------------------------
509 dnl * General configuration checks
510 dnl --------------------------------------------------------------
511
512 dnl ** Can the unix package be built?
513 dnl --------------------------------------------------------------
514
515 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
516    GhcLibsWithUnix=NO
517 else
518    GhcLibsWithUnix=YES
519 fi
520 AC_SUBST([GhcLibsWithUnix])
521
522 dnl ** does #! work?
523 AC_SYS_INTERPRETER()
524
525 dnl ** look for `perl', but only in /bin on Windows
526 case $HostOS_CPP in
527 cygwin32|mingw32)
528       AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
529       if test -z "$PerlCmd"; then
530          echo "You must install the version of Perl shipped with GHC"
531          echo "(or a compatible one) in /bin."
532          exit 1
533       fi
534    ;;
535 *)
536    AC_PATH_PROG(PerlCmd,perl)
537    if test -z "$PerlCmd"; then
538       echo "You must install perl before you can continue"
539       echo "Perhaps it is already installed, but not in your PATH?"
540       exit 1
541    else
542    FPTOOLS_CHECK_PERL_VERSION
543    fi
544    ;;
545 esac
546
547 dnl ** does #! path/to/perl work? (sometimes it's too long...)
548 FPTOOLS_SHEBANG_PERL
549
550 dnl ** check for Python
551 AC_PATH_PROG(PythonCmd,python)
552
553 dnl ** look for GCC and find out which version
554 dnl     Figure out which C compiler to use.  Gcc is preferred.
555 dnl     If gcc, make sure it's at least 2.1
556 dnl
557 FP_HAVE_GCC
558 FP_MINGW_GCC
559 FP_GCC_EXTRA_FLAGS
560
561 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
562 AC_PROG_CPP
563
564 dnl ** Without optimization some INLINE trickery fails for GHCi
565 SRC_CC_OPTS="-O"
566
567 SRC_CC_OPTS="$SRC_CC_OPTS $CFLAGS"
568 SRC_LD_OPTS="$SRC_LD_OPTS $LDFLAGS"
569
570 AC_SUBST(SRC_CC_OPTS)
571 AC_SUBST(SRC_LD_OPTS)
572
573 dnl ** figure out how to do context diffs
574 FP_PROG_CONTEXT_DIFF
575
576 dnl ** Find find command (for Win32's benefit)
577 FP_PROG_FIND
578
579 dnl ** Find sort command (for the benefit of Win32 environs)
580 FP_PROG_SORT
581
582 dnl Let's make sure install-sh is executable here.  If we got it from
583 dnl a darcs repo, it might not be (see bug #978).
584 chmod +x install-sh
585 dnl ** figure out how to do a BSD-ish install
586 AC_PROG_INSTALL
587
588 dnl If you can run configure, you certainly have /bin/sh
589 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
590
591 dnl ** how to invoke `ar' and `ranlib'
592 FP_PROG_AR_NEEDS_RANLIB
593 FP_PROG_AR_SUPPORTS_INPUT
594
595 dnl ** Check to see whether ln -s works
596 AC_PROG_LN_S
597
598
599 dnl ** Find the path to sed
600 AC_PATH_PROG(SedCmd,sed)
601
602
603 dnl ** check for time command
604 AC_PATH_PROG(TimeCmd,time)
605
606 dnl ** check for tar
607 dnl   if GNU tar is named gtar, look for it first.
608 AC_PATH_PROGS(TarCmd,gtar tar,tar)
609
610 dnl ** check for patch
611 dnl if GNU patch is named gpatch, look for it first
612 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
613
614 AC_PATH_PROG(HSCOLOUR,HsColour)
615 # HsColour is passed to Cabal, so we need a native path
616 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
617    test "${OSTYPE}"      != "msys"                  && \
618    test "${HSCOLOUR}"    != ""
619 then
620     # Canonicalise to <drive>:/path/to/gcc
621     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
622 fi
623
624 dnl ** check for DocBook toolchain
625 FP_CHECK_DOCBOOK_DTD
626 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])
627
628 FP_PROG_DBLATEX
629
630 FP_PROG_HSTAGS
631
632 dnl ** check for ghc-pkg command
633 FP_PROG_GHC_PKG
634
635 dnl ** check for installed happy binary + version
636 dnl    (don't do it if we're booting from .hc files though.)
637 if test "$BootingFromHc" = "NO"; then
638 FPTOOLS_HAPPY
639 fi;
640
641 dnl ** check for installed alex binary + version
642 dnl    (don't do it if we're booting from .hc files though.)
643 if test "$BootingFromHc" = "NO"; then
644 FPTOOLS_ALEX
645 fi;
646
647 dnl Check we have an acceptable version of windres
648 FPTOOLS_WINDRES
649
650 dnl --------------------------------------------------
651 dnl ### program checking section ends here ###
652 dnl --------------------------------------------------
653
654 dnl --------------------------------------------------
655 dnl * Platform header file and syscall feature tests
656 dnl ### checking the state of the local header files and syscalls ###
657
658 dnl ** check for full ANSI header (.h) files
659 AC_HEADER_STDC
660
661 dnl ** Enable large file support.  NB. do this before testing the type of
662 dnl    off_t, because it will affect the result of that test.
663 AC_SYS_LARGEFILE
664
665 dnl ** check for specific header (.h) files that we are interested in
666 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])
667
668 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
669 AC_HEADER_TIME
670
671 dnl ** do we have long longs?
672 AC_CHECK_TYPES([long long])
673
674 dnl ** what are the sizes of various types
675 AC_CHECK_SIZEOF(char,               1)
676 AC_CHECK_SIZEOF(double,             8)
677 AC_CHECK_SIZEOF(float,              4)
678 AC_CHECK_SIZEOF(int,                4)
679 AC_CHECK_SIZEOF(long,               4)
680 if test "$ac_cv_type_long_long" = yes; then
681 AC_CHECK_SIZEOF(long long,          8)
682 fi
683 AC_CHECK_SIZEOF(short,              2)
684 AC_CHECK_SIZEOF(unsigned char,      1)
685 AC_CHECK_SIZEOF(unsigned int,       4)
686 AC_CHECK_SIZEOF(unsigned long,      4)
687 if test "$ac_cv_type_long_long" = yes; then
688 AC_CHECK_SIZEOF(unsigned long long, 8)
689 fi
690 AC_CHECK_SIZEOF(unsigned short,     2)
691 AC_CHECK_SIZEOF(void *,             4)
692
693 dnl ** what are alignment constraints on various types
694 FP_CHECK_ALIGNMENT(char)
695 FP_CHECK_ALIGNMENT(double)
696 FP_CHECK_ALIGNMENT(float)
697 FP_CHECK_ALIGNMENT(int)
698 FP_CHECK_ALIGNMENT(long)
699 if test "$ac_cv_type_long_long" = yes; then
700 FP_CHECK_ALIGNMENT(long long)
701 fi
702 FP_CHECK_ALIGNMENT(short)
703 FP_CHECK_ALIGNMENT(unsigned char)
704 FP_CHECK_ALIGNMENT(unsigned int)
705 FP_CHECK_ALIGNMENT(unsigned long)
706 if test "$ac_cv_type_long_long" = yes; then
707 FP_CHECK_ALIGNMENT(unsigned long long)
708 fi
709 FP_CHECK_ALIGNMENT(unsigned short)
710 FP_CHECK_ALIGNMENT(void *)
711
712 FP_CHECK_FUNC([WinExec],
713   [@%:@include <windows.h>], [WinExec("",0)])
714
715 FP_CHECK_FUNC([GetModuleFileName],
716   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
717
718 dnl ** check return type of signal handlers
719 dnl Foo: assumes we can use prototypes.
720 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
721 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
722 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
723 dnl #include <signal.h>
724 dnl #ifdef signal
725 dnl #undef signal
726 dnl #endif
727 dnl void (*signal (int, void (*)(int)))(int);
728 dnl ]],
729 dnl [[int i;]])],
730 dnl [ac_cv_type_signal_handler=void_int],
731 dnl [ac_cv_type_signal_handler=int_void])])
732 dnl if test "$ac_cv_type_signal_handler" = void_int; then
733 dnl AC_DEFINE(VOID_INT_SIGNALS)
734 dnl fi
735
736 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
737 AC_TYPE_SIGNAL
738 if test "$ac_cv_type_signal" = void; then
739   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).])
740 fi
741
742 dnl ** check for more functions
743 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
744 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r, sched_setaffinity])
745
746 AC_TRY_RUN([
747 #include <sys/types.h>
748 #include <sys/time.h>
749 int main(void) {
750   struct itimerval tval;
751   tval.it_value.tv_sec = 1;
752   tval.it_value.tv_usec = 0;
753   tval.it_interval = tval.it_value;
754   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
755 }
756 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
757
758 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
759 dnl ** _POSIX_C_SOURCE is defined
760 AC_CHECK_DECLS([ctime_r], , ,
761 [#define _POSIX_SOURCE 1
762 #define _POSIX_C_SOURCE 199506L
763 #include <time.h>])
764
765 dnl ** For ghc/rts/gmp:
766 AC_CHECK_FUNCS([getpagesize])
767
768 dnl ** check whether this machine has gmp3 installed
769 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
770   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
771     HaveLibGmp=NO; LibGmp=not-installed))
772   if test $HaveLibGmp = YES; then
773     AC_DEFINE([HAVE_LIB_GMP], [1], [Define to 1 if GMP library is installed.])
774   fi;
775 AC_SUBST(HaveLibGmp)
776 AC_SUBST(LibGmp)
777
778 dnl ** (Mac OS X only: check for GMP.framework)
779 HaveFrameworkGMP=NO
780 case $HostPlatform in
781 *-apple-darwin)
782     AC_MSG_CHECKING([for GMP.framework])
783     save_libs="$LIBS"
784     LIBS="-framework GMP"
785     AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,)
786     if test $HaveFrameworkGMP = YES; then
787       AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).])
788     fi;
789     LIBS="$save_libs"
790     AC_MSG_RESULT([$HaveFrameworkGMP])
791     ;;
792 esac
793 AC_SUBST(HaveFrameworkGMP)
794
795 dnl ** check for mingwex library
796 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
797 AC_SUBST(HaveLibMingwEx)
798
799 if test $HaveLibMingwEx = YES ; then
800   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
801 fi
802
803 if test "$HaveLibGmp" = "NO"; then
804 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
805 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
806 fi;
807 fi;
808
809 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
810 dnl    the order of these tests matters: bfd needs liberty
811 AC_CHECK_LIB(iberty, xmalloc)
812 AC_CHECK_LIB(bfd,    bfd_init)
813
814 dnl ** check for math library
815 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
816 if test x"$fp_libm_not_needed" = xdunno; then
817    AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
818 fi
819 AC_SUBST([LIBM])
820
821 dnl ################################################################
822 dnl Check for libraries
823 dnl ################################################################
824
825 dnl ** check whether we need -ldl to get dlopen()
826
827 AC_CHECK_LIB(dl, dlopen,
828     [HaveLibDL=YES
829      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
830      LIBS="$LIBS -ldl"],
831     [HaveLibDL=NO])
832 AC_SUBST(HaveLibDL)
833
834 dnl --------------------------------------------------
835 dnl * Miscellaneous feature tests
836 dnl --------------------------------------------------
837
838 dnl ** can we get alloca?
839 AC_FUNC_ALLOCA
840
841 dnl ** Working vfork?
842 AC_FUNC_FORK
843
844 dnl ** determine whether or not const works
845 AC_C_CONST
846
847 dnl ** are we big endian?
848 AC_C_BIGENDIAN
849 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
850
851 dnl ** check for leading underscores in symbol names
852 FP_LEADING_UNDERSCORE
853
854 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
855 FP_PROG_LD_X
856 FP_PROG_LD_IS_GNU
857
858 dnl ** check for Apple-style dead-stripping support
859 dnl    (.subsections-via-symbols assembler directive)
860
861
862 AC_MSG_CHECKING(for .subsections_via_symbols)
863 AC_COMPILE_IFELSE(
864     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
865     [AC_MSG_RESULT(yes)
866      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
867                [Define to 1 if Apple-style dead-stripping is supported.])
868     ],
869     [AC_MSG_RESULT(no)])
870
871 dnl *** check for GNU non-executable stack note support (ELF only)
872 dnl     (.section .note.GNU-stack,"",@progbits)
873
874 AC_MSG_CHECKING(for GNU non-executable stack support)
875 AC_COMPILE_IFELSE(
876     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
877     [AC_MSG_RESULT(yes)
878      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
879                [Define to 1 if GNU non-executable stack notes are supported.])
880     ],
881     [AC_MSG_RESULT(no)])
882
883 dnl ** check for librt
884 AC_CHECK_LIB(rt, clock_gettime)
885 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
886 FP_CHECK_TIMER_CREATE
887
888 dnl ** check for Apple's "interesting" long double compatibility scheme
889 AC_MSG_CHECKING(for printf\$LDBLStub)
890 AC_TRY_LINK_FUNC(printf\$LDBLStub,
891     [
892         AC_MSG_RESULT(yes)
893         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
894             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
895     ],
896     [
897         AC_MSG_RESULT(no)
898         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
899             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
900     ])
901
902 # test for GTK+
903 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
904 if test -n "$GTK_CONFIG"; then
905   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
906     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
907   else
908     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
909     GTK_CONFIG=
910   fi
911 fi
912 AC_SUBST([GTK_CONFIG])
913
914 #Checking for PAPI
915 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
916 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
917 AC_SUBST(HavePapiLib)
918 AC_SUBST(HavePapiHeader)
919
920 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
921    HavePapi=YES
922 else
923    HavePapi=NO
924 fi
925 AC_SUBST(HavePapi)
926
927 if test "$DIR_DOCBOOK_XSL" = "" ||
928    test "$XsltprocCmd" = ""
929 then
930     BUILD_DOCBOOK_HTML=NO
931 else
932     BUILD_DOCBOOK_HTML=YES
933 fi
934 AC_SUBST(BUILD_DOCBOOK_HTML)
935
936 if test "$DblatexCmd" = ""
937 then
938     BUILD_DOCBOOK_PS=NO
939     BUILD_DOCBOOK_PDF=NO
940 else
941     BUILD_DOCBOOK_PS=YES
942     BUILD_DOCBOOK_PDF=YES
943 fi
944 AC_SUBST(BUILD_DOCBOOK_PS)
945 AC_SUBST(BUILD_DOCBOOK_PDF)
946
947 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])
948 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
949 AC_OUTPUT
950
951 # We get caught by
952 #     http://savannah.gnu.org/bugs/index.php?1516
953 #     $(eval ...) inside conditionals causes errors
954 # with make 3.80, so warn the user if it looks like they're about to
955 # try to use it.
956 # We would use "grep -q" here, but Solaris's grep doesn't support it.
957 checkMake380() {
958     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
959     then
960         echo
961         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
962         echo "This version cannot be used to build GHC."
963         echo "Please use GNU make >= 3.81."
964     fi
965 }
966
967 checkMake380 make
968 checkMake380 gmake
969
970 echo ["
971 ----------------------------------------------------------------------
972 Configure completed successfully.
973
974    Building GHC version  : $ProjectVersion
975
976    Build platform        : $BuildPlatform
977    Host platform         : $HostPlatform
978    Target platform       : $TargetPlatform
979 "]
980
981 if test "$BootingFromHc" = "YES"; then
982 echo ["\
983    Bootstrapping from HC files.
984 "]
985 else
986 echo ["\
987    Bootstrapping using   : $WithGhc
988       which is version   : $GhcVersion
989 "]
990 fi
991
992 echo ["\
993    Using GCC             : $WhatGccIsCalled
994       which is version   : $GccVersion
995
996    ld       : $LdCmd
997    Happy    : $HappyCmd
998    Alex     : $AlexCmd
999    Python   : $PythonCmd
1000    Perl     : $PerlCmd"]
1001
1002 if test "$HSCOLOUR" = ""; then
1003 echo ["
1004    HsColour was not found; documentation will not contain source links
1005 "]
1006 else
1007 echo ["\
1008    HsColour : $HSCOLOUR
1009 "]
1010 fi
1011
1012 echo "Building DocBook HTML documentation: $BUILD_DOCBOOK_HTML"
1013 echo "Building DocBook PS documentation:   $BUILD_DOCBOOK_PS"
1014 echo "Building DocBook PDF documentation:  $BUILD_DOCBOOK_PDF"
1015
1016 echo ["Building shared libraries      : $BuildSharedLibs"]
1017
1018 echo ["----------------------------------------------------------------------
1019 "]
1020
1021 echo "\
1022 For a standard build of GHC (fully optimised with profiling), type (g)make.
1023
1024 To make changes to the default build configuration, copy the file
1025 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1026
1027 For more information on how to configure your GHC build, see
1028    http://hackage.haskell.org/trac/ghc/wiki/Building
1029 "