Merge branch 'master' of darcs.haskell.org:/home/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 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 # Testing ARM ABI
211 # required for code generation (LLVM options)
212 ARM_ABI=SOFT
213 echo HOST: $host
214
215 case $host in
216      arm*-*-linux-gnueabihf)
217      ARM_ABI=HARD
218      ;;
219      arm*-*-linux-gnueabi)
220      ARM_ABI=SOFTFP
221      ;;
222 esac
223
224 FPTOOLS_SET_PLATFORM_VARS
225
226 # Verify that the installed (bootstrap) GHC is capable of generating
227 # code for the requested build platform.
228 if test "$BootingFromHc" = "NO"
229 then
230     if test "$BuildPlatform" != "$bootstrap_target"
231     then
232         echo "This GHC (${WithGhc}) does not generate code for the build platform"
233         echo "   GHC target platform    : $bootstrap_target"
234         echo "   Desired build platform : $BuildPlatform"
235         exit 1
236     fi
237 fi
238
239 # Testing if we shall enable shared libs support on Solaris.
240 # Anything older than SunOS 5.11 aka Solaris 11 (Express) is broken.
241
242 SOLARIS_BROKEN_SHLD=NO
243
244 case $host in
245      i386-*-solaris2)
246      # here we go with the test
247      MINOR=`uname -r|cut -d '.' -f 2-`
248      if test "$MINOR" -lt "11"; then
249         SOLARIS_BROKEN_SHLD=YES
250      fi
251      ;;
252 esac
253
254 AC_SUBST(SOLARIS_BROKEN_SHLD)
255
256 dnl ** Do an unregisterised build?
257 dnl --------------------------------------------------------------
258 case "$HostArch" in
259     i386|x86_64|powerpc|arm)
260         UnregisterisedDefault=NO
261         ;;
262     *)
263         UnregisterisedDefault=YES
264         ;;
265 esac
266 AC_ARG_ENABLE(unregisterised,
267 [AC_HELP_STRING([--enable-unregisterised],
268 [Build an unregisterised compiler (enabled by default on platforms without registerised support) [default="$UnregisterisedDefault"]])],
269 [ if test x"$enableval" = x"yes"; then
270         Unregisterised=YES
271   else
272         Unregisterised=NO
273   fi
274 ],
275 [Unregisterised="$UnregisterisedDefault"]
276 )
277 AC_SUBST(Unregisterised)
278
279 AC_ARG_WITH(hc,
280 [AC_HELP_STRING([--with-hc=ARG],
281         [Use ARG as the path to the compiler for compiling ordinary
282          Haskell code  (default= value of --with-ghc)])],
283 [WithHc="$withval"],
284 [WithHc=$WithGhc]
285 )
286 AC_SUBST(WithHc)
287
288 # This uses GHC, so put it after the "GHC is required" check above:
289 FP_INTREE_GHC_PWD
290 FP_FIND_ROOT
291
292 if test "$HostOS" = "mingw32"
293 then
294     test -d inplace || mkdir inplace
295
296     if test "$HostArch" = "i386"
297     then
298         # NB. If you update the tarballs to a new version of gcc, don't
299         # forget to tweak the paths in driver/gcc/gcc.c.
300         if ! test -d inplace/mingw ||
301              test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma  ||
302              test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma  ||
303              test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma   ||
304              test inplace/mingw -ot ghc-tarballs/mingw/libgcc*.tar.gz      ||
305              test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz      ||
306              test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz      ||
307              test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz     ||
308              test inplace/mingw -ot ghc-tarballs/mingw/libstdc*.tar.lzma   ||
309              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz ||
310              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz ||
311              test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma
312         then
313             AC_MSG_NOTICE([Making in-tree mingw tree])
314             rm -rf inplace/mingw
315             mkdir inplace/mingw
316             (
317                 cd inplace/mingw &&
318                 tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma  &&
319                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma  &&
320                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma   &&
321                 tar --lzma -xf ../../ghc-tarballs/mingw/libgcc*.tar.lzma    &&
322                 tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma    &&
323                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma    &&
324                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma   &&
325                 tar --lzma -xf ../../ghc-tarballs/mingw/libstdc*.tar.lzma   &&
326                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz &&
327                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz &&
328                 tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma    &&
329                 mv bin/gcc.exe bin/realgcc.exe
330             )
331             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
332             AC_MSG_NOTICE([In-tree mingw tree created])
333         fi
334     else
335         # NB. If you update the tarballs to a new version of gcc, don't
336         # forget to tweak the paths in driver/gcc/gcc.c.
337         if ! test -d inplace/mingw ||
338              test inplace/mingw -ot ghc-tarballs/mingw64/*.tar.bz2
339         then
340             AC_MSG_NOTICE([Making in-tree mingw tree])
341             rm -rf inplace/mingw
342             mkdir inplace/mingw
343             (
344                 cd inplace/mingw &&
345                 tar -jxf ../../ghc-tarballs/mingw64/*.tar.bz2
346             )
347             AC_MSG_NOTICE([In-tree mingw tree created])
348         fi
349     fi
350
351     mingwbin="$hardtop/inplace/mingw/bin/"
352     CC="${mingwbin}gcc.exe"
353     LD="${mingwbin}ld.exe"
354     NM="${mingwbin}nm.exe"
355     OBJDUMP="${mingwbin}objdump.exe"
356     fp_prog_ar="${mingwbin}ar.exe"
357
358     if ! test -d inplace/perl ||
359          test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
360     then
361         AC_MSG_NOTICE([Making in-tree perl tree])
362         rm -rf inplace/perl
363         mkdir inplace/perl
364         (
365             cd inplace/perl &&
366             tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
367         )
368         AC_MSG_NOTICE([In-tree perl tree created])
369     fi
370 fi
371
372 # system libffi
373
374 AC_ARG_WITH([system-libffi],
375 [AC_HELP_STRING([--with-system-libffi],
376   [Use system provided libffi for RTS [default=no]])
377 ])
378
379 AS_IF([test "x$with_system_libffi" = "xyes"],
380   [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
381 )
382
383
384 AC_SUBST(UseSystemLibFFI)
385
386 AC_ARG_WITH([ffi-includes],
387 [AC_HELP_STRING([--with-ffi-includes=ARG]
388   [Find includes for libffi in ARG [default=system default]])
389 ],
390 [
391  if test "x$UseSystemLibFFI" != "xYES"; then
392     AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
393  else
394     FFIIncludeDir="$withval"
395     LIBFFI_CFLAGS="-I $withval" 
396  fi
397 ])
398
399 AC_SUBST(FFIIncludeDir)
400
401 AC_ARG_WITH([ffi-libraries],
402 [AC_HELP_STRING([--with-ffi-libraries=ARG]
403   [Find libffi in ARG [default=system default]])
404 ],
405 [
406  if test "x$UseSystemLibFFI" != "xYES"; then
407     AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
408  else
409     FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
410  fi
411 ])
412
413 AC_SUBST(FFILibDir)
414
415 AS_IF([test "$UseSystemLibFFI" = "YES"], [
416  CFLAGS2="$CFLAGS"
417  CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
418  LDFLAGS2="$LDFLAGS"
419  LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
420  AC_CHECK_LIB(ffi, ffi_call,
421   [AC_CHECK_HEADERS([ffi.h], [break], [])
422    AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
423   [AC_MSG_ERROR([Cannot find system libffi])])
424  CFLAGS="$CFLAGS2"
425  LDFLAGS="$LDFLAGS2"
426 ])
427
428 FP_ICONV
429 FP_GMP
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 "