remove last vestiges of AlienScript, it is not used any more
[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-2012
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], [7.7], [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. 7.5, 7.4.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. 7.4.20111220).  The date is
24 # constructed by finding the date of the most recent patch in the
25 # git repository.  If this is a source distribution (not a git
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 ----------------------------------------------------------
44 FP_SETUP_PROJECT_VERSION
45
46 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
47 AC_SUBST([release], [1])
48
49 # First off, a distrib sanity check..
50 AC_CONFIG_SRCDIR([mk/config.mk.in])
51
52 dnl * We require autoconf version 2.52
53 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
54 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
55 AC_PREREQ([2.52])
56
57 # -------------------------------------------------------------------------
58 # Prepare to generate the following header files
59 #
60 #
61 AC_CONFIG_HEADER(mk/config.h)
62
63 # No, semi-sadly, we don't do `--srcdir'...
64 if test x"$srcdir" != 'x.' ; then
65     echo "This configuration does not support the \`--srcdir' option.."
66     exit 1
67 fi
68
69 dnl --------------------------------------------------------------
70 dnl * Project specific configuration options
71 dnl --------------------------------------------------------------
72 dnl What follows is a bunch of options that can either be configured
73 dnl through command line options to the configure script or by
74 dnl supplying defns in the build tree's mk/build.mk. Having the option to
75 dnl use either is considered a Feature.
76
77 dnl ** What command to use to compile compiler sources ?
78 dnl --------------------------------------------------------------
79
80 AC_ARG_WITH([ghc],
81 [AC_HELP_STRING([--with-ghc=ARG],
82   [Use ARG as the path to GHC  [default=autodetect]])],
83   [WithGhc="$withval"],
84   [if test "$GHC" = ""; then
85     AC_PATH_PROG([GHC], [ghc])
86   fi
87   WithGhc="$GHC"])
88
89 dnl ** Tell the make system which OS we are using
90 dnl $OSTYPE is set by the operating system to "msys" or "cygwin" or something 
91 AC_SUBST(OSTYPE)
92
93 dnl ** Booting from .hc files?
94 dnl --------------------------------------------------------------
95 AC_ARG_ENABLE(hc-boot,
96 [AC_HELP_STRING([--enable-hc-boot],
97 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
98  (This option is mostly of interest to porters.) [default=no]])],
99 [ if test x"$enableval" = x"yes"; then
100         BootingFromHc=YES
101   else
102         BootingFromHc=NO
103   fi
104 ],
105 [BootingFromHc=NO]
106 )
107 AC_SUBST(BootingFromHc)
108
109 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
110 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
111                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
112         EnableBootstrapWithDevelSnaphost=YES,
113         EnableBootstrapWithDevelSnaphost=NO
114 )
115
116 if test "$WithGhc" != ""; then
117   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
118
119   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
120      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
121   fi
122
123   AC_SUBST(GhcVersion)dnl
124   AC_SUBST(GhcMajVersion)dnl
125   AC_SUBST(GhcMinVersion)dnl
126   AC_SUBST(GhcPatchLevel)dnl
127   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
128   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
129
130   BOOTSTRAPPING_GHC_INFO_FIELD([OS_STAGE0],[target os])
131   BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
132   if test "x$OS_STAGE0" != "xOSDarwin"; then
133     BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command])
134     BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags])
135     BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file])
136   else
137     AR_STAGE0='$(AR)'
138     AR_OPTS_STAGE0='$(AR_OPTS)'
139     ArSupportsAtFile_STAGE0='$(ArSupportsAtFile)'
140   fi
141 fi
142
143 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
144 if test "$BootingFromHc" = "NO"; then
145   if test "$WithGhc" = ""; then
146      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
147   fi
148   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.4],
149     [AC_MSG_ERROR([GHC version 7.4 or later is required to compile GHC.])])dnl
150
151   if test `expr $GhcMinVersion % 2` = "1"; then
152      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
153         AC_MSG_ERROR([
154      $WithGhc is a development snapshot of GHC, version $GhcVersion.
155      Bootstrapping using this version of GHC is not supported, and may not
156      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
157      or --with-ghc to specify a different GHC to use.])
158      fi
159   fi
160
161   GHC_PACKAGE_DB_FLAG=package-db
162   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.5],GHC_PACKAGE_DB_FLAG=package-conf)
163   AC_SUBST(GHC_PACKAGE_DB_FLAG)
164 fi;
165
166 # GHC is passed to Cabal, so we need a native path
167 if test "${WithGhc}" != ""
168 then
169     ghc_host_os=`"${WithGhc}" +RTS --info | grep 'Host OS' | sed -e 's/.*, "//' -e 's/")//'`
170
171     if test "$ghc_host_os" = "mingw32"
172     then
173         if test "${OSTYPE}" = "msys"
174         then
175             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
176         else
177             # Canonicalise to <drive>:/path/to/ghc
178             WithGhc=`cygpath -m "${WithGhc}"`
179         fi
180         echo "GHC path canonicalised to: ${WithGhc}"
181     fi
182 fi
183 AC_SUBST([WithGhc])
184
185 dnl ** Without optimization some INLINE trickery fails for GHCi
186 SRC_CC_OPTS="-O"
187
188 dnl--------------------------------------------------------------------
189 dnl * Choose host(/target/build) platform
190 dnl--------------------------------------------------------------------
191 dnl If we aren't explicitly told what values to use with configure flags,
192 dnl we ask the bootstrapping compiler what platform it is for
193
194 if test "${WithGhc}" != ""
195 then
196         bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
197         bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
198         if test "$bootstrap_host" != "$bootstrap_target"
199         then
200                 echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work"
201         fi
202 fi
203
204 # We have to run these unconditionally, but we may discard their
205 # results in the following code
206 AC_CANONICAL_BUILD
207 AC_CANONICAL_HOST
208 AC_CANONICAL_TARGET
209
210 FPTOOLS_SET_PLATFORM_VARS
211
212 # Verify that the installed (bootstrap) GHC is capable of generating
213 # code for the requested build platform.
214 if test "$BootingFromHc" = "NO"
215 then
216     if test "$BuildPlatform" != "$bootstrap_target"
217     then
218         echo "This GHC (${WithGhc}) does not generate code for the build platform"
219         echo "   GHC target platform    : $bootstrap_target"
220         echo "   Desired build platform : $BuildPlatform"
221         exit 1
222     fi
223 fi
224
225 # Testing if we shall enable shared libs support on Solaris.
226 # Anything older than SunOS 5.11 aka Solaris 11 (Express) is broken.
227
228 SOLARIS_BROKEN_SHLD=NO
229
230 case $host in
231      i386-*-solaris2)
232      # here we go with the test
233      MINOR=`uname -r|cut -d '.' -f 2-`
234      if test "$MINOR" -lt "11"; then
235         SOLARIS_BROKEN_SHLD=YES
236      fi
237      ;;
238 esac
239
240 AC_SUBST(SOLARIS_BROKEN_SHLD)
241
242 dnl ** Do an unregisterised build?
243 dnl --------------------------------------------------------------
244 case "$HostArch" in
245     i386|x86_64|powerpc|arm)
246         UnregisterisedDefault=NO
247         ;;
248     *)
249         UnregisterisedDefault=YES
250         ;;
251 esac
252 AC_ARG_ENABLE(unregisterised,
253 [AC_HELP_STRING([--enable-unregisterised],
254 [Build an unregisterised compiler (enabled by default on platforms without registerised support) [default="$UnregisterisedDefault"]])],
255 [ if test x"$enableval" = x"yes"; then
256         Unregisterised=YES
257   else
258         Unregisterised=NO
259   fi
260 ],
261 [Unregisterised="$UnregisterisedDefault"]
262 )
263 AC_SUBST(Unregisterised)
264
265 AC_ARG_WITH(hc,
266 [AC_HELP_STRING([--with-hc=ARG],
267         [Use ARG as the path to the compiler for compiling ordinary
268          Haskell code  (default= value of --with-ghc)])],
269 [WithHc="$withval"],
270 [WithHc=$WithGhc]
271 )
272 AC_SUBST(WithHc)
273
274 # This uses GHC, so put it after the "GHC is required" check above:
275 FP_INTREE_GHC_PWD
276 FP_FIND_ROOT
277
278 if test "$HostOS" = "mingw32"
279 then
280     test -d inplace || mkdir inplace
281
282     if test "$HostArch" = "i386"
283     then
284         # NB. If you update the tarballs to a new version of gcc, don't
285         # forget to tweak the paths in driver/gcc/gcc.c.
286         if ! test -d inplace/mingw ||
287              test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma  ||
288              test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma  ||
289              test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma   ||
290              test inplace/mingw -ot ghc-tarballs/mingw/libgcc*.tar.gz      ||
291              test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz      ||
292              test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz      ||
293              test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz     ||
294              test inplace/mingw -ot ghc-tarballs/mingw/libstdc*.tar.lzma   ||
295              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz ||
296              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz ||
297              test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma
298         then
299             AC_MSG_NOTICE([Making in-tree mingw tree])
300             rm -rf inplace/mingw
301             mkdir inplace/mingw
302             (
303                 cd inplace/mingw &&
304                 tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma  &&
305                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma  &&
306                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma   &&
307                 tar --lzma -xf ../../ghc-tarballs/mingw/libgcc*.tar.lzma    &&
308                 tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma    &&
309                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma    &&
310                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma   &&
311                 tar --lzma -xf ../../ghc-tarballs/mingw/libstdc*.tar.lzma   &&
312                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz &&
313                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz &&
314                 tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma    &&
315                 mv bin/gcc.exe bin/realgcc.exe
316             )
317             PATH=`pwd`/inplace/mingw/bin:$PATH 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
318             AC_MSG_NOTICE([In-tree mingw tree created])
319         fi
320     else
321         # NB. If you update the tarballs to a new version of gcc, don't
322         # forget to tweak the paths in driver/gcc/gcc.c.
323         if ! test -d inplace/mingw ||
324              test inplace/mingw -ot ghc-tarballs/mingw64/*.tar.bz2
325         then
326             AC_MSG_NOTICE([Making in-tree mingw tree])
327             rm -rf inplace/mingw
328             mkdir inplace/mingw
329             (
330                 cd inplace/mingw &&
331                 tar -jxf ../../ghc-tarballs/mingw64/*.tar.bz2
332             )
333             AC_MSG_NOTICE([In-tree mingw tree created])
334         fi
335     fi
336
337     mingwbin="$hardtop/inplace/mingw/bin/"
338     CC="${mingwbin}gcc.exe"
339     LD="${mingwbin}ld.exe"
340     NM="${mingwbin}nm.exe"
341     OBJDUMP="${mingwbin}objdump.exe"
342     fp_prog_ar="${mingwbin}ar.exe"
343
344     if ! test -d inplace/perl ||
345          test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
346     then
347         AC_MSG_NOTICE([Making in-tree perl tree])
348         rm -rf inplace/perl
349         mkdir inplace/perl
350         (
351             cd inplace/perl &&
352             tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
353         )
354         AC_MSG_NOTICE([In-tree perl tree created])
355     fi
356 fi
357
358 # system libffi
359
360 AC_ARG_WITH([system-libffi],
361 [AC_HELP_STRING([--with-system-libffi],
362   [Use system provided libffi for RTS [default=no]])
363 ])
364
365 AS_IF([test "x$with_system_libffi" = "xyes"],
366   [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
367 )
368
369
370 AC_SUBST(UseSystemLibFFI)
371
372 AC_ARG_WITH([ffi-includes],
373 [AC_HELP_STRING([--with-ffi-includes=ARG]
374   [Find includes for libffi in ARG [default=system default]])
375 ],
376 [
377  if test "x$UseSystemLibFFI" != "xYES"; then
378     AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
379  else
380     FFIIncludeDir="$withval"
381     LIBFFI_CFLAGS="-I $withval" 
382  fi
383 ])
384
385 AC_SUBST(FFIIncludeDir)
386
387 AC_ARG_WITH([ffi-libraries],
388 [AC_HELP_STRING([--with-ffi-libraries=ARG]
389   [Find libffi in ARG [default=system default]])
390 ],
391 [
392  if test "x$UseSystemLibFFI" != "xYES"; then
393     AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
394  else
395     FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
396  fi
397 ])
398
399 AC_SUBST(FFILibDir)
400
401 AS_IF([test "$UseSystemLibFFI" = "YES"], [
402  CFLAGS2="$CFLAGS"
403  CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
404  LDFLAGS2="$LDFLAGS"
405  LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
406  AC_CHECK_LIB(ffi, ffi_call,
407   [AC_CHECK_HEADERS([ffi.h], [break], [])
408    AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
409   [AC_MSG_ERROR([Cannot find system libffi])])
410  CFLAGS="$CFLAGS2"
411  LDFLAGS="$LDFLAGS2"
412 ])
413
414 FP_ICONV
415 FP_GMP
416
417 XCODE_VERSION()
418
419 SplitObjsBroken=NO
420 if test "$TargetOS_CPP" = "darwin"
421 then
422     # Split objects is broken (#4013) with XCode < 3.2
423     if test "$XCodeVersion1" -lt 3
424     then
425         SplitObjsBroken=YES
426     else
427         if test "$XCodeVersion1" -eq 3
428         then
429             if test "$XCodeVersion2" -lt 2
430             then
431                 SplitObjsBroken=YES
432             fi
433         fi
434     fi
435 fi
436 AC_SUBST([SplitObjsBroken])
437
438 dnl ** Building a cross compiler?
439 dnl --------------------------------------------------------------
440 CrossCompiling=NO
441 # If 'host' and 'target' differ, then this means we are building a cross-compiler.
442 if test "$target" != "$host" ; then
443     CrossCompiling=YES
444     cross_compiling=yes   # This tells configure that it can accept just 'target',
445                           # otherwise you get
446                           #   configure: error: cannot run C compiled programs.
447                           #   If you meant to cross compile, use `--host'.
448 fi
449 if test "$build" != "$host" ; then
450    AC_MSG_ERROR([
451 You've selected:
452
453   BUILD:  $build   (the architecture we're building on)
454   HOST:   $host    (the architecture the compiler we're building will execute on)
455   TARGET: $target  (the architecture the compiler we're building will produce code for)
456
457 BUILD must equal HOST; that is, we do not support building GHC itself
458 with a cross-compiler.  To cross-compile GHC itself, set TARGET: stage
459 1 will be a cross-compiler, and stage 2 will be the cross-compiled
460 GHC.
461 ])
462 fi
463 if test "$CrossCompiling" = "YES"
464 then
465   CrossCompilePrefix="${target}-"
466 else
467   CrossCompilePrefix=""
468 fi
469 TargetPlatformFull="${target}"
470 AC_SUBST(CrossCompiling)
471 AC_SUBST(CrossCompilePrefix)
472 AC_SUBST(TargetPlatformFull)
473
474 dnl ** Which gcc to use?
475 dnl --------------------------------------------------------------
476 FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
477 CC="$WhatGccIsCalled"
478 export CC
479
480 dnl ** Which ld to use?
481 dnl --------------------------------------------------------------
482 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld])
483 LdCmd="$LD"
484 AC_SUBST([LdCmd])
485
486 dnl ** Which nm to use?
487 dnl --------------------------------------------------------------
488 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
489 NmCmd="$NM"
490 AC_SUBST([NmCmd])
491
492 # Note: we may not have objdump on OS X, and we only need it on Windows (for DLL checks)
493 case $HostOS_CPP in
494 cygwin32|mingw32)
495     dnl ** Which objdump to use?
496     dnl --------------------------------------------------------------
497     FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
498     ObjdumpCmd="$OBJDUMP"
499     AC_SUBST([ObjdumpCmd])
500     ;;
501 esac
502
503 dnl ** Which LLVM llc to use?
504 dnl --------------------------------------------------------------
505 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([LLC], [llc])
506 LlcCmd="$LLC"
507 AC_SUBST([LlcCmd])
508
509 dnl ** Which LLVM opt to use?
510 dnl --------------------------------------------------------------
511 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OPT], [opt])
512 OptCmd="$OPT"
513 AC_SUBST([OptCmd])
514
515 dnl ** Mac OS X: explicit deployment target
516 dnl --------------------------------------------------------------
517 AC_ARG_WITH([macosx-deployment-target],
518 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
519         [Build for Mac OS VERSION and higher  (default= version of build host)])],
520 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
521  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
522    # ignore everywhere, but on Mac OS
523    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
524    FP_MACOSX_DEPLOYMENT_TARGET=none
525  fi],
526 [FP_MACOSX_DEPLOYMENT_TARGET=none]
527 )
528 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
529 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
530 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
531
532 dnl --------------------------------------------------------------
533 dnl End of configure script option section
534 dnl --------------------------------------------------------------
535
536
537 dnl --------------------------------------------------------------
538 dnl * General configuration checks
539 dnl --------------------------------------------------------------
540
541 dnl ** Can the unix package be built?
542 dnl --------------------------------------------------------------
543
544 if test "$TargetOS" = "mingw32"
545 then
546     GhcLibsWithUnix=NO
547 else
548     GhcLibsWithUnix=YES
549 fi
550 AC_SUBST([GhcLibsWithUnix])
551
552 dnl ** does #! work?
553 AC_SYS_INTERPRETER()
554
555 dnl ** look for `perl'
556 case $HostOS_CPP in
557 cygwin32|mingw32)
558     PerlCmd=$hardtop/inplace/perl/perl
559     ;;
560 *)
561     AC_PATH_PROG(PerlCmd,perl)
562     if test -z "$PerlCmd"
563     then
564         echo "You must install perl before you can continue"
565         echo "Perhaps it is already installed, but not in your PATH?"
566         exit 1
567     else
568         FPTOOLS_CHECK_PERL_VERSION
569     fi
570     ;;
571 esac
572
573 dnl ** look for GCC and find out which version
574 dnl     Figure out which C compiler to use.  Gcc is preferred.
575 dnl     If gcc, make sure it's at least 3.0
576 dnl
577 FP_GCC_VERSION
578
579 dnl ** look to see if we have a C compiler using an llvm back end.
580 dnl
581 FP_CC_LLVM_BACKEND
582
583 FP_PROG_LD_HashSize31
584 FP_PROG_LD_ReduceMemoryOverheads
585 FP_PROG_LD_IS_GNU
586 FP_PROG_LD_BUILD_ID
587 FP_PROG_LD_NO_COMPACT_UNWIND
588
589
590 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
591 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
592 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
593 # Stage 3 won't be supported by cross-compilation
594 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
595
596 FP_GCC_EXTRA_FLAGS
597
598 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
599 AC_PROG_CPP
600
601 AC_SUBST(CONF_CC_OPTS_STAGE0)
602 AC_SUBST(CONF_CC_OPTS_STAGE1)
603 AC_SUBST(CONF_CC_OPTS_STAGE2)
604 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
605 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
606 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
607 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
608 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
609 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
610 AC_SUBST(CONF_CPP_OPTS_STAGE0)
611 AC_SUBST(CONF_CPP_OPTS_STAGE1)
612 AC_SUBST(CONF_CPP_OPTS_STAGE2)
613
614 dnl ** Set up the variables for the platform in the settings file.
615 dnl May need to use gcc to find platform details.
616 dnl --------------------------------------------------------------
617 FPTOOLS_SET_HASKELL_PLATFORM_VARS
618
619 dnl ** figure out how to do context diffs
620 FP_PROG_CONTEXT_DIFF
621
622 dnl Let's make sure install-sh is executable here.  If we got it from
623 dnl a darcs repo, it might not be (see bug #978).
624 chmod +x install-sh
625 dnl ** figure out how to do a BSD-ish install
626 AC_PROG_INSTALL
627
628 dnl If you can run configure, you certainly have /bin/sh
629 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
630
631 dnl ** how to invoke `ar' and `ranlib'
632 FP_PROG_AR_SUPPORTS_ATFILE
633 FP_PROG_AR_NEEDS_RANLIB
634
635 dnl ** Check to see whether ln -s works
636 AC_PROG_LN_S
637
638 FP_SETTINGS
639
640 dnl ** Find the path to sed
641 AC_PATH_PROGS(SedCmd,gsed sed,sed)
642
643
644 dnl ** check for time command
645 AC_PATH_PROG(TimeCmd,time)
646
647 dnl ** check for tar
648 dnl   if GNU tar is named gtar, look for it first.
649 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
650
651 dnl ** check for patch
652 dnl if GNU patch is named gpatch, look for it first
653 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
654
655 dnl ** check for dtrace (currently only implemented for Mac OS X)
656 HaveDtrace=NO
657 AC_PATH_PROG(DtraceCmd,dtrace)
658 if test -n "$DtraceCmd"; then
659   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
660     HaveDtrace=YES
661   fi
662 fi
663 AC_SUBST(HaveDtrace)
664
665 AC_PATH_PROG(HSCOLOUR,HsColour)
666 # HsColour is passed to Cabal, so we need a native path
667 if test "$HostOS"      = "mingw32" && \
668    test "${OSTYPE}"   != "msys"    && \
669    test "${HSCOLOUR}" != ""
670 then
671     # Canonicalise to <drive>:/path/to/gcc
672     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
673 fi
674
675 dnl ** check for DocBook toolchain
676 FP_CHECK_DOCBOOK_DTD
677 FP_DOCBOOK_XSL
678 FP_PROG_DBLATEX
679
680 dnl ** check for ghc-pkg command
681 FP_PROG_GHC_PKG
682
683 dnl ** check for installed happy binary + version
684 dnl    (don't do it if we're booting from .hc files though.)
685 if test "$BootingFromHc" = "NO"; then
686 FPTOOLS_HAPPY
687 fi;
688
689 dnl ** check for installed alex binary + version
690 dnl    (don't do it if we're booting from .hc files though.)
691 if test "$BootingFromHc" = "NO"; then
692 FPTOOLS_ALEX
693 fi;
694
695 dnl --------------------------------------------------
696 dnl ### program checking section ends here ###
697 dnl --------------------------------------------------
698
699 dnl --------------------------------------------------
700 dnl * Platform header file and syscall feature tests
701 dnl ### checking the state of the local header files and syscalls ###
702
703 dnl ** check for full ANSI header (.h) files
704 AC_HEADER_STDC
705
706 dnl ** Enable large file support.  NB. do this before testing the type of
707 dnl    off_t, because it will affect the result of that test.
708 AC_SYS_LARGEFILE
709
710 dnl ** check for specific header (.h) files that we are interested in
711 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])
712
713 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
714 AC_HEADER_TIME
715
716 dnl ** do we have long longs?
717 AC_CHECK_TYPES([long long])
718
719 dnl ** what are the sizes of various types
720 AC_CHECK_SIZEOF(char,               1)
721 AC_CHECK_SIZEOF(double,             8)
722 AC_CHECK_SIZEOF(float,              4)
723 AC_CHECK_SIZEOF(int,                4)
724 AC_CHECK_SIZEOF(long,               4)
725 if test "$ac_cv_type_long_long" = yes; then
726 AC_CHECK_SIZEOF(long long,          8)
727 fi
728 AC_CHECK_SIZEOF(short,              2)
729 AC_CHECK_SIZEOF(unsigned char,      1)
730 AC_CHECK_SIZEOF(unsigned int,       4)
731 AC_CHECK_SIZEOF(unsigned long,      4)
732 if test "$ac_cv_type_long_long" = yes; then
733 AC_CHECK_SIZEOF(unsigned long long, 8)
734 fi
735 AC_CHECK_SIZEOF(unsigned short,     2)
736 AC_CHECK_SIZEOF(void *,             4)
737
738 dnl for use in settings.in
739 WordSize=$ac_cv_sizeof_void_p
740 AC_SUBST(WordSize)
741
742 dnl ** what are alignment constraints on various types
743 FP_CHECK_ALIGNMENT(char)
744 FP_CHECK_ALIGNMENT(double)
745 FP_CHECK_ALIGNMENT(float)
746 FP_CHECK_ALIGNMENT(int)
747 FP_CHECK_ALIGNMENT(long)
748 if test "$ac_cv_type_long_long" = yes; then
749 FP_CHECK_ALIGNMENT(long long)
750 fi
751 FP_CHECK_ALIGNMENT(short)
752 FP_CHECK_ALIGNMENT(unsigned char)
753 FP_CHECK_ALIGNMENT(unsigned int)
754 FP_CHECK_ALIGNMENT(unsigned long)
755 if test "$ac_cv_type_long_long" = yes; then
756 FP_CHECK_ALIGNMENT(unsigned long long)
757 fi
758 FP_CHECK_ALIGNMENT(unsigned short)
759 FP_CHECK_ALIGNMENT(void *)
760
761 FP_CHECK_FUNC([WinExec],
762   [@%:@include <windows.h>], [WinExec("",0)])
763
764 FP_CHECK_FUNC([GetModuleFileName],
765   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
766
767 dnl ** check return type of signal handlers
768 dnl Foo: assumes we can use prototypes.
769 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
770 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
771 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
772 dnl #include <signal.h>
773 dnl #ifdef signal
774 dnl #undef signal
775 dnl #endif
776 dnl void (*signal (int, void (*)(int)))(int);
777 dnl ]],
778 dnl [[int i;]])],
779 dnl [ac_cv_type_signal_handler=void_int],
780 dnl [ac_cv_type_signal_handler=int_void])])
781 dnl if test "$ac_cv_type_signal_handler" = void_int; then
782 dnl AC_DEFINE(VOID_INT_SIGNALS)
783 dnl fi
784
785 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
786 AC_TYPE_SIGNAL
787 if test "$ac_cv_type_signal" = void; then
788   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).])
789 fi
790
791 dnl ** check for more functions
792 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
793 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
794
795 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
796 dnl ** _POSIX_C_SOURCE is defined
797 AC_CHECK_DECLS([ctime_r], , ,
798 [#define _POSIX_SOURCE 1
799 #define _POSIX_C_SOURCE 199506L
800 #include <time.h>])
801
802 dnl ** check for mingwex library
803 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
804 AC_SUBST(HaveLibMingwEx)
805
806 if test $HaveLibMingwEx = YES ; then
807   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
808 fi
809
810 dnl ** check for math library
811 dnl    Keep that check as early as possible.
812 dnl    as we need to know whether we need libm
813 dnl    for math functions or not
814 dnl    (see http://hackage.haskell.org/trac/ghc/ticket/3730)
815 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
816 if test $HaveLibM = YES
817 then
818   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
819 fi
820
821 dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
822 dnl    the order of these tests matters: bfd needs libiberty
823 AC_CHECK_LIB(iberty, xmalloc)
824 AC_CHECK_LIB(bfd,    bfd_uncompress_section_contents)
825
826 dnl ################################################################
827 dnl Check for libraries
828 dnl ################################################################
829
830 dnl ** check whether we need -ldl to get dlopen()
831
832 AC_CHECK_LIB(dl, dlopen,
833     [HaveLibDL=YES
834      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
835      LIBS="$LIBS -ldl"],
836     [HaveLibDL=NO])
837 AC_SUBST(HaveLibDL)
838
839 dnl --------------------------------------------------
840 dnl * Miscellaneous feature tests
841 dnl --------------------------------------------------
842
843 dnl ** can we get alloca?
844 AC_FUNC_ALLOCA
845
846 dnl ** working vfork?
847 AC_FUNC_FORK
848
849 dnl ** determine whether or not const works
850 AC_C_CONST
851
852 dnl ** are we big endian?
853 AC_C_BIGENDIAN
854 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
855
856 dnl ** check for leading underscores in symbol names
857 FP_LEADING_UNDERSCORE
858
859 FP_VISIBILITY_HIDDEN
860
861 dnl ** check for librt
862 AC_CHECK_LIB(rt, clock_gettime)
863 AC_CHECK_FUNCS(clock_gettime timer_settime)
864 FP_CHECK_TIMER_CREATE
865
866 dnl ** check for Apple's "interesting" long double compatibility scheme
867 AC_MSG_CHECKING(for printf\$LDBLStub)
868 AC_TRY_LINK_FUNC(printf\$LDBLStub,
869     [
870         AC_MSG_RESULT(yes)
871         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
872             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
873     ],
874     [
875         AC_MSG_RESULT(no)
876         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
877             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
878     ])
879
880 dnl ** check for eventfd which is needed by the I/O manager
881 AC_CHECK_HEADERS([sys/eventfd.h])
882 AC_CHECK_FUNCS([eventfd])
883
884 # test for GTK+
885 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
886 if test -n "$GTK_CONFIG"; then
887   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
888     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
889   else
890     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
891     GTK_CONFIG=
892   fi
893 fi
894 AC_SUBST([GTK_CONFIG])
895
896 # checking for PAPI
897 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
898 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
899 AC_SUBST(HavePapiLib)
900 AC_SUBST(HavePapiHeader)
901
902 AC_CHECK_FUNCS(__mingw_vfprintf)
903
904 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
905    HavePapi=YES
906 else
907    HavePapi=NO
908 fi
909 AC_SUBST(HavePapi)
910
911 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
912    test "$XsltprocCmd" = ""
913 then
914     BUILD_DOCBOOK_HTML=NO
915 else
916     BUILD_DOCBOOK_HTML=YES
917 fi
918 AC_SUBST(BUILD_DOCBOOK_HTML)
919
920 if test "$DblatexCmd" = ""
921 then
922     BUILD_DOCBOOK_PS=NO
923     BUILD_DOCBOOK_PDF=NO
924 else
925     BUILD_DOCBOOK_PS=YES
926     BUILD_DOCBOOK_PDF=YES
927 fi
928 AC_SUBST(BUILD_DOCBOOK_PS)
929 AC_SUBST(BUILD_DOCBOOK_PDF)
930
931 LIBRARY_VERSION(base)
932 LIBRARY_VERSION(Cabal, Cabal/Cabal)
933 LIBRARY_VERSION(ghc-prim)
934 LIBRARY_ghc_VERSION="$ProjectVersion"
935 AC_SUBST(LIBRARY_ghc_VERSION)
936
937 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
938    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
939 fi
940
941 AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal ghc.spec settings docs/users_guide/ug-book.xml docs/users_guide/ug-ent.xml docs/index.html libraries/prologue.txt distrib/ghc.iss distrib/configure.ac])
942 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
943 AC_OUTPUT
944
945 # We got caught by
946 #     http://savannah.gnu.org/bugs/index.php?1516
947 #     $(eval ...) inside conditionals causes errors
948 # with make 3.80, so warn the user if it looks like they're about to
949 # try to use it.
950 # We would use "grep -q" here, but Solaris's grep doesn't support it.
951 checkMake380() {
952     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
953     then
954         echo
955         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
956         echo "This version cannot be used to build GHC."
957         echo "Please use GNU make >= 3.81."
958     fi
959 }
960
961 checkMake380 make
962 checkMake380 gmake
963
964 echo ["
965 ----------------------------------------------------------------------
966 Configure completed successfully.
967
968    Building GHC version  : $ProjectVersion
969
970    Build platform        : $BuildPlatform
971    Host platform         : $HostPlatform
972    Target platform       : $TargetPlatform
973 "]
974
975 if test "$BootingFromHc" = "YES"; then
976 echo ["\
977    Bootstrapping from HC files.
978 "]
979 else
980 echo ["\
981    Bootstrapping using   : $WithGhc
982       which is version   : $GhcVersion
983 "]
984 fi
985
986 echo ["\
987    Using GCC                 : $WhatGccIsCalled
988       which is version       : $GccVersion
989    Building a cross compiler : $CrossCompiling
990
991    ld       : $LdCmd
992    Happy    : $HappyCmd ($HappyVersion)
993    Alex     : $AlexCmd ($AlexVersion)
994    Perl     : $PerlCmd
995    dblatex  : $DblatexCmd
996    xsltproc : $XsltprocCmd"]
997
998 if test "$HSCOLOUR" = ""; then
999 echo ["
1000    HsColour was not found; documentation will not contain source links
1001 "]
1002 else
1003 echo ["\
1004    HsColour : $HSCOLOUR
1005 "]
1006 fi
1007
1008 echo ["\
1009    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1010    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
1011    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
1012
1013 echo ["----------------------------------------------------------------------
1014 "]
1015
1016 echo "\
1017 For a standard build of GHC (fully optimised with profiling), type (g)make.
1018
1019 To make changes to the default build configuration, copy the file
1020 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1021
1022 For more information on how to configure your GHC build, see
1023    http://hackage.haskell.org/trac/ghc/wiki/Building
1024 "