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