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