Template Haskell: improve lifting for strings
[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_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])
625
626 FP_PROG_DBLATEX
627
628 FP_PROG_HSTAGS
629
630 dnl ** check for ghc-pkg command
631 FP_PROG_GHC_PKG
632
633 dnl ** check for installed happy binary + version
634 dnl    (don't do it if we're booting from .hc files though.)
635 if test "$BootingFromHc" = "NO"; then
636 FPTOOLS_HAPPY
637 fi;
638
639 dnl ** check for installed alex binary + version
640 dnl    (don't do it if we're booting from .hc files though.)
641 if test "$BootingFromHc" = "NO"; then
642 FPTOOLS_ALEX
643 fi;
644
645 dnl Check we have an acceptable version of windres
646 FPTOOLS_WINDRES
647
648 dnl --------------------------------------------------
649 dnl ### program checking section ends here ###
650 dnl --------------------------------------------------
651
652 dnl --------------------------------------------------
653 dnl * Platform header file and syscall feature tests
654 dnl ### checking the state of the local header files and syscalls ###
655
656 dnl ** check for full ANSI header (.h) files
657 AC_HEADER_STDC
658
659 dnl ** Enable large file support.  NB. do this before testing the type of
660 dnl    off_t, because it will affect the result of that test.
661 AC_SYS_LARGEFILE
662
663 dnl ** check for specific header (.h) files that we are interested in
664 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])
665
666 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
667 AC_HEADER_TIME
668
669 dnl ** do we have long longs?
670 AC_CHECK_TYPES([long long])
671
672 dnl ** what are the sizes of various types
673 AC_CHECK_SIZEOF(char,               1)
674 AC_CHECK_SIZEOF(double,             8)
675 AC_CHECK_SIZEOF(float,              4)
676 AC_CHECK_SIZEOF(int,                4)
677 AC_CHECK_SIZEOF(long,               4)
678 if test "$ac_cv_type_long_long" = yes; then
679 AC_CHECK_SIZEOF(long long,          8)
680 fi
681 AC_CHECK_SIZEOF(short,              2)
682 AC_CHECK_SIZEOF(unsigned char,      1)
683 AC_CHECK_SIZEOF(unsigned int,       4)
684 AC_CHECK_SIZEOF(unsigned long,      4)
685 if test "$ac_cv_type_long_long" = yes; then
686 AC_CHECK_SIZEOF(unsigned long long, 8)
687 fi
688 AC_CHECK_SIZEOF(unsigned short,     2)
689 AC_CHECK_SIZEOF(void *,             4)
690
691 dnl ** what are alignment constraints on various types
692 FP_CHECK_ALIGNMENT(char)
693 FP_CHECK_ALIGNMENT(double)
694 FP_CHECK_ALIGNMENT(float)
695 FP_CHECK_ALIGNMENT(int)
696 FP_CHECK_ALIGNMENT(long)
697 if test "$ac_cv_type_long_long" = yes; then
698 FP_CHECK_ALIGNMENT(long long)
699 fi
700 FP_CHECK_ALIGNMENT(short)
701 FP_CHECK_ALIGNMENT(unsigned char)
702 FP_CHECK_ALIGNMENT(unsigned int)
703 FP_CHECK_ALIGNMENT(unsigned long)
704 if test "$ac_cv_type_long_long" = yes; then
705 FP_CHECK_ALIGNMENT(unsigned long long)
706 fi
707 FP_CHECK_ALIGNMENT(unsigned short)
708 FP_CHECK_ALIGNMENT(void *)
709
710 FP_CHECK_FUNC([WinExec],
711   [@%:@include <windows.h>], [WinExec("",0)])
712
713 FP_CHECK_FUNC([GetModuleFileName],
714   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
715
716 dnl ** check return type of signal handlers
717 dnl Foo: assumes we can use prototypes.
718 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
719 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
720 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
721 dnl #include <signal.h>
722 dnl #ifdef signal
723 dnl #undef signal
724 dnl #endif
725 dnl void (*signal (int, void (*)(int)))(int);
726 dnl ]],
727 dnl [[int i;]])],
728 dnl [ac_cv_type_signal_handler=void_int],
729 dnl [ac_cv_type_signal_handler=int_void])])
730 dnl if test "$ac_cv_type_signal_handler" = void_int; then
731 dnl AC_DEFINE(VOID_INT_SIGNALS)
732 dnl fi
733
734 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
735 AC_TYPE_SIGNAL
736 if test "$ac_cv_type_signal" = void; then
737   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).])
738 fi
739
740 dnl ** check for more functions
741 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
742 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r, sched_setaffinity])
743
744 AC_TRY_RUN([
745 #include <sys/types.h>
746 #include <sys/time.h>
747 int main(void) {
748   struct itimerval tval;
749   tval.it_value.tv_sec = 1;
750   tval.it_value.tv_usec = 0;
751   tval.it_interval = tval.it_value;
752   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
753 }
754 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
755
756 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
757 dnl ** _POSIX_C_SOURCE is defined
758 AC_CHECK_DECLS([ctime_r], , ,
759 [#define _POSIX_SOURCE 1
760 #define _POSIX_C_SOURCE 199506L
761 #include <time.h>])
762
763 dnl ** For ghc/rts/gmp:
764 AC_CHECK_FUNCS([getpagesize])
765
766 dnl ** check whether this machine has gmp3 installed
767 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
768   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
769     HaveLibGmp=NO; LibGmp=not-installed))
770   if test $HaveLibGmp = YES; then
771     AC_DEFINE([HAVE_LIB_GMP], [1], [Define to 1 if GMP library is installed.])
772   fi;
773 AC_SUBST(HaveLibGmp)
774 AC_SUBST(LibGmp)
775
776 dnl ** (Mac OS X only: check for GMP.framework)
777 HaveFrameworkGMP=NO
778 case $HostPlatform in
779 *-apple-darwin)
780     AC_MSG_CHECKING([for GMP.framework])
781     save_libs="$LIBS"
782     LIBS="-framework GMP"
783     AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,)
784     if test $HaveFrameworkGMP = YES; then
785       AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).])
786     fi;
787     LIBS="$save_libs"
788     AC_MSG_RESULT([$HaveFrameworkGMP])
789     ;;
790 esac
791 AC_SUBST(HaveFrameworkGMP)
792
793 dnl ** check for mingwex library
794 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
795 AC_SUBST(HaveLibMingwEx)
796
797 if test $HaveLibMingwEx = YES ; then
798   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
799 fi
800
801 if test "$HaveLibGmp" = "NO"; then
802 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
803 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
804 fi;
805 fi;
806
807 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
808 dnl    the order of these tests matters: bfd needs liberty
809 AC_CHECK_LIB(iberty, xmalloc)
810 AC_CHECK_LIB(bfd,    bfd_init)
811
812 dnl ** check for math library
813 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
814 if test x"$fp_libm_not_needed" = xdunno; then
815    AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
816 fi
817 AC_SUBST([LIBM])
818
819 dnl ################################################################
820 dnl Check for libraries
821 dnl ################################################################
822
823 dnl ** check whether we need -ldl to get dlopen()
824
825 AC_CHECK_LIB(dl, dlopen,
826     [HaveLibDL=YES
827      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
828      LIBS="$LIBS -ldl"],
829     [HaveLibDL=NO])
830 AC_SUBST(HaveLibDL)
831
832 dnl --------------------------------------------------
833 dnl * Miscellaneous feature tests
834 dnl --------------------------------------------------
835
836 dnl ** can we get alloca?
837 AC_FUNC_ALLOCA
838
839 dnl ** Working vfork?
840 AC_FUNC_FORK
841
842 dnl ** determine whether or not const works
843 AC_C_CONST
844
845 dnl ** are we big endian?
846 AC_C_BIGENDIAN
847 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
848
849 dnl ** check for leading underscores in symbol names
850 FP_LEADING_UNDERSCORE
851
852 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
853 FP_PROG_LD_X
854 FP_PROG_LD_IS_GNU
855
856 dnl ** check for Apple-style dead-stripping support
857 dnl    (.subsections-via-symbols assembler directive)
858
859
860 AC_MSG_CHECKING(for .subsections_via_symbols)
861 AC_COMPILE_IFELSE(
862     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
863     [AC_MSG_RESULT(yes)
864      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
865                [Define to 1 if Apple-style dead-stripping is supported.])
866     ],
867     [AC_MSG_RESULT(no)])
868
869 dnl *** check for GNU non-executable stack note support (ELF only)
870 dnl     (.section .note.GNU-stack,"",@progbits)
871
872 AC_MSG_CHECKING(for GNU non-executable stack support)
873 AC_COMPILE_IFELSE(
874     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
875     [AC_MSG_RESULT(yes)
876      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
877                [Define to 1 if GNU non-executable stack notes are supported.])
878     ],
879     [AC_MSG_RESULT(no)])
880
881 dnl ** check for librt
882 AC_CHECK_LIB(rt, clock_gettime)
883 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
884 FP_CHECK_TIMER_CREATE
885
886 dnl ** check for Apple's "interesting" long double compatibility scheme
887 AC_MSG_CHECKING(for printf\$LDBLStub)
888 AC_TRY_LINK_FUNC(printf\$LDBLStub,
889     [
890         AC_MSG_RESULT(yes)
891         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
892             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
893     ],
894     [
895         AC_MSG_RESULT(no)
896         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
897             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
898     ])
899
900 # test for GTK+
901 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
902 if test -n "$GTK_CONFIG"; then
903   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
904     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
905   else
906     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
907     GTK_CONFIG=
908   fi
909 fi
910 AC_SUBST([GTK_CONFIG])
911
912 #Checking for PAPI
913 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
914 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
915 AC_SUBST(HavePapiLib)
916 AC_SUBST(HavePapiHeader)
917
918 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
919    HavePapi=YES
920 else
921    HavePapi=NO
922 fi
923 AC_SUBST(HavePapi)
924
925 if test "$DIR_DOCBOOK_XSL" = "" ||
926    test "$XsltprocCmd" = ""
927 then
928     BUILD_DOCBOOK_HTML=NO
929 else
930     BUILD_DOCBOOK_HTML=YES
931 fi
932 AC_SUBST(BUILD_DOCBOOK_HTML)
933
934 if test "$DblatexCmd" = ""
935 then
936     BUILD_DOCBOOK_PS=NO
937     BUILD_DOCBOOK_PDF=NO
938 else
939     BUILD_DOCBOOK_PS=YES
940     BUILD_DOCBOOK_PDF=YES
941 fi
942 AC_SUBST(BUILD_DOCBOOK_PS)
943 AC_SUBST(BUILD_DOCBOOK_PDF)
944
945 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])
946 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
947 AC_OUTPUT
948
949 # We get caught by
950 #     http://savannah.gnu.org/bugs/index.php?1516
951 #     $(eval ...) inside conditionals causes errors
952 # with make 3.80, so warn the user if it looks like they're about to
953 # try to use it.
954 # We would use "grep -q" here, but Solaris's grep doesn't support it.
955 checkMake380() {
956     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
957     then
958         echo
959         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
960         echo "This version cannot be used to build GHC."
961         echo "Please use GNU make >= 3.81."
962     fi
963 }
964
965 checkMake380 make
966 checkMake380 gmake
967
968 echo ["
969 ----------------------------------------------------------------------
970 Configure completed successfully.
971
972    Building GHC version  : $ProjectVersion
973
974    Build platform        : $BuildPlatform
975    Host platform         : $HostPlatform
976    Target platform       : $TargetPlatform
977 "]
978
979 if test "$BootingFromHc" = "YES"; then
980 echo ["\
981    Bootstrapping from HC files.
982 "]
983 else
984 echo ["\
985    Bootstrapping using   : $WithGhc
986       which is version   : $GhcVersion
987 "]
988 fi
989
990 echo ["\
991    Using GCC             : $WhatGccIsCalled
992       which is version   : $GccVersion
993
994    ld       : $LdCmd
995    Happy    : $HappyCmd
996    Alex     : $AlexCmd
997    Python   : $PythonCmd
998    Perl     : $PerlCmd"]
999
1000 if test "$HSCOLOUR" = ""; then
1001 echo ["
1002    HsColour was not found; documentation will not contain source links
1003 "]
1004 else
1005 echo ["\
1006    HsColour : $HSCOLOUR
1007 "]
1008 fi
1009
1010 echo "Building DocBook HTML documentation: $BUILD_DOCBOOK_HTML"
1011 echo "Building DocBook PS documentation:   $BUILD_DOCBOOK_PS"
1012 echo "Building DocBook PDF documentation:  $BUILD_DOCBOOK_PDF"
1013
1014 echo ["Building shared libraries      : $BuildSharedLibs"]
1015
1016 echo ["----------------------------------------------------------------------
1017 "]
1018
1019 echo "\
1020 For a standard build of GHC (fully optimised with profiling), type (g)make.
1021
1022 To make changes to the default build configuration, copy the file
1023 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1024
1025 For more information on how to configure your GHC build, see
1026    http://hackage.haskell.org/trac/ghc/wiki/Building
1027 "