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