Make our install variables etc compliant with GNU standards; fixes #1924
[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-2004
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], [6.11], [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. 6.7, 6.6.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. 6.7.20070204).  The date is
24 # constructed by finding the date of the most recent patch in the
25 # darcs repository.  If this is a source distribution (not a darcs
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 'sh 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 dnl ** Booting from unregisterised .hc files?
93 dnl --------------------------------------------------------------
94 AC_ARG_ENABLE(hc-boot-unregisterised,
95 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
96 [ With --enable-hc-boot, treat the intermediate .hc files as
97  unregisterised rather than registerised code.
98  (This option is mostly of interest to porters.) [default=no]])],
99 [ if test x"$enableval" = x"yes"; then
100         BootingFromUnregisterisedHc=YES
101   else
102         BootingFromUnregisterisedHc=NO
103   fi
104 ],
105 [BootingFromUnregisterisedHc=NO]
106 )
107 AC_SUBST(BootingFromUnregisterisedHc)
108
109 if test "$BootingFromHc" = "NO"; then
110 if test "$BootingFromUnregisterisedHc" = "YES"; then
111 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
112 fi;
113 fi;
114
115 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
116 if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then
117   if test "$WithGhc" = ""; then
118      AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
119   fi
120   FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.8],
121     [AC_MSG_ERROR([GHC version 6.8 or later is required to compile GHC.])])dnl
122
123   if test `expr $GhcMinVersion % 2` = "1"; then
124      echo $EnableBootstrapWithDevelSnaphost
125      if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
126         AC_MSG_ERROR([
127      $WithGhc is a development snapshot of GHC, version $GhcVersion.
128      Bootstrapping using this version of GHC is not supported, and may not
129      work.  Use --enable-bootstrap-with-devel-snapshot to try it anyway,
130      or --with-ghc to specify a different GHC to use.])
131      fi
132   fi
133 fi;
134
135 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
136 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
137                 [Allow bootstrapping using a development snapshot of GHC.  This is not guaranteed to work.])],
138         EnableBootstrapWithDevelSnaphost=YES,
139         EnableBootstrapWithDevelSnaphost=NO
140 )
141
142 if test "$WithGhc" != ""; then
143   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
144
145   if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
146      AC_MSG_ERROR([Cannot determine the version of $WithGhc.  Is it really GHC?])
147   fi
148
149   AC_SUBST(GhcVersion)dnl
150   AC_SUBST(GhcMajVersion)dnl
151   AC_SUBST(GhcMinVersion)dnl
152   AC_SUBST(GhcPatchLevel)dnl
153   GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
154   GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
155   if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi
156   AC_SUBST(ghc_ge_609)dnl
157 fi
158
159 # GHC is passed to Cabal, so we need a native path
160 if test "${WithGhc}" != ""
161 then
162     ghc_host=`${WithGhc} +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'`
163
164     if test "$ghc_host" = "i386-unknown-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 dnl--------------------------------------------------------------------
182 dnl * Choose host(/target/build) platform
183 dnl--------------------------------------------------------------------
184 dnl We don't use the standard autoconf macros for this, but instead
185 dnl ask the bootstrapping compiler what platform it is for
186
187 dnl Guess host/target/build platform(s) if necessary.
188 m4_divert_once([HELP_CANON],
189 [[
190 System types:
191   --build=BUILD     configure for building on BUILD [guessed]
192   --host=HOST       cross-compile to build programs to run on HOST [guessed]
193   --target=TARGET   configure for building compilers for TARGET [guessed]]])dnl
194
195 if test "$build" = ""
196 then
197     if test "${WithGhc}" != ""
198     then
199         build=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
200         echo "Build platform inferred as: $build"
201     else
202         echo "Can't work out build platform"
203         exit 1
204     fi
205 fi
206
207 if test "$host" = ""
208 then
209     if test "${WithGhc}" != ""
210     then
211         host=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
212         echo "Host platform inferred as: $host"
213     else
214         echo "Can't work out host platform"
215         exit 1
216     fi
217 fi
218
219 if test "$target" = ""
220 then
221     if test "${WithGhc}" != ""
222     then
223         target=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
224         echo "Target platform inferred as: $target"
225     else
226         echo "Can't work out target platform"
227         exit 1
228     fi
229 fi
230
231 exeext=''
232 soext='.so'
233 case $host in
234 *-unknown-cygwin32)
235     AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
236     AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
237     exit 1
238     ;;
239 *-unknown-mingw32)
240     exeext='.exe'
241     soext='.dll'
242     ;;
243 i386-apple-darwin|powerpc-apple-darwin)
244     soext='.dylib'
245     CFLAGS="$CFLAGS -m32"
246     LDFLAGS="$LDFLAGS -m32"
247     SRC_CC_OPTS="$SRC_CC_OPTS -m32"
248     SRC_LD_OPTS="$SRC_LD_OPTS -m32"
249     ;;
250 x86_64-apple-darwin)
251     soext='.dylib'
252     CFLAGS="$CFLAGS -m64"
253     LDFLAGS="$LDFLAGS -m64"
254     SRC_CC_OPTS="$SRC_CC_OPTS -m64"
255     SRC_LD_OPTS="$SRC_LD_OPTS -m64"
256     ;;
257 esac
258
259 checkArch() {
260     case $1 in
261     alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64)
262         ;;
263     *)
264         echo "Unknown arch $1"
265         exit 1
266         ;;
267     esac
268 }
269
270 checkVendor() {
271     case $1 in
272     dec|unknown|hp|apple|next|sun|sgi|ibm)
273         ;;
274     *)
275         echo "Unknown vendor $1"
276         exit 1
277         ;;
278     esac
279 }
280
281 checkOS() {
282     case $1 in
283     linux|freebsd|netbsd|openbsd|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix)
284         ;;
285     *)
286         echo "Unknown OS '$1'"
287         exit 1
288         ;;
289     esac
290 }
291
292 BuildPlatform=$build
293 BuildArch=`echo "$build" | sed 's/-.*//'`
294 BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
295 BuildOS=`echo "$build" | sed 's/.*-//'`
296 BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
297 BuildArch_CPP=`    echo "$BuildArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
298 BuildVendor_CPP=`  echo "$BuildVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
299 BuildOS_CPP=`      echo "$BuildOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
300
301 checkArch "$BuildArch"
302 checkVendor "$BuildVendor"
303 checkOS "$BuildOS"
304
305 HostPlatform=$host
306 HostArch=`echo "$host" | sed 's/-.*//'`
307 HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
308 HostOS=`echo "$host" | sed 's/.*-//'`
309 HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
310 HostArch_CPP=`    echo "$HostArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
311 HostVendor_CPP=`  echo "$HostVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
312 HostOS_CPP=`      echo "$HostOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
313
314 checkArch "$HostArch"
315 checkVendor "$HostVendor"
316 checkOS "$HostOS"
317
318 TargetPlatform=$target
319 TargetArch=`echo "$target" | sed 's/-.*//'`
320 TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
321 TargetOS=`echo "$target" | sed 's/.*-//'`
322 TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
323 TargetArch_CPP=`    echo "$TargetArch"     | sed -e 's/\./_/g' -e 's/-/_/g'`
324 TargetVendor_CPP=`  echo "$TargetVendor"   | sed -e 's/\./_/g' -e 's/-/_/g'`
325 TargetOS_CPP=`      echo "$TargetOS"       | sed -e 's/\./_/g' -e 's/-/_/g'`
326
327 checkArch "$TargetArch"
328 checkVendor "$TargetVendor"
329 checkOS "$TargetOS"
330
331 AC_SUBST(BuildPlatform)
332 AC_SUBST(HostPlatform)
333 AC_SUBST(TargetPlatform)
334 AC_SUBST(HostPlatform_CPP)
335 AC_SUBST(BuildPlatform_CPP)
336 AC_SUBST(TargetPlatform_CPP)
337
338 AC_SUBST(HostArch_CPP)
339 AC_SUBST(BuildArch_CPP)
340 AC_SUBST(TargetArch_CPP)
341
342 AC_SUBST(HostOS_CPP)
343 AC_SUBST(BuildOS_CPP)
344 AC_SUBST(TargetOS_CPP)
345
346 AC_SUBST(HostVendor_CPP)
347 AC_SUBST(BuildVendor_CPP)
348 AC_SUBST(TargetVendor_CPP)
349
350 AC_SUBST(exeext)
351 AC_SUBST(soext)
352
353 AC_ARG_WITH(hc,
354 [AC_HELP_STRING([--with-hc=ARG],
355         [Use ARG as the path to the compiler for compiling ordinary
356          Haskell code  (default= value of --with-ghc)])],
357 [WithHc="$withval"],
358 [WithHc=$WithGhc]
359 )
360 AC_SUBST(WithHc)
361
362 AC_PATH_PROGS(NHC,nhc nhc98)
363 AC_PATH_PROG(HBC,hbc)
364
365 dnl ** Which gcc to use?
366 dnl --------------------------------------------------------------
367 AC_ARG_WITH(gcc,
368 [AC_HELP_STRING([--with-gcc=ARG],
369         [Use ARG as the path to GCC  [default=autodetect]])],
370 [WhatGccIsCalled="$withval"
371  if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
372     test "${OSTYPE}"      != "msys"                  && \
373     test "${withval}"     != ""
374  then
375      # Canonicalise to <drive>:/path/to/gcc
376      withval=`cygpath -m ${withval}`
377  fi;
378  CC="$withval"
379  export CC
380  ],
381 [WhatGccIsCalled="gcc"]
382 )
383 AC_SUBST(WhatGccIsCalled)
384
385 dnl ** Which ld to use?
386 dnl --------------------------------------------------------------
387 AC_ARG_WITH(ld,
388 [AC_HELP_STRING([--with-ld=ARG],
389         [Use ARG as the path to LD  [default=autodetect]])],
390 [if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
391     test "${OSTYPE}"      != "msys"                  && \
392     test "${withval}"     != ""
393  then
394      # Canonicalise to <drive>:/path/to/ld
395      withval=`cygpath -m ${withval}`
396  fi;
397  LD=$withval
398  FP_PROG_LD([$LD])
399  ],
400  [FP_PROG_LD()]
401 )
402
403 dnl ** Booting from .hc files?
404 dnl --------------------------------------------------------------
405 AC_ARG_ENABLE(hc-boot,
406 [AC_HELP_STRING([--enable-hc-boot],
407 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
408  (This option is mostly of interest to porters.) [default=no]])],
409 [ if test x"$enableval" = x"yes"; then
410         BootingFromHc=YES
411   else
412         BootingFromHc=NO
413   fi
414 ],
415 [BootingFromHc=NO]
416 )
417 AC_SUBST(BootingFromHc)
418
419 # This uses GHC, so put it after the "GHC is required" check above:
420 FP_FIND_ROOT
421
422 dnl ** Enable the construction of Win32 DLLs?
423 dnl --------------------------------------------------------------
424 dnl
425 dnl [ The ability to build the RTS and libraries as separate DLLs used
426 dnl   to be supported, but isn't currently (updates to the RTS, compiler
427 dnl   and build system would be required to bring it back again.)
428 dnl   Hence, exposing it as an option is false advertisement, so better
429 dnl   disable it to avoid confusion (but leave it commented-out rather
430 dnl   than removed in order to remind ourselves to bring back the
431 dnl   feature at some stage.) ]
432 dnl
433 dnl AC_ARG_ENABLE(win32-dlls,
434 dnl [  --enable-win32-dlls
435 dnl         If on a Win32 platform running mingw32/cygwin, enable the
436 dnl         construction of DLLs containing ghc-compiled code.
437 dnl ],
438 dnl [
439 dnl case $HostOS_CPP in
440 dnl cygwin32) ;;
441 dnl mingw32)  ;;
442 dnl *)    echo "Unrecognised win32 platform: $HostPlatform"
443 dnl       exit 1
444 dnl       ;;
445 dnl esac
446 dnl EnableWin32DLLs=YES
447 dnl ],
448 dnl [EnableWin32DLLs=NO]
449 dnl )
450 dnl AC_SUBST(EnableWin32DLLs)
451 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
452 dnl  AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
453 dnl fi
454
455 dnl ** Mac OS X: explicit deployment target
456 dnl --------------------------------------------------------------
457 AC_ARG_WITH([macosx-deployment-target],
458 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
459         [Build for Mac OS VERSION and higher  (default= version of build host)])],
460 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
461  if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
462    # ignore everywhere, but on Mac OS
463    AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
464    FP_MACOSX_DEPLOYMENT_TARGET=none
465  fi],
466 [FP_MACOSX_DEPLOYMENT_TARGET=none]
467 )
468 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
469 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
470 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
471
472 dnl --------------------------------------------------------------
473 dnl End of configure script option section
474 dnl --------------------------------------------------------------
475
476
477 dnl --------------------------------------------------------------
478 dnl * General configuration checks
479 dnl --------------------------------------------------------------
480
481 dnl ** Can the unix package be built?
482 dnl --------------------------------------------------------------
483
484 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
485    GhcLibsWithUnix=NO
486 else
487    GhcLibsWithUnix=YES
488 fi
489 AC_SUBST([GhcLibsWithUnix])
490
491 dnl ** does #! work?
492 AC_SYS_INTERPRETER()
493
494 dnl ** look for `perl', but only in /bin on Windows
495 case $HostOS_CPP in
496 cygwin32|mingw32)
497       AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
498       if test -z "$PerlCmd"; then
499          echo "You must install the version of Perl shipped with GHC"
500          echo "(or a compatible one) in /bin."
501          exit 1
502       fi
503    ;;
504 *)
505    AC_PATH_PROG(PerlCmd,perl)
506    if test -z "$PerlCmd"; then
507       echo "You must install perl before you can continue"
508       echo "Perhaps it is already installed, but not in your PATH?"
509       exit 1
510    else
511    FPTOOLS_CHECK_PERL_VERSION
512    fi
513    ;;
514 esac
515
516 dnl ** does #! path/to/perl work? (sometimes it's too long...)
517 FPTOOLS_SHEBANG_PERL
518
519 dnl ** check for Python
520 AC_PATH_PROG(PythonCmd,python)
521
522 dnl ** look for GCC and find out which version
523 dnl     Figure out which C compiler to use.  Gcc is preferred.
524 dnl     If gcc, make sure it's at least 2.1
525 dnl
526 FP_HAVE_GCC
527 FP_MINGW_GCC
528 FP_GCC_EXTRA_FLAGS
529
530 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
531 AC_PROG_CPP
532
533 AC_SUBST(SRC_CC_OPTS)
534 AC_SUBST(SRC_LD_OPTS)
535
536 dnl ** figure out how to do context diffs
537 FP_PROG_CONTEXT_DIFF
538
539 dnl Let's make sure install-sh is executable here.  If we got it from
540 dnl a darcs repo, it might not be (see bug #978).
541 chmod +x install-sh
542 dnl ** figure out how to do a BSD-ish install
543 AC_PROG_INSTALL
544
545 dnl If you can run configure, you certainly have /bin/sh
546 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
547
548 dnl ** how to invoke `ar' and `ranlib'
549 FP_PROG_AR_NEEDS_RANLIB
550 FP_PROG_AR_SUPPORTS_INPUT
551
552 dnl ** Check to see whether ln -s works
553 AC_PROG_LN_S
554
555
556 dnl ** Find the path to sed
557 AC_PATH_PROG(SedCmd,sed)
558
559
560 dnl ** check for time command
561 AC_PATH_PROG(TimeCmd,time)
562
563 dnl ** check for tar
564 dnl   if GNU tar is named gtar, look for it first.
565 AC_PATH_PROGS(TarCmd,gtar tar,tar)
566
567 dnl ** check for patch
568 dnl if GNU patch is named gpatch, look for it first
569 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
570
571 AC_PATH_PROG(HSCOLOUR,HsColour)
572 # HsColour is passed to Cabal, so we need a native path
573 if test "x$HostPlatform"  = "xi386-unknown-mingw32" && \
574    test "${OSTYPE}"      != "msys"                  && \
575    test "${HSCOLOUR}"    != ""
576 then
577     # Canonicalise to <drive>:/path/to/gcc
578     HSCOLOUR=`cygpath -m ${HSCOLOUR}`
579 fi
580
581 dnl ** check for DocBook toolchain
582 FP_CHECK_DOCBOOK_DTD
583 FP_DOCBOOK_XSL
584 FP_PROG_DBLATEX
585
586 FP_PROG_HSTAGS
587
588 dnl ** check for ghc-pkg command
589 FP_PROG_GHC_PKG
590
591 dnl ** check for installed happy binary + version
592 dnl    (don't do it if we're booting from .hc files though.)
593 if test "$BootingFromHc" = "NO"; then
594 FPTOOLS_HAPPY
595 fi;
596
597 dnl ** check for installed alex binary + version
598 dnl    (don't do it if we're booting from .hc files though.)
599 if test "$BootingFromHc" = "NO"; then
600 FPTOOLS_ALEX
601 fi;
602
603 dnl Check we have an acceptable version of windres
604 FPTOOLS_WINDRES
605
606 dnl --------------------------------------------------
607 dnl ### program checking section ends here ###
608 dnl --------------------------------------------------
609
610 dnl --------------------------------------------------
611 dnl * Platform header file and syscall feature tests
612 dnl ### checking the state of the local header files and syscalls ###
613
614 dnl ** check for full ANSI header (.h) files
615 AC_HEADER_STDC
616
617 dnl ** Enable large file support.  NB. do this before testing the type of
618 dnl    off_t, because it will affect the result of that test.
619 AC_SYS_LARGEFILE
620
621 dnl ** check for specific header (.h) files that we are interested in
622 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/mman.h sys/resource.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])
623
624 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
625 AC_HEADER_TIME
626
627 dnl ** do we have long longs?
628 AC_CHECK_TYPES([long long])
629
630 dnl ** what are the sizes of various types
631 AC_CHECK_SIZEOF(char,               1)
632 AC_CHECK_SIZEOF(double,             8)
633 AC_CHECK_SIZEOF(float,              4)
634 AC_CHECK_SIZEOF(int,                4)
635 AC_CHECK_SIZEOF(long,               4)
636 if test "$ac_cv_type_long_long" = yes; then
637 AC_CHECK_SIZEOF(long long,          8)
638 fi
639 AC_CHECK_SIZEOF(short,              2)
640 AC_CHECK_SIZEOF(unsigned char,      1)
641 AC_CHECK_SIZEOF(unsigned int,       4)
642 AC_CHECK_SIZEOF(unsigned long,      4)
643 if test "$ac_cv_type_long_long" = yes; then
644 AC_CHECK_SIZEOF(unsigned long long, 8)
645 fi
646 AC_CHECK_SIZEOF(unsigned short,     2)
647 AC_CHECK_SIZEOF(void *,             4)
648
649 dnl ** what are alignment constraints on various types
650 FP_CHECK_ALIGNMENT(char)
651 FP_CHECK_ALIGNMENT(double)
652 FP_CHECK_ALIGNMENT(float)
653 FP_CHECK_ALIGNMENT(int)
654 FP_CHECK_ALIGNMENT(long)
655 if test "$ac_cv_type_long_long" = yes; then
656 FP_CHECK_ALIGNMENT(long long)
657 fi
658 FP_CHECK_ALIGNMENT(short)
659 FP_CHECK_ALIGNMENT(unsigned char)
660 FP_CHECK_ALIGNMENT(unsigned int)
661 FP_CHECK_ALIGNMENT(unsigned long)
662 if test "$ac_cv_type_long_long" = yes; then
663 FP_CHECK_ALIGNMENT(unsigned long long)
664 fi
665 FP_CHECK_ALIGNMENT(unsigned short)
666 FP_CHECK_ALIGNMENT(void *)
667
668 FP_CHECK_FUNC([WinExec],
669   [@%:@include <windows.h>], [WinExec("",0)])
670
671 FP_CHECK_FUNC([GetModuleFileName],
672   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
673
674 dnl ** check return type of signal handlers
675 dnl Foo: assumes we can use prototypes.
676 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
677 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
678 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
679 dnl #include <signal.h>
680 dnl #ifdef signal
681 dnl #undef signal
682 dnl #endif
683 dnl void (*signal (int, void (*)(int)))(int);
684 dnl ]],
685 dnl [[int i;]])],
686 dnl [ac_cv_type_signal_handler=void_int],
687 dnl [ac_cv_type_signal_handler=int_void])])
688 dnl if test "$ac_cv_type_signal_handler" = void_int; then
689 dnl AC_DEFINE(VOID_INT_SIGNALS)
690 dnl fi
691
692 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
693 AC_TYPE_SIGNAL
694 if test "$ac_cv_type_signal" = void; then
695   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).])
696 fi
697
698 dnl ** check for more functions
699 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
700 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
701
702 AC_TRY_RUN([
703 #include <sys/types.h>
704 #include <sys/time.h>
705 int main(void) {
706   struct itimerval tval;
707   tval.it_value.tv_sec = 1;
708   tval.it_value.tv_usec = 0;
709   tval.it_interval = tval.it_value;
710   return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
711 }
712 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
713
714 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
715 dnl ** _POSIX_C_SOURCE is defined
716 AC_CHECK_DECLS([ctime_r], , ,
717 [#define _POSIX_SOURCE 1
718 #define _POSIX_C_SOURCE 199506L
719 #include <time.h>])
720
721 dnl ** check for mingwex library
722 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
723 AC_SUBST(HaveLibMingwEx)
724
725 if test $HaveLibMingwEx = YES ; then
726   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
727 fi
728
729 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
730 dnl    the order of these tests matters: bfd needs liberty
731 AC_CHECK_LIB(iberty, xmalloc)
732 AC_CHECK_LIB(bfd,    bfd_init)
733
734 dnl ** check for math library
735 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
736 if test x"$fp_libm_not_needed" = xdunno; then
737    AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
738 fi
739 AC_SUBST([LIBM])
740
741 dnl ################################################################
742 dnl Check for libraries
743 dnl ################################################################
744
745 dnl ** check whether we need -ldl to get dlopen()
746
747 AC_CHECK_LIB(dl, dlopen,
748     [HaveLibDL=YES
749      AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
750      LIBS="$LIBS -ldl"],
751     [HaveLibDL=NO])
752 AC_SUBST(HaveLibDL)
753
754 dnl --------------------------------------------------
755 dnl * Miscellaneous feature tests
756 dnl --------------------------------------------------
757
758 dnl ** can we get alloca?
759 AC_FUNC_ALLOCA
760
761 dnl ** Working vfork?
762 AC_FUNC_FORK
763
764 dnl ** determine whether or not const works
765 AC_C_CONST
766
767 dnl ** are we big endian?
768 AC_C_BIGENDIAN
769 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
770
771 dnl ** check for leading underscores in symbol names
772 FP_LEADING_UNDERSCORE
773
774 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
775 FP_PROG_LD_X
776 FP_PROG_LD_IS_GNU
777
778 dnl ** check for Apple-style dead-stripping support
779 dnl    (.subsections-via-symbols assembler directive)
780
781
782 AC_MSG_CHECKING(for .subsections_via_symbols)
783 AC_COMPILE_IFELSE(
784     [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
785     [AC_MSG_RESULT(yes)
786      AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
787                [Define to 1 if Apple-style dead-stripping is supported.])
788     ],
789     [AC_MSG_RESULT(no)])
790
791 dnl *** check for GNU non-executable stack note support (ELF only)
792 dnl     (.section .note.GNU-stack,"",@progbits)
793
794 AC_MSG_CHECKING(for GNU non-executable stack support)
795 AC_COMPILE_IFELSE(
796     [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
797     [AC_MSG_RESULT(yes)
798      AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
799                [Define to 1 if GNU non-executable stack notes are supported.])
800     ],
801     [AC_MSG_RESULT(no)])
802
803 dnl ** check for librt
804 AC_CHECK_LIB(rt, clock_gettime)
805 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
806 FP_CHECK_TIMER_CREATE
807
808 dnl ** check for Apple's "interesting" long double compatibility scheme
809 AC_MSG_CHECKING(for printf\$LDBLStub)
810 AC_TRY_LINK_FUNC(printf\$LDBLStub,
811     [
812         AC_MSG_RESULT(yes)
813         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
814             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
815     ],
816     [
817         AC_MSG_RESULT(no)
818         AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
819             [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
820     ])
821
822 # test for GTK+
823 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
824 if test -n "$GTK_CONFIG"; then
825   if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
826     GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
827   else
828     AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
829     GTK_CONFIG=
830   fi
831 fi
832 AC_SUBST([GTK_CONFIG])
833
834 #Checking for PAPI
835 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
836 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
837 AC_SUBST(HavePapiLib)
838 AC_SUBST(HavePapiHeader)
839
840 AC_CHECK_FUNCS(__mingw_vfprintf)
841
842 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
843    HavePapi=YES
844 else
845    HavePapi=NO
846 fi
847 AC_SUBST(HavePapi)
848
849 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
850    test "$XsltprocCmd" = ""
851 then
852     BUILD_DOCBOOK_HTML=NO
853 else
854     BUILD_DOCBOOK_HTML=YES
855 fi
856 AC_SUBST(BUILD_DOCBOOK_HTML)
857
858 if test "$DblatexCmd" = ""
859 then
860     BUILD_DOCBOOK_PS=NO
861     BUILD_DOCBOOK_PDF=NO
862 else
863     BUILD_DOCBOOK_PS=YES
864     BUILD_DOCBOOK_PDF=YES
865 fi
866 AC_SUBST(BUILD_DOCBOOK_PS)
867 AC_SUBST(BUILD_DOCBOOK_PDF)
868
869 if grep '       ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
870    AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
871 fi
872
873 AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml distrib/ghc.iss])
874 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
875 AC_OUTPUT
876
877 # We get caught by
878 #     http://savannah.gnu.org/bugs/index.php?1516
879 #     $(eval ...) inside conditionals causes errors
880 # with make 3.80, so warn the user if it looks like they're about to
881 # try to use it.
882 # We would use "grep -q" here, but Solaris's grep doesn't support it.
883 checkMake380() {
884     if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
885     then
886         echo
887         echo "WARNING: It looks like \"$1\" is GNU make 3.80."
888         echo "This version cannot be used to build GHC."
889         echo "Please use GNU make >= 3.81."
890     fi
891 }
892
893 checkMake380 make
894 checkMake380 gmake
895
896 echo ["
897 ----------------------------------------------------------------------
898 Configure completed successfully.
899
900    Building GHC version  : $ProjectVersion
901
902    Build platform        : $BuildPlatform
903    Host platform         : $HostPlatform
904    Target platform       : $TargetPlatform
905 "]
906
907 if test "$BootingFromHc" = "YES"; then
908 echo ["\
909    Bootstrapping from HC files.
910 "]
911 else
912 echo ["\
913    Bootstrapping using   : $WithGhc
914       which is version   : $GhcVersion
915 "]
916 fi
917
918 echo ["\
919    Using GCC             : $WhatGccIsCalled
920       which is version   : $GccVersion
921
922    ld       : $LdCmd
923    Happy    : $HappyCmd ($HappyVersion)
924    Alex     : $AlexCmd ($AlexVersion)
925    Python   : $PythonCmd
926    Perl     : $PerlCmd
927    dblatex  : $DblatexCmd
928    xsltproc : $XsltprocCmd"]
929
930 if test "$HSCOLOUR" = ""; then
931 echo ["
932    HsColour was not found; documentation will not contain source links
933 "]
934 else
935 echo ["\
936    HsColour : $HSCOLOUR
937 "]
938 fi
939
940 echo ["\
941    Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
942    Building DocBook PS documentation   : $BUILD_DOCBOOK_PS
943    Building DocBook PDF documentation  : $BUILD_DOCBOOK_PDF
944
945    Building shared libraries           : $BuildSharedLibs"]
946
947 echo ["----------------------------------------------------------------------
948 "]
949
950 echo "\
951 For a standard build of GHC (fully optimised with profiling), type (g)make.
952
953 To make changes to the default build configuration, copy the file
954 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
955
956 For more information on how to configure your GHC build, see
957    http://hackage.haskell.org/trac/ghc/wiki/Building
958 "