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