Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
[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   [AC_MSG_ERROR([Cannot find system libffi])])
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 ** look for GCC and find out which version
607 dnl     Figure out which C compiler to use.  Gcc is preferred.
608 dnl     If gcc, make sure it's at least 3.0
609 dnl
610 FP_GCC_VERSION
611
612 dnl ** look to see if we have a C compiler using an llvm back end.
613 dnl
614 FP_CC_LLVM_BACKEND
615
616 FP_PROG_LD_HashSize31
617 FP_PROG_LD_ReduceMemoryOverheads
618 FP_PROG_LD_IS_GNU
619 FP_PROG_LD_BUILD_ID
620 FP_PROG_LD_NO_COMPACT_UNWIND
621
622
623 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
624 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
625 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
626 # Stage 3 won't be supported by cross-compilation
627 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
628
629 FP_GCC_EXTRA_FLAGS
630
631 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
632 AC_PROG_CPP
633
634 AC_SUBST(CONF_CC_OPTS_STAGE0)
635 AC_SUBST(CONF_CC_OPTS_STAGE1)
636 AC_SUBST(CONF_CC_OPTS_STAGE2)
637 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
638 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
639 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
640 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
641 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
642 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
643 AC_SUBST(CONF_CPP_OPTS_STAGE0)
644 AC_SUBST(CONF_CPP_OPTS_STAGE1)
645 AC_SUBST(CONF_CPP_OPTS_STAGE2)
646
647 dnl ** Set up the variables for the platform in the settings file.
648 dnl May need to use gcc to find platform details.
649 dnl --------------------------------------------------------------
650 FPTOOLS_SET_HASKELL_PLATFORM_VARS
651
652 dnl ** figure out how to do context diffs
653 FP_PROG_CONTEXT_DIFF
654
655 dnl Let's make sure install-sh is executable here.  If we got it from
656 dnl a darcs repo, it might not be (see bug #978).
657 chmod +x install-sh
658 dnl ** figure out how to do a BSD-ish install
659 AC_PROG_INSTALL
660
661 dnl If you can run configure, you certainly have /bin/sh
662 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
663
664 dnl ** how to invoke `ar' and `ranlib'
665 FP_PROG_AR_SUPPORTS_ATFILE
666 FP_PROG_AR_NEEDS_RANLIB
667
668 dnl ** Check to see whether ln -s works
669 AC_PROG_LN_S
670
671 FP_SETTINGS
672
673 dnl ** Find the path to sed
674 AC_PATH_PROGS(SedCmd,gsed sed,sed)
675
676
677 dnl ** check for time command
678 AC_PATH_PROG(TimeCmd,time)
679
680 dnl ** check for tar
681 dnl   if GNU tar is named gtar, look for it first.
682 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
683
684 dnl ** check for patch
685 dnl if GNU patch is named gpatch, look for it first
686 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
687
688 dnl ** check for dtrace (currently only implemented for Mac OS X)
689 HaveDtrace=NO
690 AC_PATH_PROG(DtraceCmd,dtrace)
691 if test -n "$DtraceCmd"; then
692   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
693     HaveDtrace=YES
694   fi
695 fi
696 AC_SUBST(HaveDtrace)
697
698 AC_PATH_PROG(HSCOLOUR,HsColour)
699 # HsColour is passed to Cabal, so we need a native path
700 if test "$HostOS"      = "mingw32" && \
701    test "${OSTYPE}"   != "msys"    && \
702    test "${HSCOLOUR}" != ""
703 then
704     # Canonicalise to <drive>:/path/to/gcc
705     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
706 fi
707
708 dnl ** check for DocBook toolchain
709 FP_CHECK_DOCBOOK_DTD
710 FP_DOCBOOK_XSL
711 FP_PROG_DBLATEX
712
713 dnl ** check for ghc-pkg command
714 FP_PROG_GHC_PKG
715
716 dnl ** check for installed happy binary + version
717 dnl    (don't do it if we're booting from .hc files though.)
718 if test "$BootingFromHc" = "NO"; then
719 FPTOOLS_HAPPY
720 fi;
721
722 dnl ** check for installed alex binary + version
723 dnl    (don't do it if we're booting from .hc files though.)
724 if test "$BootingFromHc" = "NO"; then
725 FPTOOLS_ALEX
726 fi;
727
728 dnl --------------------------------------------------
729 dnl ### program checking section ends here ###
730 dnl --------------------------------------------------
731
732 dnl --------------------------------------------------
733 dnl * Platform header file and syscall feature tests
734 dnl ### checking the state of the local header files and syscalls ###
735
736 dnl ** check for full ANSI header (.h) files
737 AC_HEADER_STDC
738
739 dnl ** Enable large file support.  NB. do this before testing the type of
740 dnl    off_t, because it will affect the result of that test.
741 AC_SYS_LARGEFILE
742
743 dnl ** check for specific header (.h) files that we are interested in
744 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])
745
746 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
747 AC_HEADER_TIME
748
749 dnl ** do we have long longs?
750 AC_CHECK_TYPES([long long])
751
752 dnl ** what are the sizes of various types
753 AC_CHECK_SIZEOF(char,               1)
754 AC_CHECK_SIZEOF(double,             8)
755 AC_CHECK_SIZEOF(float,              4)
756 AC_CHECK_SIZEOF(int,                4)
757 AC_CHECK_SIZEOF(long,               4)
758 if test "$ac_cv_type_long_long" = yes; then
759 AC_CHECK_SIZEOF(long long,          8)
760 fi
761 AC_CHECK_SIZEOF(short,              2)
762 AC_CHECK_SIZEOF(unsigned char,      1)
763 AC_CHECK_SIZEOF(unsigned int,       4)
764 AC_CHECK_SIZEOF(unsigned long,      4)
765 if test "$ac_cv_type_long_long" = yes; then
766 AC_CHECK_SIZEOF(unsigned long long, 8)
767 fi
768 AC_CHECK_SIZEOF(unsigned short,     2)
769 AC_CHECK_SIZEOF(void *,             4)
770
771 dnl for use in settings.in
772 WordSize=$ac_cv_sizeof_void_p
773 AC_SUBST(WordSize)
774
775 dnl ** what are alignment constraints on various types
776 FP_CHECK_ALIGNMENT(char)
777 FP_CHECK_ALIGNMENT(double)
778 FP_CHECK_ALIGNMENT(float)
779 FP_CHECK_ALIGNMENT(int)
780 FP_CHECK_ALIGNMENT(long)
781 if test "$ac_cv_type_long_long" = yes; then
782 FP_CHECK_ALIGNMENT(long long)
783 fi
784 FP_CHECK_ALIGNMENT(short)
785 FP_CHECK_ALIGNMENT(unsigned char)
786 FP_CHECK_ALIGNMENT(unsigned int)
787 FP_CHECK_ALIGNMENT(unsigned long)
788 if test "$ac_cv_type_long_long" = yes; then
789 FP_CHECK_ALIGNMENT(unsigned long long)
790 fi
791 FP_CHECK_ALIGNMENT(unsigned short)
792 FP_CHECK_ALIGNMENT(void *)
793
794 FP_CHECK_FUNC([WinExec],
795   [@%:@include <windows.h>], [WinExec("",0)])
796
797 FP_CHECK_FUNC([GetModuleFileName],
798   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
799
800 dnl ** check return type of signal handlers
801 dnl Foo: assumes we can use prototypes.
802 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
803 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
804 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
805 dnl #include <signal.h>
806 dnl #ifdef signal
807 dnl #undef signal
808 dnl #endif
809 dnl void (*signal (int, void (*)(int)))(int);
810 dnl ]],
811 dnl [[int i;]])],
812 dnl [ac_cv_type_signal_handler=void_int],
813 dnl [ac_cv_type_signal_handler=int_void])])
814 dnl if test "$ac_cv_type_signal_handler" = void_int; then
815 dnl AC_DEFINE(VOID_INT_SIGNALS)
816 dnl fi
817
818 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
819 AC_TYPE_SIGNAL
820 if test "$ac_cv_type_signal" = void; then
821   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).])
822 fi
823
824 dnl ** check for more functions
825 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
826 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
827
828 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
829 dnl ** _POSIX_C_SOURCE is defined
830 AC_CHECK_DECLS([ctime_r], , ,
831 [#define _POSIX_SOURCE 1
832 #define _POSIX_C_SOURCE 199506L
833 #include <time.h>])
834
835 dnl ** check for mingwex library
836 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
837 AC_SUBST(HaveLibMingwEx)
838
839 if test $HaveLibMingwEx = YES ; then
840   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
841 fi
842
843 dnl ** check for math library
844 dnl    Keep that check as early as possible.
845 dnl    as we need to know whether we need libm
846 dnl    for math functions or not
847 dnl    (see http://hackage.haskell.org/trac/ghc/ticket/3730)
848 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
849 if test $HaveLibM = YES
850 then
851   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
852 fi
853
854 dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
855 dnl    the order of these tests matters: bfd needs libiberty
856 AC_CHECK_LIB(iberty, xmalloc)
857 AC_CHECK_LIB(bfd,    bfd_uncompress_section_contents)
858
859 dnl ################################################################
860 dnl Check for libraries
861 dnl ################################################################
862
863 dnl ** check whether we need -ldl to get dlopen()
864
865 AC_CHECK_LIB(dl, dlopen,
866     [HaveLibDL=YES
867      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
868      LIBS="$LIBS -ldl"],
869     [HaveLibDL=NO])
870 AC_SUBST(HaveLibDL)
871
872 dnl --------------------------------------------------
873 dnl * Miscellaneous feature tests
874 dnl --------------------------------------------------
875
876 dnl ** can we get alloca?
877 AC_FUNC_ALLOCA
878
879 dnl ** working vfork?
880 AC_FUNC_FORK
881
882 dnl ** determine whether or not const works
883 AC_C_CONST
884
885 dnl ** are we big endian?
886 AC_C_BIGENDIAN
887 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
888
889 dnl ** check for leading underscores in symbol names
890 FP_LEADING_UNDERSCORE
891
892 FP_VISIBILITY_HIDDEN
893
894 dnl ** check for librt
895 AC_CHECK_LIB(rt, clock_gettime)
896 AC_CHECK_FUNCS(clock_gettime timer_settime)
897 FP_CHECK_TIMER_CREATE
898
899 dnl ** check for Apple's "interesting" long double compatibility scheme
900 AC_MSG_CHECKING(for printf\$LDBLStub)
901 AC_TRY_LINK_FUNC(printf\$LDBLStub,
902     [
903         AC_MSG_RESULT(yes)
904         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
905             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
906     ],
907     [
908         AC_MSG_RESULT(no)
909         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
910             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
911     ])
912
913 dnl ** check for eventfd which is needed by the I/O manager
914 AC_CHECK_HEADERS([sys/eventfd.h])
915 AC_CHECK_FUNCS([eventfd])
916
917 # test for GTK+
918 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
919 if test -n "$GTK_CONFIG"; then
920   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
921     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
922   else
923     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
924     GTK_CONFIG=
925   fi
926 fi
927 AC_SUBST([GTK_CONFIG])
928
929 # checking for PAPI
930 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
931 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
932 AC_SUBST(HavePapiLib)
933 AC_SUBST(HavePapiHeader)
934
935 AC_CHECK_FUNCS(__mingw_vfprintf)
936
937 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
938    HavePapi=YES
939 else
940    HavePapi=NO
941 fi
942 AC_SUBST(HavePapi)
943
944 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
945    test "$XsltprocCmd" = ""
946 then
947     BUILD_DOCBOOK_HTML=NO
948 else
949     BUILD_DOCBOOK_HTML=YES
950 fi
951 AC_SUBST(BUILD_DOCBOOK_HTML)
952
953 if test "$DblatexCmd" = ""
954 then
955     BUILD_DOCBOOK_PS=NO
956     BUILD_DOCBOOK_PDF=NO
957 else
958     BUILD_DOCBOOK_PS=YES
959     BUILD_DOCBOOK_PDF=YES
960 fi
961 AC_SUBST(BUILD_DOCBOOK_PS)
962 AC_SUBST(BUILD_DOCBOOK_PDF)
963
964 LIBRARY_VERSION(base)
965 LIBRARY_VERSION(Cabal, Cabal/Cabal)
966 LIBRARY_VERSION(ghc-prim)
967 LIBRARY_ghc_VERSION="$ProjectVersion"
968 AC_SUBST(LIBRARY_ghc_VERSION)
969
970 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
971    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
972 fi
973
974 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])
975 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
976 AC_OUTPUT
977
978 # We got caught by
979 #     http://savannah.gnu.org/bugs/index.php?1516
980 #     $(eval ...) inside conditionals causes errors
981 # with make 3.80, so warn the user if it looks like they're about to
982 # try to use it.
983 # We would use "grep -q" here, but Solaris's grep doesn't support it.
984 checkMake380() {
985     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
986     then
987         echo
988         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
989         echo "This version cannot be used to build GHC."
990         echo "Please use GNU make >= 3.81."
991     fi
992 }
993
994 checkMake380 make
995 checkMake380 gmake
996
997 echo ["
998 ----------------------------------------------------------------------
999 Configure completed successfully.
1000
1001    Building GHC version  : $ProjectVersion
1002
1003    Build platform        : $BuildPlatform
1004    Host platform         : $HostPlatform
1005    Target platform       : $TargetPlatform
1006 "]
1007
1008 if test "$BootingFromHc" = "YES"; then
1009 echo ["\
1010    Bootstrapping from HC files.
1011 "]
1012 else
1013 echo ["\
1014    Bootstrapping using   : $WithGhc
1015       which is version   : $GhcVersion
1016 "]
1017 fi
1018
1019 echo ["\
1020    Using GCC                 : $WhatGccIsCalled
1021       which is version       : $GccVersion
1022    Building a cross compiler : $BuildingCrossCompiler
1023    Porting to foreign arch   : $PortingCompiler
1024    Alien script              : $AlienScript
1025
1026    ld       : $LdCmd
1027    Happy    : $HappyCmd ($HappyVersion)
1028    Alex     : $AlexCmd ($AlexVersion)
1029    Perl     : $PerlCmd
1030    dblatex  : $DblatexCmd
1031    xsltproc : $XsltprocCmd"]
1032
1033 if test "$HSCOLOUR" = ""; then
1034 echo ["
1035    HsColour was not found; documentation will not contain source links
1036 "]
1037 else
1038 echo ["\
1039    HsColour : $HSCOLOUR
1040 "]
1041 fi
1042
1043 echo ["\
1044    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1045    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
1046    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
1047
1048 echo ["----------------------------------------------------------------------
1049 "]
1050
1051 echo "\
1052 For a standard build of GHC (fully optimised with profiling), type (g)make.
1053
1054 To make changes to the default build configuration, copy the file
1055 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1056
1057 For more information on how to configure your GHC build, see
1058    http://hackage.haskell.org/trac/ghc/wiki/Building
1059 "