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