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