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