Explicitly version test for package key support.
[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 dnl ** what cpp to use?
488 dnl --------------------------------------------------------------
489 AC_ARG_WITH(hs-cpp,
490 [AC_HELP_STRING([--with-hs-cpp=ARG],
491         [Use ARG as the path to cpp [default=autodetect]])],
492 [
493     if test "$HostOS" = "mingw32"
494     then
495         AC_MSG_WARN([Request to use $withval will be ignored])
496     else
497         HaskellCPPCmd=$withval
498     fi
499 ],
500 [
501         HaskellCPPCmd=$WhatGccIsCalled
502 ]
503 )
504
505
506
507 dnl ** what cpp flags to use?
508 dnl -----------------------------------------------------------
509 AC_ARG_WITH(hs-cpp-flags,
510   [AC_HELP_STRING([--with-hs-cpp-flags=ARG],
511           [Use ARG as the path to hs cpp [default=autodetect]])],
512   [
513       if test "$HostOS" = "mingw32"
514       then
515           AC_MSG_WARN([Request to use $withval will be ignored])
516       else
517           HaskellCPPArgs=$withval
518       fi
519   ],
520 [
521   $HaskellCPPCmd -x c /dev/null -dM -E > conftest.txt 2>&1
522   if grep "__clang__" conftest.txt >/dev/null 2>&1; then
523     HaskellCPPArgs="-E -undef -traditional -Wno-invalid-pp-token -Wno-unicode -Wno-trigraphs "
524   else
525       $HaskellCPPCmd  -v > conftest.txt 2>&1
526       if  grep "gcc" conftest.txt >/dev/null 2>&1; then
527           HaskellCPPArgs="-E -undef -traditional "
528         else
529           $HaskellCPPCmd  --version > conftest.txt 2>&1
530           if grep "cpphs" conftest.txt >/dev/null 2>&1; then
531             HaskellCPPArgs="--cpp -traditional"
532           else
533             AC_MSG_WARN([configure can't recognize your CPP program, you may need to set --with-hs-cpp-flags=FLAGS explicitly])
534             HaskellCPPArgs=""
535           fi
536       fi
537   fi
538   ]
539 )
540
541
542 dnl ** Which ld to use?
543 dnl --------------------------------------------------------------
544 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld])
545 LdCmd="$LD"
546 AC_SUBST([LdCmd])
547
548 dnl ** Which nm to use?
549 dnl --------------------------------------------------------------
550 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
551 NmCmd="$NM"
552 AC_SUBST([NmCmd])
553
554 dnl ** Which ar to use?
555 dnl --------------------------------------------------------------
556 FP_ARG_WITH_PATH_GNU_PROG([AR], [ar], [ar])
557 ArCmd="$AR"
558 fp_prog_ar="$AR"
559 AC_SUBST([ArCmd])
560
561 dnl ** Which ranlib to use?
562 dnl --------------------------------------------------------------
563 FP_ARG_WITH_PATH_GNU_PROG([RANLIB], [ranlib], [ranlib])
564 RanlibCmd="$RANLIB"
565 RANLIB="$RanlibCmd"
566
567
568 # Note: we may not have objdump on OS X, and we only need it on Windows (for DLL checks)
569 case $HostOS_CPP in
570 cygwin32|mingw32)
571     dnl ** Which objdump to use?
572     dnl --------------------------------------------------------------
573     FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
574     ObjdumpCmd="$OBJDUMP"
575     AC_SUBST([ObjdumpCmd])
576     ;;
577 esac
578
579 dnl ** Which LLVM llc to use?
580 dnl --------------------------------------------------------------
581 FIND_LLVM_PROG([LLC], [llc], [llc])
582 LlcCmd="$LLC"
583 AC_SUBST([LlcCmd])
584
585 dnl ** Which LLVM opt to use?
586 dnl --------------------------------------------------------------
587 FIND_LLVM_PROG([OPT], [opt], [opt])
588 OptCmd="$OPT"
589 AC_SUBST([OptCmd])
590
591 dnl --------------------------------------------------------------
592 dnl End of configure script option section
593 dnl --------------------------------------------------------------
594
595
596 dnl --------------------------------------------------------------
597 dnl * General configuration checks
598 dnl --------------------------------------------------------------
599
600 dnl ** Can the unix package be built?
601 dnl --------------------------------------------------------------
602
603 if test "$TargetOS" = "mingw32"
604 then
605     GhcLibsWithUnix=NO
606 else
607     GhcLibsWithUnix=YES
608 fi
609 AC_SUBST([GhcLibsWithUnix])
610
611 dnl ** does #! work?
612 AC_SYS_INTERPRETER()
613
614 dnl ** look for `perl'
615 case $HostOS_CPP in
616 cygwin32|mingw32)
617     PerlCmd=$hardtop/inplace/perl/perl
618     ;;
619 *)
620     AC_PATH_PROG(PerlCmd,perl)
621     if test -z "$PerlCmd"
622     then
623         echo "You must install perl before you can continue"
624         echo "Perhaps it is already installed, but not in your PATH?"
625         exit 1
626     else
627         FPTOOLS_CHECK_PERL_VERSION
628     fi
629     ;;
630 esac
631
632 dnl ** look for GCC and find out which version
633 dnl     Figure out which C compiler to use.  Gcc is preferred.
634 dnl     If gcc, make sure it's at least 3.0
635 dnl
636 FP_GCC_VERSION
637
638 dnl ** look to see if we have a C compiler using an llvm back end.
639 dnl
640 FP_CC_LLVM_BACKEND
641
642 FP_PROG_LD_IS_GNU
643 FP_PROG_LD_BUILD_ID
644 FP_PROG_LD_NO_COMPACT_UNWIND
645 FP_PROG_LD_FILELIST
646
647
648 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
649 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
650 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
651 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
652 # Stage 3 won't be supported by cross-compilation
653
654 FP_GCC_EXTRA_FLAGS
655
656 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
657 AC_PROG_CPP
658
659 AC_SUBST(CONF_CC_OPTS_STAGE0)
660 AC_SUBST(CONF_CC_OPTS_STAGE1)
661 AC_SUBST(CONF_CC_OPTS_STAGE2)
662 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
663 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
664 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
665 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
666 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
667 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
668 AC_SUBST(CONF_CPP_OPTS_STAGE0)
669 AC_SUBST(CONF_CPP_OPTS_STAGE1)
670 AC_SUBST(CONF_CPP_OPTS_STAGE2)
671
672 dnl ** Set up the variables for the platform in the settings file.
673 dnl May need to use gcc to find platform details.
674 dnl --------------------------------------------------------------
675 FPTOOLS_SET_HASKELL_PLATFORM_VARS
676
677 dnl ** figure out how to do context diffs
678 FP_PROG_CONTEXT_DIFF
679
680 dnl Let's make sure install-sh is executable here.  If we got it from
681 dnl a darcs repo, it might not be (see bug #978).
682 chmod +x install-sh
683 dnl ** figure out how to do a BSD-ish install
684 AC_PROG_INSTALL
685
686 dnl ** how to invoke `ar' and `ranlib'
687 FP_PROG_AR_SUPPORTS_ATFILE
688 FP_PROG_AR_NEEDS_RANLIB
689
690 dnl ** Check to see whether ln -s works
691 AC_PROG_LN_S
692
693 FP_SETTINGS
694
695 dnl ** Find the path to sed
696 AC_PATH_PROGS(SedCmd,gsed sed,sed)
697
698
699 dnl ** check for time command
700 AC_PATH_PROG(TimeCmd,time)
701
702 dnl ** check for tar
703 dnl   if GNU tar is named gtar, look for it first.
704 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
705
706 dnl ** check for patch
707 dnl if GNU patch is named gpatch, look for it first
708 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
709
710 dnl ** check for dtrace (currently only implemented for Mac OS X)
711 HaveDtrace=NO
712 AC_PATH_PROG(DtraceCmd,dtrace)
713 if test -n "$DtraceCmd"; then
714   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
715     HaveDtrace=YES
716   fi
717 fi
718 AC_SUBST(HaveDtrace)
719
720 AC_PATH_PROG(HSCOLOUR,HsColour)
721 # HsColour is passed to Cabal, so we need a native path
722 if test "$HostOS"      = "mingw32" && \
723    test "${OSTYPE}"   != "msys"    && \
724    test "${HSCOLOUR}" != ""
725 then
726     # Canonicalise to <drive>:/path/to/gcc
727     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
728 fi
729
730 dnl ** check for DocBook toolchain
731 FP_CHECK_DOCBOOK_DTD
732 FP_DOCBOOK_XSL
733 FP_PROG_DBLATEX
734
735 dnl ** check for ghc-pkg command
736 FP_PROG_GHC_PKG
737
738 dnl ** check for installed happy binary + version
739 FPTOOLS_HAPPY
740
741 dnl ** check for installed alex binary + version
742 FPTOOLS_ALEX
743
744 dnl --------------------------------------------------
745 dnl ### program checking section ends here ###
746 dnl --------------------------------------------------
747
748 dnl --------------------------------------------------
749 dnl * Platform header file and syscall feature tests
750 dnl ### checking the state of the local header files and syscalls ###
751
752 dnl ** check for full ANSI header (.h) files
753 AC_HEADER_STDC
754
755 dnl ** Enable large file support.  NB. do this before testing the type of
756 dnl    off_t, because it will affect the result of that test.
757 AC_SYS_LARGEFILE
758
759 dnl ** check for specific header (.h) files that we are interested in
760 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])
761
762 dnl sys/cpuset.h needs sys/param.h to be included first on FreeBSD 9.1; #7708
763 AC_CHECK_HEADERS([sys/cpuset.h], [], [],
764 [[#if HAVE_SYS_PARAM_H
765 # include <sys/param.h>
766 #endif
767 ]])
768
769 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
770 AC_HEADER_TIME
771
772 dnl ** do we have long longs?
773 AC_CHECK_TYPES([long long])
774
775 dnl ** what are the sizes of various types
776 AC_CHECK_SIZEOF(char,               1)
777 AC_CHECK_SIZEOF(double,             8)
778 AC_CHECK_SIZEOF(float,              4)
779 AC_CHECK_SIZEOF(int,                4)
780 AC_CHECK_SIZEOF(long,               4)
781 if test "$ac_cv_type_long_long" = yes; then
782 AC_CHECK_SIZEOF(long long,          8)
783 fi
784 AC_CHECK_SIZEOF(short,              2)
785 AC_CHECK_SIZEOF(unsigned char,      1)
786 AC_CHECK_SIZEOF(unsigned int,       4)
787 AC_CHECK_SIZEOF(unsigned long,      4)
788 if test "$ac_cv_type_long_long" = yes; then
789 AC_CHECK_SIZEOF(unsigned long long, 8)
790 fi
791 AC_CHECK_SIZEOF(unsigned short,     2)
792 AC_CHECK_SIZEOF(void *,             4)
793
794 dnl for use in settings.in
795 WordSize=$ac_cv_sizeof_void_p
796 AC_SUBST(WordSize)
797
798 dnl ** what are alignment constraints on various types
799 FP_CHECK_ALIGNMENT(char)
800 FP_CHECK_ALIGNMENT(double)
801 FP_CHECK_ALIGNMENT(float)
802 FP_CHECK_ALIGNMENT(int)
803 FP_CHECK_ALIGNMENT(long)
804 if test "$ac_cv_type_long_long" = yes; then
805 FP_CHECK_ALIGNMENT(long long)
806 fi
807 FP_CHECK_ALIGNMENT(short)
808 FP_CHECK_ALIGNMENT(unsigned char)
809 FP_CHECK_ALIGNMENT(unsigned int)
810 FP_CHECK_ALIGNMENT(unsigned long)
811 if test "$ac_cv_type_long_long" = yes; then
812 FP_CHECK_ALIGNMENT(unsigned long long)
813 fi
814 FP_CHECK_ALIGNMENT(unsigned short)
815 FP_CHECK_ALIGNMENT(void *)
816
817 FP_CHECK_FUNC([WinExec],
818   [@%:@include <windows.h>], [WinExec("",0)])
819
820 FP_CHECK_FUNC([GetModuleFileName],
821   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
822
823 dnl ** check for more functions
824 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
825 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
826
827 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
828 dnl ** _POSIX_C_SOURCE is defined
829 AC_CHECK_DECLS([ctime_r], , ,
830 [#define _POSIX_SOURCE 1
831 #define _POSIX_C_SOURCE 199506L
832 #include <time.h>])
833
834 dnl ** check for mingwex library
835 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
836 AC_SUBST(HaveLibMingwEx)
837
838 if test $HaveLibMingwEx = YES ; then
839   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
840 fi
841
842 dnl ** check for math library
843 dnl    Keep that check as early as possible.
844 dnl    as we need to know whether we need libm
845 dnl    for math functions or not
846 dnl    (see http://ghc.haskell.org/trac/ghc/ticket/3730)
847 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
848 if test $HaveLibM = YES
849 then
850   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
851 fi
852
853 dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
854 dnl    the order of these tests matters: bfd needs libiberty
855 AC_CHECK_LIB(iberty, xmalloc)
856 AC_CHECK_LIB(bfd,    bfd_uncompress_section_contents)
857
858 dnl ################################################################
859 dnl Check for libraries
860 dnl ################################################################
861
862 dnl ** check whether we need -ldl to get dlopen()
863
864 AC_CHECK_LIB(dl, dlopen,
865     [HaveLibDL=YES
866      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
867      LIBS="$LIBS -ldl"],
868     [HaveLibDL=NO])
869 AC_SUBST(HaveLibDL)
870
871 dnl --------------------------------------------------
872 dnl * Miscellaneous feature tests
873 dnl --------------------------------------------------
874
875 dnl ** can we get alloca?
876 AC_FUNC_ALLOCA
877
878 dnl ** working vfork?
879 AC_FUNC_FORK
880
881 dnl ** determine whether or not const works
882 AC_C_CONST
883
884 dnl ** are we big endian?
885 AC_C_BIGENDIAN
886 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
887
888 dnl ** check for leading underscores in symbol names
889 FP_LEADING_UNDERSCORE
890
891 FP_VISIBILITY_HIDDEN
892
893 dnl ** check for librt
894 AC_CHECK_LIB(rt, clock_gettime)
895 AC_CHECK_FUNCS(clock_gettime timer_settime)
896 FP_CHECK_TIMER_CREATE
897
898 dnl ** check for Apple's "interesting" long double compatibility scheme
899 AC_MSG_CHECKING(for printf\$LDBLStub)
900 AC_TRY_LINK_FUNC(printf\$LDBLStub,
901     [
902         AC_MSG_RESULT(yes)
903         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
904             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
905     ],
906     [
907         AC_MSG_RESULT(no)
908         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
909             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
910     ])
911
912 dnl ** check for eventfd which is needed by the I/O manager
913 AC_CHECK_HEADERS([sys/eventfd.h])
914 AC_CHECK_FUNCS([eventfd])
915
916 dnl ** Check for __thread support in the compiler
917 AC_MSG_CHECKING(for __thread support)
918 AC_COMPILE_IFELSE(
919   [ AC_LANG_SOURCE([[__thread int tester = 0;]]) ],
920   [
921    AC_MSG_RESULT(yes)
922    AC_DEFINE([CC_SUPPORTS_TLS],[1],[Define to 1 if __thread is supported])
923   ],
924   [
925    AC_MSG_RESULT(no)
926    AC_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
927   ])
928
929
930 dnl ** checking for PAPI
931 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
932 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
933 AC_SUBST(HavePapiLib)
934 AC_SUBST(HavePapiHeader)
935
936 AC_CHECK_FUNCS(__mingw_vfprintf)
937
938 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
939    HavePapi=YES
940 else
941    HavePapi=NO
942 fi
943 AC_SUBST(HavePapi)
944
945 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
946    test "$XsltprocCmd" = ""
947 then
948     BUILD_DOCBOOK_HTML=NO
949 else
950     BUILD_DOCBOOK_HTML=YES
951 fi
952 AC_SUBST(BUILD_DOCBOOK_HTML)
953
954 if test "$DblatexCmd" = ""
955 then
956     BUILD_DOCBOOK_PS=NO
957     BUILD_DOCBOOK_PDF=NO
958 else
959     BUILD_DOCBOOK_PS=YES
960     BUILD_DOCBOOK_PDF=YES
961 fi
962 AC_SUBST(BUILD_DOCBOOK_PS)
963 AC_SUBST(BUILD_DOCBOOK_PDF)
964
965 LIBRARY_VERSION(base)
966 LIBRARY_VERSION(Cabal, Cabal/Cabal)
967 LIBRARY_VERSION(ghc-prim)
968 LIBRARY_ghc_VERSION="$ProjectVersion"
969 AC_SUBST(LIBRARY_ghc_VERSION)
970
971 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
972    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
973 fi
974
975 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])
976 AC_OUTPUT
977
978 # We got caught by
979 #     http://savannah.gnu.org/bugs/index.php?1516
980 #     $(eval ...) inside conditionals causes errors
981 # with make 3.80, so warn the user if it looks like they're about to
982 # try to use it.
983 # We would use "grep -q" here, but Solaris's grep doesn't support it.
984 checkMake380() {
985     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
986     then
987         echo
988         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
989         echo "This version cannot be used to build GHC."
990         echo "Please use GNU make >= 3.81."
991     fi
992 }
993
994 checkMake380 make
995 checkMake380 gmake
996
997 echo ["
998 ----------------------------------------------------------------------
999 Configure completed successfully.
1000
1001    Building GHC version  : $ProjectVersion
1002
1003    Build platform        : $BuildPlatform
1004    Host platform         : $HostPlatform
1005    Target platform       : $TargetPlatform
1006 "]
1007
1008 echo ["\
1009    Bootstrapping using   : $WithGhc
1010       which is version   : $GhcVersion
1011 "]
1012
1013 if test "x$CC_LLVM_BACKEND" = "x1"; then
1014     if test "x$CC_CLANG_BACKEND" = "x1"; then
1015         CompilerName="clang        "
1016     else
1017         CompilerName="llvm-gcc     "
1018     fi
1019 else
1020     CompilerName="gcc          "
1021 fi
1022
1023 echo ["\
1024    Using $CompilerName       : $WhatGccIsCalled
1025       which is version       : $GccVersion
1026    Building a cross compiler : $CrossCompiling
1027    cpp       : $HaskellCPPCmd
1028    cpp-flags : $HaskellCPPArgs
1029    ld        : $LdCmd
1030    Happy     : $HappyCmd ($HappyVersion)
1031    Alex      : $AlexCmd ($AlexVersion)
1032    Perl      : $PerlCmd
1033    dblatex   : $DblatexCmd
1034    xsltproc  : $XsltprocCmd
1035
1036    Using LLVM tools
1037       llc   : $LlcCmd
1038       opt   : $OptCmd"]
1039
1040 if test "$HSCOLOUR" = ""; then
1041 echo ["
1042    HsColour was not found; documentation will not contain source links
1043 "]
1044 else
1045 echo ["\
1046    HsColour : $HSCOLOUR
1047 "]
1048 fi
1049
1050 echo ["\
1051    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1052    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
1053    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
1054
1055 echo ["----------------------------------------------------------------------
1056 "]
1057
1058 echo "\
1059 For a standard build of GHC (fully optimised with profiling), type (g)make.
1060
1061 To make changes to the default build configuration, copy the file
1062 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1063
1064 For more information on how to configure your GHC build, see
1065    http://ghc.haskell.org/trac/ghc/wiki/Building
1066 "