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