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