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