Detect hard/soft float in the same way as other ARM features
[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 AC_ARG_WITH([alien],
474 [AC_HELP_STRING([--with-alien=ARG],
475   [Supply script for running target binaries locally when cross-compiling])],
476   [AlienScript="$withval"],
477   [AlienScript=""])
478 AC_SUBST(AlienScript)
479
480 dnl ** Which gcc to use?
481 dnl --------------------------------------------------------------
482 FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
483 CC="$WhatGccIsCalled"
484 export CC
485
486 dnl ** Which ld to use?
487 dnl --------------------------------------------------------------
488 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld])
489 LdCmd="$LD"
490 AC_SUBST([LdCmd])
491
492 dnl ** Which nm to use?
493 dnl --------------------------------------------------------------
494 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
495 NmCmd="$NM"
496 AC_SUBST([NmCmd])
497
498 # Note: we may not have objdump on OS X, and we only need it on Windows (for DLL checks)
499 case $HostOS_CPP in
500 cygwin32|mingw32)
501     dnl ** Which objdump to use?
502     dnl --------------------------------------------------------------
503     FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
504     ObjdumpCmd="$OBJDUMP"
505     AC_SUBST([ObjdumpCmd])
506     ;;
507 esac
508
509 dnl ** Which LLVM llc to use?
510 dnl --------------------------------------------------------------
511 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([LLC], [llc])
512 LlcCmd="$LLC"
513 AC_SUBST([LlcCmd])
514
515 dnl ** Which LLVM opt to use?
516 dnl --------------------------------------------------------------
517 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OPT], [opt])
518 OptCmd="$OPT"
519 AC_SUBST([OptCmd])
520
521 dnl ** Mac OS X: explicit deployment target
522 dnl --------------------------------------------------------------
523 AC_ARG_WITH([macosx-deployment-target],
524 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
525         [Build for Mac OS VERSION and higher  (default= version of build host)])],
526 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
527  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
528    # ignore everywhere, but on Mac OS
529    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
530    FP_MACOSX_DEPLOYMENT_TARGET=none
531  fi],
532 [FP_MACOSX_DEPLOYMENT_TARGET=none]
533 )
534 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
535 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
536 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
537
538 dnl --------------------------------------------------------------
539 dnl End of configure script option section
540 dnl --------------------------------------------------------------
541
542
543 dnl --------------------------------------------------------------
544 dnl * General configuration checks
545 dnl --------------------------------------------------------------
546
547 dnl ** Can the unix package be built?
548 dnl --------------------------------------------------------------
549
550 if test "$TargetOS" = "mingw32"
551 then
552     GhcLibsWithUnix=NO
553 else
554     GhcLibsWithUnix=YES
555 fi
556 AC_SUBST([GhcLibsWithUnix])
557
558 dnl ** does #! work?
559 AC_SYS_INTERPRETER()
560
561 dnl ** look for `perl'
562 case $HostOS_CPP in
563 cygwin32|mingw32)
564     PerlCmd=$hardtop/inplace/perl/perl
565     ;;
566 *)
567     AC_PATH_PROG(PerlCmd,perl)
568     if test -z "$PerlCmd"
569     then
570         echo "You must install perl before you can continue"
571         echo "Perhaps it is already installed, but not in your PATH?"
572         exit 1
573     else
574         FPTOOLS_CHECK_PERL_VERSION
575     fi
576     ;;
577 esac
578
579 dnl ** look for GCC and find out which version
580 dnl     Figure out which C compiler to use.  Gcc is preferred.
581 dnl     If gcc, make sure it's at least 3.0
582 dnl
583 FP_GCC_VERSION
584
585 dnl ** look to see if we have a C compiler using an llvm back end.
586 dnl
587 FP_CC_LLVM_BACKEND
588
589 FP_PROG_LD_HashSize31
590 FP_PROG_LD_ReduceMemoryOverheads
591 FP_PROG_LD_IS_GNU
592 FP_PROG_LD_BUILD_ID
593 FP_PROG_LD_NO_COMPACT_UNWIND
594
595
596 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
597 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
598 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
599 # Stage 3 won't be supported by cross-compilation
600 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
601
602 FP_GCC_EXTRA_FLAGS
603
604 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
605 AC_PROG_CPP
606
607 AC_SUBST(CONF_CC_OPTS_STAGE0)
608 AC_SUBST(CONF_CC_OPTS_STAGE1)
609 AC_SUBST(CONF_CC_OPTS_STAGE2)
610 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
611 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
612 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
613 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
614 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
615 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
616 AC_SUBST(CONF_CPP_OPTS_STAGE0)
617 AC_SUBST(CONF_CPP_OPTS_STAGE1)
618 AC_SUBST(CONF_CPP_OPTS_STAGE2)
619
620 dnl ** Set up the variables for the platform in the settings file.
621 dnl May need to use gcc to find platform details.
622 dnl --------------------------------------------------------------
623 FPTOOLS_SET_HASKELL_PLATFORM_VARS
624
625 dnl ** figure out how to do context diffs
626 FP_PROG_CONTEXT_DIFF
627
628 dnl Let's make sure install-sh is executable here.  If we got it from
629 dnl a darcs repo, it might not be (see bug #978).
630 chmod +x install-sh
631 dnl ** figure out how to do a BSD-ish install
632 AC_PROG_INSTALL
633
634 dnl If you can run configure, you certainly have /bin/sh
635 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
636
637 dnl ** how to invoke `ar' and `ranlib'
638 FP_PROG_AR_SUPPORTS_ATFILE
639 FP_PROG_AR_NEEDS_RANLIB
640
641 dnl ** Check to see whether ln -s works
642 AC_PROG_LN_S
643
644 FP_SETTINGS
645
646 dnl ** Find the path to sed
647 AC_PATH_PROGS(SedCmd,gsed sed,sed)
648
649
650 dnl ** check for time command
651 AC_PATH_PROG(TimeCmd,time)
652
653 dnl ** check for tar
654 dnl   if GNU tar is named gtar, look for it first.
655 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
656
657 dnl ** check for patch
658 dnl if GNU patch is named gpatch, look for it first
659 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
660
661 dnl ** check for dtrace (currently only implemented for Mac OS X)
662 HaveDtrace=NO
663 AC_PATH_PROG(DtraceCmd,dtrace)
664 if test -n "$DtraceCmd"; then
665   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
666     HaveDtrace=YES
667   fi
668 fi
669 AC_SUBST(HaveDtrace)
670
671 AC_PATH_PROG(HSCOLOUR,HsColour)
672 # HsColour is passed to Cabal, so we need a native path
673 if test "$HostOS"      = "mingw32" && \
674    test "${OSTYPE}"   != "msys"    && \
675    test "${HSCOLOUR}" != ""
676 then
677     # Canonicalise to <drive>:/path/to/gcc
678     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
679 fi
680
681 dnl ** check for DocBook toolchain
682 FP_CHECK_DOCBOOK_DTD
683 FP_DOCBOOK_XSL
684 FP_PROG_DBLATEX
685
686 dnl ** check for ghc-pkg command
687 FP_PROG_GHC_PKG
688
689 dnl ** check for installed happy binary + version
690 dnl    (don't do it if we're booting from .hc files though.)
691 if test "$BootingFromHc" = "NO"; then
692 FPTOOLS_HAPPY
693 fi;
694
695 dnl ** check for installed alex binary + version
696 dnl    (don't do it if we're booting from .hc files though.)
697 if test "$BootingFromHc" = "NO"; then
698 FPTOOLS_ALEX
699 fi;
700
701 dnl --------------------------------------------------
702 dnl ### program checking section ends here ###
703 dnl --------------------------------------------------
704
705 dnl --------------------------------------------------
706 dnl * Platform header file and syscall feature tests
707 dnl ### checking the state of the local header files and syscalls ###
708
709 dnl ** check for full ANSI header (.h) files
710 AC_HEADER_STDC
711
712 dnl ** Enable large file support.  NB. do this before testing the type of
713 dnl    off_t, because it will affect the result of that test.
714 AC_SYS_LARGEFILE
715
716 dnl ** check for specific header (.h) files that we are interested in
717 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])
718
719 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
720 AC_HEADER_TIME
721
722 dnl ** do we have long longs?
723 AC_CHECK_TYPES([long long])
724
725 dnl ** what are the sizes of various types
726 AC_CHECK_SIZEOF(char,               1)
727 AC_CHECK_SIZEOF(double,             8)
728 AC_CHECK_SIZEOF(float,              4)
729 AC_CHECK_SIZEOF(int,                4)
730 AC_CHECK_SIZEOF(long,               4)
731 if test "$ac_cv_type_long_long" = yes; then
732 AC_CHECK_SIZEOF(long long,          8)
733 fi
734 AC_CHECK_SIZEOF(short,              2)
735 AC_CHECK_SIZEOF(unsigned char,      1)
736 AC_CHECK_SIZEOF(unsigned int,       4)
737 AC_CHECK_SIZEOF(unsigned long,      4)
738 if test "$ac_cv_type_long_long" = yes; then
739 AC_CHECK_SIZEOF(unsigned long long, 8)
740 fi
741 AC_CHECK_SIZEOF(unsigned short,     2)
742 AC_CHECK_SIZEOF(void *,             4)
743
744 dnl for use in settings.in
745 WordSize=$ac_cv_sizeof_void_p
746 AC_SUBST(WordSize)
747
748 dnl ** what are alignment constraints on various types
749 FP_CHECK_ALIGNMENT(char)
750 FP_CHECK_ALIGNMENT(double)
751 FP_CHECK_ALIGNMENT(float)
752 FP_CHECK_ALIGNMENT(int)
753 FP_CHECK_ALIGNMENT(long)
754 if test "$ac_cv_type_long_long" = yes; then
755 FP_CHECK_ALIGNMENT(long long)
756 fi
757 FP_CHECK_ALIGNMENT(short)
758 FP_CHECK_ALIGNMENT(unsigned char)
759 FP_CHECK_ALIGNMENT(unsigned int)
760 FP_CHECK_ALIGNMENT(unsigned long)
761 if test "$ac_cv_type_long_long" = yes; then
762 FP_CHECK_ALIGNMENT(unsigned long long)
763 fi
764 FP_CHECK_ALIGNMENT(unsigned short)
765 FP_CHECK_ALIGNMENT(void *)
766
767 FP_CHECK_FUNC([WinExec],
768   [@%:@include <windows.h>], [WinExec("",0)])
769
770 FP_CHECK_FUNC([GetModuleFileName],
771   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
772
773 dnl ** check return type of signal handlers
774 dnl Foo: assumes we can use prototypes.
775 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
776 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
777 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
778 dnl #include <signal.h>
779 dnl #ifdef signal
780 dnl #undef signal
781 dnl #endif
782 dnl void (*signal (int, void (*)(int)))(int);
783 dnl ]],
784 dnl [[int i;]])],
785 dnl [ac_cv_type_signal_handler=void_int],
786 dnl [ac_cv_type_signal_handler=int_void])])
787 dnl if test "$ac_cv_type_signal_handler" = void_int; then
788 dnl AC_DEFINE(VOID_INT_SIGNALS)
789 dnl fi
790
791 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
792 AC_TYPE_SIGNAL
793 if test "$ac_cv_type_signal" = void; then
794   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).])
795 fi
796
797 dnl ** check for more functions
798 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
799 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
800
801 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
802 dnl ** _POSIX_C_SOURCE is defined
803 AC_CHECK_DECLS([ctime_r], , ,
804 [#define _POSIX_SOURCE 1
805 #define _POSIX_C_SOURCE 199506L
806 #include <time.h>])
807
808 dnl ** check for mingwex library
809 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
810 AC_SUBST(HaveLibMingwEx)
811
812 if test $HaveLibMingwEx = YES ; then
813   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
814 fi
815
816 dnl ** check for math library
817 dnl    Keep that check as early as possible.
818 dnl    as we need to know whether we need libm
819 dnl    for math functions or not
820 dnl    (see http://hackage.haskell.org/trac/ghc/ticket/3730)
821 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
822 if test $HaveLibM = YES
823 then
824   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
825 fi
826
827 dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
828 dnl    the order of these tests matters: bfd needs libiberty
829 AC_CHECK_LIB(iberty, xmalloc)
830 AC_CHECK_LIB(bfd,    bfd_uncompress_section_contents)
831
832 dnl ################################################################
833 dnl Check for libraries
834 dnl ################################################################
835
836 dnl ** check whether we need -ldl to get dlopen()
837
838 AC_CHECK_LIB(dl, dlopen,
839     [HaveLibDL=YES
840      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
841      LIBS="$LIBS -ldl"],
842     [HaveLibDL=NO])
843 AC_SUBST(HaveLibDL)
844
845 dnl --------------------------------------------------
846 dnl * Miscellaneous feature tests
847 dnl --------------------------------------------------
848
849 dnl ** can we get alloca?
850 AC_FUNC_ALLOCA
851
852 dnl ** working vfork?
853 AC_FUNC_FORK
854
855 dnl ** determine whether or not const works
856 AC_C_CONST
857
858 dnl ** are we big endian?
859 AC_C_BIGENDIAN
860 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
861
862 dnl ** check for leading underscores in symbol names
863 FP_LEADING_UNDERSCORE
864
865 FP_VISIBILITY_HIDDEN
866
867 dnl ** check for librt
868 AC_CHECK_LIB(rt, clock_gettime)
869 AC_CHECK_FUNCS(clock_gettime timer_settime)
870 FP_CHECK_TIMER_CREATE
871
872 dnl ** check for Apple's "interesting" long double compatibility scheme
873 AC_MSG_CHECKING(for printf\$LDBLStub)
874 AC_TRY_LINK_FUNC(printf\$LDBLStub,
875     [
876         AC_MSG_RESULT(yes)
877         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
878             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
879     ],
880     [
881         AC_MSG_RESULT(no)
882         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
883             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
884     ])
885
886 dnl ** check for eventfd which is needed by the I/O manager
887 AC_CHECK_HEADERS([sys/eventfd.h])
888 AC_CHECK_FUNCS([eventfd])
889
890 # test for GTK+
891 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
892 if test -n "$GTK_CONFIG"; then
893   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
894     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
895   else
896     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
897     GTK_CONFIG=
898   fi
899 fi
900 AC_SUBST([GTK_CONFIG])
901
902 # checking for PAPI
903 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
904 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
905 AC_SUBST(HavePapiLib)
906 AC_SUBST(HavePapiHeader)
907
908 AC_CHECK_FUNCS(__mingw_vfprintf)
909
910 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
911    HavePapi=YES
912 else
913    HavePapi=NO
914 fi
915 AC_SUBST(HavePapi)
916
917 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
918    test "$XsltprocCmd" = ""
919 then
920     BUILD_DOCBOOK_HTML=NO
921 else
922     BUILD_DOCBOOK_HTML=YES
923 fi
924 AC_SUBST(BUILD_DOCBOOK_HTML)
925
926 if test "$DblatexCmd" = ""
927 then
928     BUILD_DOCBOOK_PS=NO
929     BUILD_DOCBOOK_PDF=NO
930 else
931     BUILD_DOCBOOK_PS=YES
932     BUILD_DOCBOOK_PDF=YES
933 fi
934 AC_SUBST(BUILD_DOCBOOK_PS)
935 AC_SUBST(BUILD_DOCBOOK_PDF)
936
937 LIBRARY_VERSION(base)
938 LIBRARY_VERSION(Cabal, Cabal/Cabal)
939 LIBRARY_VERSION(ghc-prim)
940 LIBRARY_ghc_VERSION="$ProjectVersion"
941 AC_SUBST(LIBRARY_ghc_VERSION)
942
943 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
944    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
945 fi
946
947 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])
948 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
949 AC_OUTPUT
950
951 # We got caught by
952 #     http://savannah.gnu.org/bugs/index.php?1516
953 #     $(eval ...) inside conditionals causes errors
954 # with make 3.80, so warn the user if it looks like they're about to
955 # try to use it.
956 # We would use "grep -q" here, but Solaris's grep doesn't support it.
957 checkMake380() {
958     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
959     then
960         echo
961         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
962         echo "This version cannot be used to build GHC."
963         echo "Please use GNU make >= 3.81."
964     fi
965 }
966
967 checkMake380 make
968 checkMake380 gmake
969
970 echo ["
971 ----------------------------------------------------------------------
972 Configure completed successfully.
973
974    Building GHC version  : $ProjectVersion
975
976    Build platform        : $BuildPlatform
977    Host platform         : $HostPlatform
978    Target platform       : $TargetPlatform
979 "]
980
981 if test "$BootingFromHc" = "YES"; then
982 echo ["\
983    Bootstrapping from HC files.
984 "]
985 else
986 echo ["\
987    Bootstrapping using   : $WithGhc
988       which is version   : $GhcVersion
989 "]
990 fi
991
992 echo ["\
993    Using GCC                 : $WhatGccIsCalled
994       which is version       : $GccVersion
995    Building a cross compiler : $CrossCompiling
996    Alien script              : $AlienScript
997
998    ld       : $LdCmd
999    Happy    : $HappyCmd ($HappyVersion)
1000    Alex     : $AlexCmd ($AlexVersion)
1001    Perl     : $PerlCmd
1002    dblatex  : $DblatexCmd
1003    xsltproc : $XsltprocCmd"]
1004
1005 if test "$HSCOLOUR" = ""; then
1006 echo ["
1007    HsColour was not found; documentation will not contain source links
1008 "]
1009 else
1010 echo ["\
1011    HsColour : $HSCOLOUR
1012 "]
1013 fi
1014
1015 echo ["\
1016    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1017    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
1018    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
1019
1020 echo ["----------------------------------------------------------------------
1021 "]
1022
1023 echo "\
1024 For a standard build of GHC (fully optimised with profiling), type (g)make.
1025
1026 To make changes to the default build configuration, copy the file
1027 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1028
1029 For more information on how to configure your GHC build, see
1030    http://hackage.haskell.org/trac/ghc/wiki/Building
1031 "