Fix tarball name for Win64 mingw
[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.5], [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
43 dnl ** Find sort command (for the benefit of Win32 environs)
44 FP_PROG_SORT
45
46 dnl ----------------------------------------------------------
47 FP_SETUP_PROJECT_VERSION
48
49 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
50 AC_SUBST([release], [1])
51
52 # First off, a distrib sanity check..
53 AC_CONFIG_SRCDIR([mk/config.mk.in])
54
55 dnl * We require autoconf version 2.52
56 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
57 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
58 AC_PREREQ([2.52])
59
60 # -------------------------------------------------------------------------
61 # Prepare to generate the following header files
62 #
63 #
64 AC_CONFIG_HEADER(mk/config.h)
65
66 # No, semi-sadly, we don't do `--srcdir'...
67 if test x"$srcdir" != 'x.' ; then
68     echo "This configuration does not support the \`--srcdir' option.."
69     exit 1
70 fi
71
72 dnl --------------------------------------------------------------
73 dnl * Project specific configuration options
74 dnl --------------------------------------------------------------
75 dnl What follows is a bunch of options that can either be configured
76 dnl through command line options to the configure script or by
77 dnl supplying defns in the build tree's mk/build.mk. Having the option to
78 dnl use either is considered a Feature.
79
80 dnl ** What command to use to compile compiler sources ?
81 dnl --------------------------------------------------------------
82
83 AC_ARG_WITH([ghc],
84 [AC_HELP_STRING([--with-ghc=ARG],
85   [Use ARG as the path to GHC  [default=autodetect]])],
86   [WithGhc="$withval"],
87   [if test "$GHC" = ""; then
88     AC_PATH_PROG([GHC], [ghc])
89   fi
90   WithGhc="$GHC"])
91
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 dnl ** Booting from .hc files?
98 dnl --------------------------------------------------------------
99 AC_ARG_ENABLE(hc-boot,
100 [AC_HELP_STRING([--enable-hc-boot],
101 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
102  (This option is mostly of interest to porters.) [default=no]])],
103 [ if test x"$enableval" = x"yes"; then
104         BootingFromHc=YES
105   else
106         BootingFromHc=NO
107   fi
108 ],
109 [BootingFromHc=NO]
110 )
111 AC_SUBST(BootingFromHc)
112
113 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
114 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
115                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
116         EnableBootstrapWithDevelSnaphost=YES,
117         EnableBootstrapWithDevelSnaphost=NO
118 )
119
120 if test "$WithGhc" != ""; then
121   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
122
123   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
124      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
125   fi
126
127   AC_SUBST(GhcVersion)dnl
128   AC_SUBST(GhcMajVersion)dnl
129   AC_SUBST(GhcMinVersion)dnl
130   AC_SUBST(GhcPatchLevel)dnl
131   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
132   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
133
134   BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command],['$(CC)'])
135   BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command],['$(AR)'])
136   BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags],['$(AR_OPTS)'])
137   BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file],['$(ArSupportsAtFile)'])
138 fi
139
140 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
141 if test "$BootingFromHc" = "NO"; then
142   if test "$WithGhc" = ""; then
143      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
144   fi
145   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.0],
146     [AC_MSG_ERROR([GHC version 7.0 or later is required to compile GHC.])])dnl
147
148   if test `expr $GhcMinVersion % 2` = "1"; then
149      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
150         AC_MSG_ERROR([
151      $WithGhc is a development snapshot of GHC, version $GhcVersion.
152      Bootstrapping using this version of GHC is not supported, and may not
153      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
154      or --with-ghc to specify a different GHC to use.])
155      fi
156   fi
157 fi;
158
159 # GHC is passed to Cabal, so we need a native path
160 if test "${WithGhc}" != ""
161 then
162     ghc_host_os=`"${WithGhc}" +RTS --info | grep 'Host OS' | sed -e 's/.*, "//' -e 's/")//'`
163
164     if test "$ghc_host_os" = "mingw32"
165     then
166         if test "${OSTYPE}" = "msys"
167         then
168             WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
169         else
170             # Canonicalise to <drive>:/path/to/ghc
171             WithGhc=`cygpath -m "${WithGhc}"`
172         fi
173         echo "GHC path canonicalised to: ${WithGhc}"
174     fi
175 fi
176 AC_SUBST([WithGhc])
177
178 dnl ** Without optimization some INLINE trickery fails for GHCi
179 SRC_CC_OPTS="-O"
180
181 FP_ICONV
182 FP_GMP
183
184 dnl--------------------------------------------------------------------
185 dnl * Choose host(/target/build) platform
186 dnl--------------------------------------------------------------------
187 dnl If we aren't explicitly told what values to use with configure flags,
188 dnl we ask the bootstrapping compiler what platform it is for
189
190 if test "${WithGhc}" != ""
191 then
192         bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
193         bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
194         if test "$bootstrap_host" != "$bootstrap_target"
195         then
196                 echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work"
197         fi
198 fi
199
200 # We have to run these unconditionally, but we may discard their
201 # results in the following code
202 AC_CANONICAL_BUILD
203 AC_CANONICAL_HOST
204 AC_CANONICAL_TARGET
205
206 FPTOOLS_SET_PLATFORM_VARS
207
208 # Verify that the installed (bootstrap) GHC is capable of generating
209 # code for the requested build platform.
210 if test "$BootingFromHc" = "NO"
211 then
212     if test "$BuildPlatform" != "$bootstrap_target"
213     then
214         echo "This GHC (${WithGhc}) does not generate code for the build platform"
215         echo "   GHC target platform    : $bootstrap_target"
216         echo "   Desired build platform : $BuildPlatform"
217         exit 1
218     fi
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 AC_ARG_WITH(hc,
239 [AC_HELP_STRING([--with-hc=ARG],
240         [Use ARG as the path to the compiler for compiling ordinary
241          Haskell code  (default= value of --with-ghc)])],
242 [WithHc="$withval"],
243 [WithHc=$WithGhc]
244 )
245 AC_SUBST(WithHc)
246
247 # This uses GHC, so put it after the "GHC is required" check above:
248 FP_INTREE_GHC_PWD
249 FP_FIND_ROOT
250
251 if test "$HostOS" = "mingw32"
252 then
253     test -d inplace || mkdir inplace
254
255     if test "$HostOS" = "i386"
256     then
257         # NB. If you update the tarballs to a new version of gcc, don't
258         # forget to tweak the paths in driver/gcc/gcc.c.
259         if ! test -d inplace/mingw ||
260              test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma  ||
261              test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma  ||
262              test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma   ||
263              test inplace/mingw -ot ghc-tarballs/mingw/libgcc*.tar.gz      ||
264              test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz      ||
265              test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz      ||
266              test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz     ||
267              test inplace/mingw -ot ghc-tarballs/mingw/libstdc*.tar.lzma   ||
268              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz ||
269              test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz ||
270              test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma
271         then
272             AC_MSG_NOTICE([Making in-tree mingw tree])
273             rm -rf inplace/mingw
274             mkdir inplace/mingw
275             (
276                 cd inplace/mingw &&
277                 tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma  &&
278                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma  &&
279                 tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma   &&
280                 tar --lzma -xf ../../ghc-tarballs/mingw/libgcc*.tar.lzma    &&
281                 tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma    &&
282                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma    &&
283                 tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma   &&
284                 tar --lzma -xf ../../ghc-tarballs/mingw/libstdc*.tar.lzma   &&
285                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz &&
286                 tar -z     -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz &&
287                 tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma    &&
288                 mv bin/gcc.exe bin/realgcc.exe
289             )
290             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
291             AC_MSG_NOTICE([In-tree mingw tree created])
292         fi
293         mingwbin="$hardtop/inplace/mingw/bin/"
294     else
295         # NB. If you update the tarballs to a new version of gcc, don't
296         # forget to tweak the paths in driver/gcc/gcc.c.
297         if ! test -d inplace/mingw ||
298              test inplace/mingw -ot ghc-tarballs/mingw64/mingw-w64-bin_*.zip
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                 unzip ../../ghc-tarballs/mingw64/mingw-w64-bin_*.zip
306             )
307             AC_MSG_NOTICE([In-tree mingw tree created])
308         fi
309         mingwbin="$hardtop/inplace/mingw/bin/x86_64-w64-mingw32-"
310     fi
311
312     CC="${mingwbin}gcc.exe"
313     LD="${mingwbin}ld.exe"
314     NM="${mingwbin}nm.exe"
315     fp_prog_ar_raw="${mingwbin}ar.exe"
316
317     if ! test -d inplace/perl ||
318          test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
319     then
320         AC_MSG_NOTICE([Making in-tree perl tree])
321         rm -rf inplace/perl
322         mkdir inplace/perl
323         (
324             cd inplace/perl &&
325             tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
326         )
327         AC_MSG_NOTICE([In-tree perl tree created])
328     fi
329 fi
330
331 XCODE_VERSION()
332
333 SplitObjsBroken=NO
334 if test "$TargetOS_CPP" = "darwin"
335 then
336     # Split objects is broken (#4013) with XCode < 3.2
337     if test "$XCodeVersion1" -lt 3
338     then
339         SplitObjsBroken=YES
340     else
341         if test "$XCodeVersion1" -eq 3
342         then
343             if test "$XCodeVersion2" -lt 2
344             then
345                 SplitObjsBroken=YES
346             fi
347         fi
348     fi
349 fi
350 AC_SUBST([SplitObjsBroken])
351
352 dnl ** Building a cross compiler?
353 dnl --------------------------------------------------------------
354 BuildingCrossCompiler=NO
355 PortingCompiler=NO
356 CrossCompiling=NO
357 # If 'host' and 'target' differ, then this means we are building a cross-compiler.
358 if test "$host" != "$target" ; then
359     BuildingCrossCompiler=YES
360     CrossCompiling=YES
361     cross_compiling=yes   # This tells configure that it can accept just 'target',
362                           # otherwise you get
363                           #   configure: error: cannot run C compiled programs.
364                           #   If you meant to cross compile, use `--host'.
365 fi
366 if test "$build" != "$host" ; then
367     CrossCompiling=YES
368     PortingCompiler=YES
369 fi
370 # Note: cross_compiling is set to 'yes' in both 'port' and 'toolchain' cases
371 if ! test "$host" = "$target" -o "$host" = "$build" ; then
372    AC_MSG_ERROR([
373 You've selected:
374
375   build:  $build   (the architecture we're building on)
376   host:   $host    (the architecture the compiler we're building will execute on)
377   target: $target  (the architecture the compiler we're building will produce code for)
378
379 host must equal build or target. The two allowed cases are:
380
381   --host=<arch> --target=<arch>   to _port_ GHC to run on a foreign architecture
382                                   and produce code for that architecture
383   --target=<arch>                 to build a cross compiler _toolchain_ that runs
384                                   locally but produces code for a foreign
385                                   architecture
386 ])
387 fi
388 if test "$CrossCompiling" = "YES"
389 then
390   CrossCompilePrefix="${target}-"
391 else
392   CrossCompilePrefix=""
393 fi
394 TargetPlatformFull="${target}"
395 AC_SUBST(BuildingCrossCompiler)  # 'toolchain' case
396 AC_SUBST(PortingCompiler)        # 'port' case
397 AC_SUBST(CrossCompiling)         # BuildingCrossCompiler OR PortingCompiler
398 AC_SUBST(CrossCompilePrefix)
399 AC_SUBST(TargetPlatformFull)
400 AC_ARG_WITH([alien],
401 [AC_HELP_STRING([--with-alien=ARG],
402   [Supply script for running target binaries locally when cross-compiling])],
403   [AlienScript="$withval"],
404   [AlienScript=""])
405 AC_SUBST(AlienScript)
406
407 dnl ** Which gcc to use?
408 dnl --------------------------------------------------------------
409 FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
410 CC="$WhatGccIsCalled"
411 export CC
412
413 dnl ** Which ld to use?
414 dnl --------------------------------------------------------------
415 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld])
416 LdCmd="$LD"
417 AC_SUBST([LdCmd])
418
419 dnl ** Which nm to use?
420 dnl --------------------------------------------------------------
421 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
422 NmCmd="$NM"
423 AC_SUBST([NmCmd])
424
425 dnl ** Which LLVM llc to use?
426 dnl --------------------------------------------------------------
427 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([LLC], [llc])
428 LlcCmd="$LLC"
429 AC_SUBST([LlcCmd])
430
431 dnl ** Which LLVM opt to use?
432 dnl --------------------------------------------------------------
433 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OPT], [opt])
434 OptCmd="$OPT"
435 AC_SUBST([OptCmd])
436
437 dnl ** Mac OS X: explicit deployment target
438 dnl --------------------------------------------------------------
439 AC_ARG_WITH([macosx-deployment-target],
440 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
441         [Build for Mac OS VERSION and higher  (default= version of build host)])],
442 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
443  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
444    # ignore everywhere, but on Mac OS
445    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
446    FP_MACOSX_DEPLOYMENT_TARGET=none
447  fi],
448 [FP_MACOSX_DEPLOYMENT_TARGET=none]
449 )
450 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
451 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
452 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
453
454 dnl --------------------------------------------------------------
455 dnl End of configure script option section
456 dnl --------------------------------------------------------------
457
458
459 dnl --------------------------------------------------------------
460 dnl * General configuration checks
461 dnl --------------------------------------------------------------
462
463 dnl ** Can the unix package be built?
464 dnl --------------------------------------------------------------
465
466 if test "$TargetOS" = "mingw32"
467 then
468     GhcLibsWithUnix=NO
469 else
470     GhcLibsWithUnix=YES
471 fi
472 AC_SUBST([GhcLibsWithUnix])
473
474 dnl ** does #! work?
475 AC_SYS_INTERPRETER()
476
477 dnl ** look for `perl'
478 case $HostOS_CPP in
479 cygwin32|mingw32)
480     PerlCmd=$hardtop/inplace/perl/perl
481     ;;
482 *)
483     AC_PATH_PROG(PerlCmd,perl)
484     if test -z "$PerlCmd"
485     then
486         echo "You must install perl before you can continue"
487         echo "Perhaps it is already installed, but not in your PATH?"
488         exit 1
489     else
490         FPTOOLS_CHECK_PERL_VERSION
491     fi
492     ;;
493 esac
494
495 dnl ** does #! path/to/perl work? (sometimes it's too long...)
496 FPTOOLS_SHEBANG_PERL
497
498 dnl ** check for Python
499 AC_PATH_PROG(PythonCmd,python)
500
501 dnl ** look for GCC and find out which version
502 dnl     Figure out which C compiler to use.  Gcc is preferred.
503 dnl     If gcc, make sure it's at least 3.0
504 dnl
505 FP_GCC_VERSION
506
507 dnl ** look to see if we have a C compiler using an llvm back end.
508 dnl
509 FP_CC_LLVM_BACKEND
510
511 FP_PROG_LD_HashSize31
512 FP_PROG_LD_ReduceMemoryOverheads
513
514 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
515 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
516 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
517 # Stage 3 won't be supported by cross-compilation
518 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
519
520 FP_GCC_EXTRA_FLAGS
521
522 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
523 AC_PROG_CPP
524
525 AC_SUBST(CONF_CC_OPTS_STAGE0)
526 AC_SUBST(CONF_CC_OPTS_STAGE1)
527 AC_SUBST(CONF_CC_OPTS_STAGE2)
528 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
529 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
530 AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
531 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
532 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
533 AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
534 AC_SUBST(CONF_CPP_OPTS_STAGE0)
535 AC_SUBST(CONF_CPP_OPTS_STAGE1)
536 AC_SUBST(CONF_CPP_OPTS_STAGE2)
537
538 dnl ** Set up the variables for the platform in the settings file.
539 dnl May need to use gcc to find platform details.
540 dnl --------------------------------------------------------------
541 FPTOOLS_SET_HASKELL_PLATFORM_VARS
542
543 dnl ** figure out how to do context diffs
544 FP_PROG_CONTEXT_DIFF
545
546 dnl Let's make sure install-sh is executable here.  If we got it from
547 dnl a darcs repo, it might not be (see bug #978).
548 chmod +x install-sh
549 dnl ** figure out how to do a BSD-ish install
550 AC_PROG_INSTALL
551
552 dnl If you can run configure, you certainly have /bin/sh
553 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
554
555 dnl ** how to invoke `ar' and `ranlib'
556 FP_PROG_AR_SUPPORTS_ATFILE
557 FP_PROG_AR_NEEDS_RANLIB
558
559 dnl ** Check to see whether ln -s works
560 AC_PROG_LN_S
561
562 FP_SETTINGS
563
564 dnl ** Find the path to sed
565 AC_PATH_PROGS(SedCmd,gsed sed,sed)
566
567
568 dnl ** check for time command
569 AC_PATH_PROG(TimeCmd,time)
570
571 dnl ** check for tar
572 dnl   if GNU tar is named gtar, look for it first.
573 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
574
575 dnl ** check for patch
576 dnl if GNU patch is named gpatch, look for it first
577 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
578
579 dnl ** check for dtrace (currently only implemented for Mac OS X)
580 HaveDtrace=NO
581 AC_PATH_PROG(DtraceCmd,dtrace)
582 if test -n "$DtraceCmd"; then
583   if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
584     HaveDtrace=YES
585   fi
586 fi
587 AC_SUBST(HaveDtrace)
588
589 AC_PATH_PROG(HSCOLOUR,HsColour)
590 # HsColour is passed to Cabal, so we need a native path
591 if test "$HostOS"      = "mingw32" && \
592    test "${OSTYPE}"   != "msys"    && \
593    test "${HSCOLOUR}" != ""
594 then
595     # Canonicalise to <drive>:/path/to/gcc
596     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
597 fi
598
599 dnl ** check for DocBook toolchain
600 FP_CHECK_DOCBOOK_DTD
601 FP_DOCBOOK_XSL
602 FP_PROG_DBLATEX
603
604 dnl ** check for ghc-pkg command
605 FP_PROG_GHC_PKG
606
607 dnl ** check for installed happy binary + version
608 dnl    (don't do it if we're booting from .hc files though.)
609 if test "$BootingFromHc" = "NO"; then
610 FPTOOLS_HAPPY
611 fi;
612
613 dnl ** check for installed alex binary + version
614 dnl    (don't do it if we're booting from .hc files though.)
615 if test "$BootingFromHc" = "NO"; then
616 FPTOOLS_ALEX
617 fi;
618
619 dnl --------------------------------------------------
620 dnl ### program checking section ends here ###
621 dnl --------------------------------------------------
622
623 dnl --------------------------------------------------
624 dnl * Platform header file and syscall feature tests
625 dnl ### checking the state of the local header files and syscalls ###
626
627 dnl ** check for full ANSI header (.h) files
628 AC_HEADER_STDC
629
630 dnl ** Enable large file support.  NB. do this before testing the type of
631 dnl    off_t, because it will affect the result of that test.
632 AC_SYS_LARGEFILE
633
634 dnl ** check for specific header (.h) files that we are interested in
635 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/cpuset.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])
636
637 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
638 AC_HEADER_TIME
639
640 dnl ** do we have long longs?
641 AC_CHECK_TYPES([long long])
642
643 dnl ** what are the sizes of various types
644 AC_CHECK_SIZEOF(char,               1)
645 AC_CHECK_SIZEOF(double,             8)
646 AC_CHECK_SIZEOF(float,              4)
647 AC_CHECK_SIZEOF(int,                4)
648 AC_CHECK_SIZEOF(long,               4)
649 if test "$ac_cv_type_long_long" = yes; then
650 AC_CHECK_SIZEOF(long long,          8)
651 fi
652 AC_CHECK_SIZEOF(short,              2)
653 AC_CHECK_SIZEOF(unsigned char,      1)
654 AC_CHECK_SIZEOF(unsigned int,       4)
655 AC_CHECK_SIZEOF(unsigned long,      4)
656 if test "$ac_cv_type_long_long" = yes; then
657 AC_CHECK_SIZEOF(unsigned long long, 8)
658 fi
659 AC_CHECK_SIZEOF(unsigned short,     2)
660 AC_CHECK_SIZEOF(void *,             4)
661
662 dnl for use in settings.in
663 WordSize=$ac_cv_sizeof_void_p
664 AC_SUBST(WordSize)
665
666 dnl ** what are alignment constraints on various types
667 FP_CHECK_ALIGNMENT(char)
668 FP_CHECK_ALIGNMENT(double)
669 FP_CHECK_ALIGNMENT(float)
670 FP_CHECK_ALIGNMENT(int)
671 FP_CHECK_ALIGNMENT(long)
672 if test "$ac_cv_type_long_long" = yes; then
673 FP_CHECK_ALIGNMENT(long long)
674 fi
675 FP_CHECK_ALIGNMENT(short)
676 FP_CHECK_ALIGNMENT(unsigned char)
677 FP_CHECK_ALIGNMENT(unsigned int)
678 FP_CHECK_ALIGNMENT(unsigned long)
679 if test "$ac_cv_type_long_long" = yes; then
680 FP_CHECK_ALIGNMENT(unsigned long long)
681 fi
682 FP_CHECK_ALIGNMENT(unsigned short)
683 FP_CHECK_ALIGNMENT(void *)
684
685 FP_CHECK_FUNC([WinExec],
686   [@%:@include <windows.h>], [WinExec("",0)])
687
688 FP_CHECK_FUNC([GetModuleFileName],
689   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
690
691 dnl ** check return type of signal handlers
692 dnl Foo: assumes we can use prototypes.
693 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
694 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
695 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
696 dnl #include <signal.h>
697 dnl #ifdef signal
698 dnl #undef signal
699 dnl #endif
700 dnl void (*signal (int, void (*)(int)))(int);
701 dnl ]],
702 dnl [[int i;]])],
703 dnl [ac_cv_type_signal_handler=void_int],
704 dnl [ac_cv_type_signal_handler=int_void])])
705 dnl if test "$ac_cv_type_signal_handler" = void_int; then
706 dnl AC_DEFINE(VOID_INT_SIGNALS)
707 dnl fi
708
709 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
710 AC_TYPE_SIGNAL
711 if test "$ac_cv_type_signal" = void; then
712   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).])
713 fi
714
715 dnl ** check for more functions
716 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
717 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
718
719 if test "$cross_compiling" = "no" ; then
720     AC_TRY_RUN([
721     #include <sys/types.h>
722     #include <sys/time.h>
723     int main(void) {
724       struct itimerval tval;
725       tval.it_value.tv_sec = 1;
726       tval.it_value.tv_usec = 0;
727       tval.it_interval = tval.it_value;
728       return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
729     }
730     ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
731 fi
732
733 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
734 dnl ** _POSIX_C_SOURCE is defined
735 AC_CHECK_DECLS([ctime_r], , ,
736 [#define _POSIX_SOURCE 1
737 #define _POSIX_C_SOURCE 199506L
738 #include <time.h>])
739
740 dnl ** check for mingwex library
741 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
742 AC_SUBST(HaveLibMingwEx)
743
744 if test $HaveLibMingwEx = YES ; then
745   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
746 fi
747
748 dnl ** check for math library
749 dnl    Keep that check as early as possible.
750 dnl    as we need to know whether we need libm
751 dnl    for math functions or not
752 dnl    (see http://hackage.haskell.org/trac/ghc/ticket/3730)
753 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
754 if test $HaveLibM = YES
755 then
756   AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
757 fi
758
759 dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
760 dnl    the order of these tests matters: bfd needs libiberty
761 AC_CHECK_LIB(iberty, xmalloc)
762 AC_CHECK_LIB(bfd,    bfd_uncompress_section_contents)
763
764 dnl ################################################################
765 dnl Check for libraries
766 dnl ################################################################
767
768 dnl ** check whether we need -ldl to get dlopen()
769
770 AC_CHECK_LIB(dl, dlopen,
771     [HaveLibDL=YES
772      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
773      LIBS="$LIBS -ldl"],
774     [HaveLibDL=NO])
775 AC_SUBST(HaveLibDL)
776
777 dnl --------------------------------------------------
778 dnl * Miscellaneous feature tests
779 dnl --------------------------------------------------
780
781 dnl ** can we get alloca?
782 AC_FUNC_ALLOCA
783
784 dnl ** working vfork?
785 AC_FUNC_FORK
786
787 dnl ** determine whether or not const works
788 AC_C_CONST
789
790 dnl ** are we big endian?
791 AC_C_BIGENDIAN
792 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
793
794 dnl ** check for leading underscores in symbol names
795 FP_LEADING_UNDERSCORE
796
797 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
798 FP_PROG_LD_X
799 FP_PROG_LD_IS_GNU
800 FP_PROG_LD_BUILD_ID
801 FP_PROG_LD_NO_COMPACT_UNWIND
802
803 FP_VISIBILITY_HIDDEN
804
805 dnl ** check for librt
806 AC_CHECK_LIB(rt, clock_gettime)
807 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
808 FP_CHECK_TIMER_CREATE
809
810 dnl ** check for Apple's "interesting" long double compatibility scheme
811 AC_MSG_CHECKING(for printf\$LDBLStub)
812 AC_TRY_LINK_FUNC(printf\$LDBLStub,
813     [
814         AC_MSG_RESULT(yes)
815         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
816             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
817     ],
818     [
819         AC_MSG_RESULT(no)
820         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
821             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
822     ])
823
824 dnl ** check for eventfd which is needed by the I/O manager
825 AC_CHECK_HEADERS([sys/eventfd.h])
826 AC_CHECK_FUNCS([eventfd])
827
828 # test for GTK+
829 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
830 if test -n "$GTK_CONFIG"; then
831   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
832     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
833   else
834     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
835     GTK_CONFIG=
836   fi
837 fi
838 AC_SUBST([GTK_CONFIG])
839
840 # checking for PAPI
841 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
842 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
843 AC_SUBST(HavePapiLib)
844 AC_SUBST(HavePapiHeader)
845
846 AC_CHECK_FUNCS(__mingw_vfprintf)
847
848 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
849    HavePapi=YES
850 else
851    HavePapi=NO
852 fi
853 AC_SUBST(HavePapi)
854
855 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
856    test "$XsltprocCmd" = ""
857 then
858     BUILD_DOCBOOK_HTML=NO
859 else
860     BUILD_DOCBOOK_HTML=YES
861 fi
862 AC_SUBST(BUILD_DOCBOOK_HTML)
863
864 if test "$DblatexCmd" = ""
865 then
866     BUILD_DOCBOOK_PS=NO
867     BUILD_DOCBOOK_PDF=NO
868 else
869     BUILD_DOCBOOK_PS=YES
870     BUILD_DOCBOOK_PDF=YES
871 fi
872 AC_SUBST(BUILD_DOCBOOK_PS)
873 AC_SUBST(BUILD_DOCBOOK_PDF)
874
875 LIBRARY_VERSION(base)
876 LIBRARY_VERSION(Cabal, Cabal/Cabal)
877 LIBRARY_VERSION(ghc-prim)
878 LIBRARY_ghc_VERSION="$ProjectVersion"
879 AC_SUBST(LIBRARY_ghc_VERSION)
880
881 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
882    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
883 fi
884
885 AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal ghc.spec settings docs/users_guide/ug-book.xml docs/users_guide/ug-ent.xml docs/index.html libraries/prologue.txt distrib/ghc.iss distrib/configure.ac])
886 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
887 AC_OUTPUT
888
889 # We got caught by
890 #     http://savannah.gnu.org/bugs/index.php?1516
891 #     $(eval ...) inside conditionals causes errors
892 # with make 3.80, so warn the user if it looks like they're about to
893 # try to use it.
894 # We would use "grep -q" here, but Solaris's grep doesn't support it.
895 checkMake380() {
896     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
897     then
898         echo
899         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
900         echo "This version cannot be used to build GHC."
901         echo "Please use GNU make >= 3.81."
902     fi
903 }
904
905 checkMake380 make
906 checkMake380 gmake
907
908 echo ["
909 ----------------------------------------------------------------------
910 Configure completed successfully.
911
912    Building GHC version  : $ProjectVersion
913
914    Build platform        : $BuildPlatform
915    Host platform         : $HostPlatform
916    Target platform       : $TargetPlatform
917 "]
918
919 if test "$BootingFromHc" = "YES"; then
920 echo ["\
921    Bootstrapping from HC files.
922 "]
923 else
924 echo ["\
925    Bootstrapping using   : $WithGhc
926       which is version   : $GhcVersion
927 "]
928 fi
929
930 echo ["\
931    Using GCC                 : $WhatGccIsCalled
932       which is version       : $GccVersion
933    Building a cross compiler : $BuildingCrossCompiler
934    Porting to foreign arch   : $PortingCompiler
935    Alien script              : $AlienScript
936
937    ld       : $LdCmd
938    Happy    : $HappyCmd ($HappyVersion)
939    Alex     : $AlexCmd ($AlexVersion)
940    Python   : $PythonCmd
941    Perl     : $PerlCmd
942    dblatex  : $DblatexCmd
943    xsltproc : $XsltprocCmd"]
944
945 if test "$HSCOLOUR" = ""; then
946 echo ["
947    HsColour was not found; documentation will not contain source links
948 "]
949 else
950 echo ["\
951    HsColour : $HSCOLOUR
952 "]
953 fi
954
955 echo ["\
956    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
957    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
958    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF"]
959
960 echo ["----------------------------------------------------------------------
961 "]
962
963 echo "\
964 For a standard build of GHC (fully optimised with profiling), type (g)make.
965
966 To make changes to the default build configuration, copy the file
967 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
968
969 For more information on how to configure your GHC build, see
970    http://hackage.haskell.org/trac/ghc/wiki/Building
971 "