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