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