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