dnl == autoconf source for the Glasgow FP tools ==
dnl (run "grep '^dnl \*' configure.ac | sed -e 's/dnl / /g; s/\*\*/ +/g;'"
dnl (or some such) to see the outline of this file)
dnl
#
# (c) The University of Glasgow 1994-2004
#
# Configure script template for GHC
#
# Process with 'autoreconf' to get a working configure script.
#
# For the generated configure script, do "./configure --help" to
# see what flags are available. (Better yet, read the documentation!)
#
AC_INIT([The Glorious Glasgow Haskell Compilation System], [6.13], [glasgow-haskell-bugs@haskell.org], [ghc])
# Set this to YES for a released version, otherwise NO
: ${RELEASE=NO}
set -e
# The primary version (e.g. 6.7, 6.6.1) is set in the AC_INIT line
# above. If this is not a released version, then we will append the
# date to the version number (e.g. 6.7.20070204). The date is
# constructed by finding the date of the most recent patch in the
# darcs repository. If this is a source distribution (not a darcs
# checkout), then we ship a file 'VERSION' containing the full version
# when the source distribution was created.
if test ! -f mk/config.h.in; then
echo "mk/config.h.in doesn't exist: perhaps you haven't run 'sh boot'?"
exit 1
fi
AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
dnl ----------------------------------------------------------
dnl ** Find unixy sort and find commands,
dnl ** which are needed by FP_SETUP_PROJECT_VERSION
dnl ** Find find command (for Win32's benefit)
FP_PROG_FIND
dnl ** Find sort command (for the benefit of Win32 environs)
FP_PROG_SORT
dnl ----------------------------------------------------------
FP_SETUP_PROJECT_VERSION
# Hmmm, we fix the RPM release number to 1 here... Is this convenient?
AC_SUBST([release], [1])
# First off, a distrib sanity check..
AC_CONFIG_SRCDIR([mk/config.mk.in])
dnl * We require autoconf version 2.52
dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
AC_PREREQ([2.52])
# -------------------------------------------------------------------------
# Prepare to generate the following header files
#
#
AC_CONFIG_HEADER(mk/config.h)
# No, semi-sadly, we don't do `--srcdir'...
if test x"$srcdir" != 'x.' ; then
echo "This configuration does not support the \`--srcdir' option.."
exit 1
fi
dnl --------------------------------------------------------------
dnl * Project specific configuration options
dnl --------------------------------------------------------------
dnl What follows is a bunch of options that can either be configured
dnl through command line options to the configure script or by
dnl supplying defns in the build tree's mk/build.mk. Having the option to
dnl use either is considered a Feature.
dnl ** What command to use to compile compiler sources ?
dnl --------------------------------------------------------------
AC_ARG_WITH([ghc],
[AC_HELP_STRING([--with-ghc=ARG],
[Use ARG as the path to GHC [default=autodetect]])],
[WithGhc="$withval"],
[if test "$GHC" = ""; then
AC_PATH_PROG([GHC], [ghc])
fi
WithGhc="$GHC"])
dnl ** Booting from .hc files?
dnl --------------------------------------------------------------
AC_ARG_ENABLE(hc-boot,
[AC_HELP_STRING([--enable-hc-boot],
[Boot the Glasgow Haskell Compiler from intermediate .hc files.
(This option is mostly of interest to porters.) [default=no]])],
[ if test x"$enableval" = x"yes"; then
BootingFromHc=YES
else
BootingFromHc=NO
fi
],
[BootingFromHc=NO]
)
AC_SUBST(BootingFromHc)
AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
[AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
[Allow bootstrapping using a development snapshot of GHC. This is not guaranteed to work.])],
EnableBootstrapWithDevelSnaphost=YES,
EnableBootstrapWithDevelSnaphost=NO
)
if test "$WithGhc" != ""; then
FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
AC_MSG_ERROR([Cannot determine the version of $WithGhc. Is it really GHC?])
fi
AC_SUBST(GhcVersion)dnl
AC_SUBST(GhcMajVersion)dnl
AC_SUBST(GhcMinVersion)dnl
AC_SUBST(GhcPatchLevel)dnl
GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi
FP_COMPARE_VERSIONS($GhcVersion,[-ge],[6.10.2],
[ghc_ge_6102=YES], [ghc_ge_6102=NO])
if test $GhcCanonVersion -ge 611; then ghc_ge_611=YES; else ghc_ge_611=NO; fi
AC_SUBST(ghc_ge_609)dnl
AC_SUBST(ghc_ge_6102)dnl
AC_SUBST(ghc_ge_611)dnl
fi
dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then
if test "$WithGhc" = ""; then
AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
fi
FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.8],
[AC_MSG_ERROR([GHC version 6.8 or later is required to compile GHC.])])dnl
if test `expr $GhcMinVersion % 2` = "1"; then
if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
AC_MSG_ERROR([
$WithGhc is a development snapshot of GHC, version $GhcVersion.
Bootstrapping using this version of GHC is not supported, and may not
work. Use --enable-bootstrap-with-devel-snapshot to try it anyway,
or --with-ghc to specify a different GHC to use.])
fi
fi
fi;
# GHC is passed to Cabal, so we need a native path
if test "${WithGhc}" != ""
then
ghc_host=`${WithGhc} +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'`
if test "$ghc_host" = "i386-unknown-mingw32"
then
if test "${OSTYPE}" = "msys"
then
WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
else
# Canonicalise to <drive>:/path/to/ghc
WithGhc=`cygpath -m ${WithGhc}`
fi
echo "GHC path canonicalised to: ${WithGhc}"
fi
fi
AC_SUBST([WithGhc])
dnl ** Without optimization some INLINE trickery fails for GHCi
SRC_CC_OPTS="-O"
dnl Allow to specify iconv options to the toplevel configure script
dnl so they can be properly passed to sub-builds.
dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
dnl to the empty string to allow them to be overridden from the
dnl environment.
AC_ARG_WITH([iconv-includes],
[AC_HELP_STRING([--with-iconv-includes],
[directory containing iconv.h])],
[ICONV_INCLUDE_DIRS=$withval])
AC_ARG_WITH([iconv-libraries],
[AC_HELP_STRING([--with-iconv-libraries],
[directory containing iconv library])],
[ICONV_LIB_DIRS=$withval])
AC_SUBST(ICONV_INCLUDE_DIRS)
AC_SUBST(ICONV_LIB_DIRS)
dnl--------------------------------------------------------------------
dnl * Choose host(/target/build) platform
dnl--------------------------------------------------------------------
dnl We don't use the standard autoconf macros for this, but instead
dnl ask the bootstrapping compiler what platform it is for
dnl Guess host/target/build platform(s) if necessary.
m4_divert_once([HELP_CANON],
[[
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [guessed]
--target=TARGET configure for building compilers for TARGET [guessed]]])dnl
if test "$build" = ""
then
if test "${WithGhc}" != ""
then
build=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
echo "Build platform inferred as: $build"
else
echo "Can't work out build platform"
exit 1
fi
fi
if test "$host" = ""
then
if test "${WithGhc}" != ""
then
host=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
echo "Host platform inferred as: $host"
else
echo "Can't work out host platform"
exit 1
fi
fi
if test "$target" = ""
then
if test "${WithGhc}" != ""
then
target=`${WithGhc} +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
echo "Target platform inferred as: $target"
else
echo "Can't work out target platform"
exit 1
fi
fi
exeext=''
soext='.so'
case $host in
*-unknown-cygwin32)
AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
exit 1
;;
*-unknown-mingw32)
exeext='.exe'
soext='.dll'
;;
i386-apple-darwin|powerpc-apple-darwin)
soext='.dylib'
CFLAGS="$CFLAGS -m32"
LDFLAGS="$LDFLAGS -m32"
CONF_CC_OPTS="$CONF_CC_OPTS -m32"
CONF_LD_OPTS="$CONF_LD_OPTS -m32"
;;
x86_64-apple-darwin)
soext='.dylib'
CFLAGS="$CFLAGS -m64"
LDFLAGS="$LDFLAGS -m64"
CONF_CC_OPTS="$CONF_CC_OPTS -m64"
CONF_LD_OPTS="$CONF_LD_OPTS -m64"
;;
esac
checkArch() {
case $1 in
alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64)
;;
*)
echo "Unknown arch $1"
exit 1
;;
esac
}
checkVendor() {
case $1 in
dec|unknown|hp|apple|next|sun|sgi|ibm)
;;
*)
echo "Unknown vendor $1"
exit 1
;;
esac
}
checkOS() {
case $1 in
linux|freebsd|netbsd|openbsd|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix)
;;
*)
echo "Unknown OS '$1'"
exit 1
;;
esac
}
BuildPlatform=$build
BuildArch=`echo "$build" | sed 's/-.*//'`
BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
BuildOS=`echo "$build" | sed 's/.*-//'`
BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
BuildArch_CPP=` echo "$BuildArch" | sed -e 's/\./_/g' -e 's/-/_/g'`
BuildVendor_CPP=` echo "$BuildVendor" | sed -e 's/\./_/g' -e 's/-/_/g'`
BuildOS_CPP=` echo "$BuildOS" | sed -e 's/\./_/g' -e 's/-/_/g'`
checkArch "$BuildArch"
checkVendor "$BuildVendor"
checkOS "$BuildOS"
HostPlatform=$host
HostArch=`echo "$host" | sed 's/-.*//'`
HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
HostOS=`echo "$host" | sed 's/.*-//'`
HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
HostArch_CPP=` echo "$HostArch" | sed -e 's/\./_/g' -e 's/-/_/g'`
HostVendor_CPP=` echo "$HostVendor" | sed -e 's/\./_/g' -e 's/-/_/g'`
HostOS_CPP=` echo "$HostOS" | sed -e 's/\./_/g' -e 's/-/_/g'`
checkArch "$HostArch"
checkVendor "$HostVendor"
checkOS "$HostOS"
TargetPlatform=$target
TargetArch=`echo "$target" | sed 's/-.*//'`
TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
TargetOS=`echo "$target" | sed 's/.*-//'`
TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
TargetArch_CPP=` echo "$TargetArch" | sed -e 's/\./_/g' -e 's/-/_/g'`
TargetVendor_CPP=` echo "$TargetVendor" | sed -e 's/\./_/g' -e 's/-/_/g'`
TargetOS_CPP=` echo "$TargetOS" | sed -e 's/\./_/g' -e 's/-/_/g'`
checkArch "$TargetArch"
checkVendor "$TargetVendor"
checkOS "$TargetOS"
AC_SUBST(BuildPlatform)
AC_SUBST(HostPlatform)
AC_SUBST(TargetPlatform)
AC_SUBST(HostPlatform_CPP)
AC_SUBST(BuildPlatform_CPP)
AC_SUBST(TargetPlatform_CPP)
AC_SUBST(HostArch_CPP)
AC_SUBST(BuildArch_CPP)
AC_SUBST(TargetArch_CPP)
AC_SUBST(HostOS_CPP)
AC_SUBST(BuildOS_CPP)
AC_SUBST(TargetOS_CPP)
AC_SUBST(HostVendor_CPP)
AC_SUBST(BuildVendor_CPP)
AC_SUBST(TargetVendor_CPP)
AC_SUBST(exeext)
AC_SUBST(soext)
AC_ARG_WITH(hc,
[AC_HELP_STRING([--with-hc=ARG],
[Use ARG as the path to the compiler for compiling ordinary
Haskell code (default= value of --with-ghc)])],
[WithHc="$withval"],
[WithHc=$WithGhc]
)
AC_SUBST(WithHc)
AC_PATH_PROGS(NHC,nhc nhc98)
AC_PATH_PROG(HBC,hbc)
# This uses GHC, so put it after the "GHC is required" check above:
FP_FIND_ROOT
if test "$HostOS" = "mingw32"
then
CC="$hardtop/inplace/mingw/bin/gcc.exe"
LD="$hardtop/inplace/mingw/bin/ld.exe"
NM="$hardtop/inplace/mingw/bin/nm.exe"
if ! test -d inplace/mingw ||
test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.gz ||
test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.gz ||
test inplace/mingw -ot ghc-tarballs/mingw/libcrypt*.tar.bz2 ||
test inplace/mingw -ot ghc-tarballs/mingw/mingw-runtime*.tar.gz ||
test inplace/mingw -ot ghc-tarballs/mingw/perl*.tar.bz2 ||
test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.gz
then
AC_MSG_NOTICE([Making in-tree mingw tree])
rm -rf inplace/mingw
mkdir inplace
mkdir inplace/mingw
cd inplace/mingw
tar -zxf ../../ghc-tarballs/mingw/binutils*.tar.gz
tar -zxf ../../ghc-tarballs/mingw/gcc-core*.tar.gz
tar -jxf ../../ghc-tarballs/mingw/libcrypt*.tar.bz2
tar -zxf ../../ghc-tarballs/mingw/mingw-runtime*.tar.gz
tar -jxf ../../ghc-tarballs/mingw/perl*.tar.bz2
tar -zxf ../../ghc-tarballs/mingw/w32api*.tar.gz
cd ../..
AC_MSG_NOTICE([In-tree mingw tree created])
fi
fi
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
export CC
WhatGccIsCalled="$CC"
AC_SUBST(WhatGccIsCalled)
dnl ** Which ld to use?
dnl --------------------------------------------------------------
FP_ARG_WITH_PATH_GNU_PROG([LD], [ld])
LdCmd="$LD"
AC_SUBST([LdCmd])
dnl ** Which nm to use?
dnl --------------------------------------------------------------
FP_ARG_WITH_PATH_GNU_PROG([NM], [nm])
NmCmd="$NM"
AC_SUBST([NmCmd])
dnl ** Mac OS X: explicit deployment target
dnl --------------------------------------------------------------
AC_ARG_WITH([macosx-deployment-target],
[AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
[Build for Mac OS VERSION and higher (default= version of build host)])],
[FP_MACOSX_DEPLOYMENT_TARGET="$withval"
if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
# ignore everywhere, but on Mac OS
AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
FP_MACOSX_DEPLOYMENT_TARGET=none
fi],
[FP_MACOSX_DEPLOYMENT_TARGET=none]
)
FP_CHECK_MACOSX_DEPLOYMENT_TARGET
AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
AC_SUBST(MACOSX_DEPLOYMENT_SDK)
dnl --------------------------------------------------------------
dnl End of configure script option section
dnl --------------------------------------------------------------
dnl --------------------------------------------------------------
dnl * General configuration checks
dnl --------------------------------------------------------------
dnl ** Can the unix package be built?
dnl --------------------------------------------------------------
if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
GhcLibsWithUnix=NO
else
GhcLibsWithUnix=YES
fi
AC_SUBST([GhcLibsWithUnix])
dnl ** does #! work?
AC_SYS_INTERPRETER()
dnl ** look for `perl', but only in /bin on Windows
case $HostOS_CPP in
cygwin32|mingw32)
AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
if test -z "$PerlCmd"; then
echo "You must install the version of Perl shipped with GHC"
echo "(or a compatible one) in /bin."
exit 1
fi
;;
*)
AC_PATH_PROG(PerlCmd,perl)
if test -z "$PerlCmd"; then
echo "You must install perl before you can continue"
echo "Perhaps it is already installed, but not in your PATH?"
exit 1
else
FPTOOLS_CHECK_PERL_VERSION
fi
;;
esac
dnl ** does #! path/to/perl work? (sometimes it's too long...)
FPTOOLS_SHEBANG_PERL
dnl ** check for Python
AC_PATH_PROG(PythonCmd,python)
dnl ** look for GCC and find out which version
dnl Figure out which C compiler to use. Gcc is preferred.
dnl If gcc, make sure it's at least 2.1
dnl
FP_HAVE_GCC
FP_GCC_EXTRA_FLAGS
dnl ** figure out how to invoke cpp directly (gcc -E is no good)
AC_PROG_CPP
AC_SUBST(CONF_CC_OPTS)
AC_SUBST(CONF_LD_OPTS)
dnl ** figure out how to do context diffs
FP_PROG_CONTEXT_DIFF
dnl Let's make sure install-sh is executable here. If we got it from
dnl a darcs repo, it might not be (see bug #978).
chmod +x install-sh
dnl ** figure out how to do a BSD-ish install
AC_PROG_INSTALL
dnl If you can run configure, you certainly have /bin/sh
AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
dnl ** how to invoke `ar' and `ranlib'
FP_PROG_AR_NEEDS_RANLIB
FP_PROG_AR_SUPPORTS_INPUT
dnl ** Check to see whether ln -s works
AC_PROG_LN_S
dnl ** Find the path to sed
AC_PATH_PROG(SedCmd,sed)
dnl ** check for time command
AC_PATH_PROG(TimeCmd,time)
dnl ** check for tar
dnl if GNU tar is named gtar, look for it first.
AC_PATH_PROGS(TarCmd,gtar tar,tar)
dnl ** check for patch
dnl if GNU patch is named gpatch, look for it first
AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
AC_PATH_PROG(HSCOLOUR,HsColour)
# HsColour is passed to Cabal, so we need a native path
if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
test "${OSTYPE}" != "msys" && \
test "${HSCOLOUR}" != ""
then
# Canonicalise to <drive>:/path/to/gcc
HSCOLOUR=`cygpath -m ${HSCOLOUR}`
fi
dnl ** check for DocBook toolchain
FP_CHECK_DOCBOOK_DTD
FP_DOCBOOK_XSL
FP_PROG_DBLATEX
FP_PROG_HSTAGS
dnl ** check for ghc-pkg command
FP_PROG_GHC_PKG
dnl ** check for installed happy binary + version
dnl (don't do it if we're booting from .hc files though.)
if test "$BootingFromHc" = "NO"; then
FPTOOLS_HAPPY
fi;
dnl ** check for installed alex binary + version
dnl (don't do it if we're booting from .hc files though.)
if test "$BootingFromHc" = "NO"; then
FPTOOLS_ALEX
fi;
dnl --------------------------------------------------
dnl ### program checking section ends here ###
dnl --------------------------------------------------
dnl --------------------------------------------------
dnl * Platform header file and syscall feature tests
dnl ### checking the state of the local header files and syscalls ###
dnl ** check for full ANSI header (.h) files
AC_HEADER_STDC
dnl ** Enable large file support. NB. do this before testing the type of
dnl off_t, because it will affect the result of that test.
AC_SYS_LARGEFILE
dnl ** check for specific header (.h) files that we are interested in
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])
dnl ** check if it is safe to include both <time.h> and <sys/time.h>
AC_HEADER_TIME
dnl ** do we have long longs?
AC_CHECK_TYPES([long long])
dnl ** what are the sizes of various types
AC_CHECK_SIZEOF(char, 1)
AC_CHECK_SIZEOF(double, 8)
AC_CHECK_SIZEOF(float, 4)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long, 4)
if test "$ac_cv_type_long_long" = yes; then
AC_CHECK_SIZEOF(long long, 8)
fi
AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(unsigned char, 1)
AC_CHECK_SIZEOF(unsigned int, 4)
AC_CHECK_SIZEOF(unsigned long, 4)
if test "$ac_cv_type_long_long" = yes; then
AC_CHECK_SIZEOF(unsigned long long, 8)
fi
AC_CHECK_SIZEOF(unsigned short, 2)
AC_CHECK_SIZEOF(void *, 4)
dnl ** what are alignment constraints on various types
FP_CHECK_ALIGNMENT(char)
FP_CHECK_ALIGNMENT(double)
FP_CHECK_ALIGNMENT(float)
FP_CHECK_ALIGNMENT(int)
FP_CHECK_ALIGNMENT(long)
if test "$ac_cv_type_long_long" = yes; then
FP_CHECK_ALIGNMENT(long long)
fi
FP_CHECK_ALIGNMENT(short)
FP_CHECK_ALIGNMENT(unsigned char)
FP_CHECK_ALIGNMENT(unsigned int)
FP_CHECK_ALIGNMENT(unsigned long)
if test "$ac_cv_type_long_long" = yes; then
FP_CHECK_ALIGNMENT(unsigned long long)
fi
FP_CHECK_ALIGNMENT(unsigned short)
FP_CHECK_ALIGNMENT(void *)
FP_CHECK_FUNC([WinExec],
[@%:@include <windows.h>], [WinExec("",0)])
FP_CHECK_FUNC([GetModuleFileName],
[@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
dnl ** check return type of signal handlers
dnl Foo: assumes we can use prototypes.
dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
dnl #include <signal.h>
dnl #ifdef signal
dnl #undef signal
dnl #endif
dnl void (*signal (int, void (*)(int)))(int);
dnl ]],
dnl [[int i;]])],
dnl [ac_cv_type_signal_handler=void_int],
dnl [ac_cv_type_signal_handler=int_void])])
dnl if test "$ac_cv_type_signal_handler" = void_int; then
dnl AC_DEFINE(VOID_INT_SIGNALS)
dnl fi
dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
AC_TYPE_SIGNAL
if test "$ac_cv_type_signal" = void; then
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).])
fi
dnl ** check for more functions
dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
AC_TRY_RUN([
#include <sys/types.h>
#include <sys/time.h>
int main(void) {
struct itimerval tval;
tval.it_value.tv_sec = 1;
tval.it_value.tv_usec = 0;
tval.it_interval = tval.it_value;
return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
}
],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
dnl ** _POSIX_C_SOURCE is defined
AC_CHECK_DECLS([ctime_r], , ,
[#define _POSIX_SOURCE 1
#define _POSIX_C_SOURCE 199506L
#include <time.h>])
dnl ** check for mingwex library
AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
AC_SUBST(HaveLibMingwEx)
if test $HaveLibMingwEx = YES ; then
AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
fi
dnl ** check whether this machine has BFD and liberty installed (used for debugging)
dnl the order of these tests matters: bfd needs liberty
AC_CHECK_LIB(iberty, xmalloc)
AC_CHECK_LIB(bfd, bfd_init)
dnl ** check for math library
AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
if test x"$fp_libm_not_needed" = xdunno; then
AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
fi
AC_SUBST([LIBM])
dnl ################################################################
dnl Check for libraries
dnl ################################################################
dnl ** check whether we need -ldl to get dlopen()
AC_CHECK_LIB(dl, dlopen,
[HaveLibDL=YES
AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
LIBS="$LIBS -ldl"],
[HaveLibDL=NO])
AC_SUBST(HaveLibDL)
dnl --------------------------------------------------
dnl * Miscellaneous feature tests
dnl --------------------------------------------------
dnl ** can we get alloca?
AC_FUNC_ALLOCA
dnl ** Working vfork?
AC_FUNC_FORK
dnl ** determine whether or not const works
AC_C_CONST
dnl ** are we big endian?
AC_C_BIGENDIAN
FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
dnl ** check for leading underscores in symbol names
FP_LEADING_UNDERSCORE
dnl ** check for ld, whether it has an -x option, and if it is GNU ld
FP_PROG_LD_X
FP_PROG_LD_IS_GNU
dnl ** check for Apple-style dead-stripping support
dnl (.subsections-via-symbols assembler directive)
AC_MSG_CHECKING(for .subsections_via_symbols)
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
[AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
[Define to 1 if Apple-style dead-stripping is supported.])
],
[AC_MSG_RESULT(no)])
dnl *** check for GNU non-executable stack note support (ELF only)
dnl (.section .note.GNU-stack,"",@progbits)
AC_MSG_CHECKING(for GNU non-executable stack support)
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
[AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
[Define to 1 if GNU non-executable stack notes are supported.])
],
[AC_MSG_RESULT(no)])
dnl ** check for librt
AC_CHECK_LIB(rt, clock_gettime)
AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
FP_CHECK_TIMER_CREATE
dnl ** check for Apple's "interesting" long double compatibility scheme
AC_MSG_CHECKING(for printf\$LDBLStub)
AC_TRY_LINK_FUNC(printf\$LDBLStub,
[
AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
[Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
],
[
AC_MSG_RESULT(no)
AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
[Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
])
# test for GTK+
AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
if test -n "$GTK_CONFIG"; then
if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
else
AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
GTK_CONFIG=
fi
fi
AC_SUBST([GTK_CONFIG])
#Checking for PAPI
AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
AC_SUBST(HavePapiLib)
AC_SUBST(HavePapiHeader)
AC_CHECK_FUNCS(__mingw_vfprintf)
if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
HavePapi=YES
else
HavePapi=NO
fi
AC_SUBST(HavePapi)
if test "$HAVE_DOCBOOK_XSL" = "NO" ||
test "$XsltprocCmd" = ""
then
BUILD_DOCBOOK_HTML=NO
else
BUILD_DOCBOOK_HTML=YES
fi
AC_SUBST(BUILD_DOCBOOK_HTML)
if test "$DblatexCmd" = ""
then
BUILD_DOCBOOK_PS=NO
BUILD_DOCBOOK_PDF=NO
else
BUILD_DOCBOOK_PS=YES
BUILD_DOCBOOK_PDF=YES
fi
AC_SUBST(BUILD_DOCBOOK_PS)
AC_SUBST(BUILD_DOCBOOK_PDF)
if grep ' ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
fi
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 distrib/configure-bin.ac])
AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
AC_OUTPUT
# We get caught by
# http://savannah.gnu.org/bugs/index.php?1516
# $(eval ...) inside conditionals causes errors
# with make 3.80, so warn the user if it looks like they're about to
# try to use it.
# We would use "grep -q" here, but Solaris's grep doesn't support it.
checkMake380() {
if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
then
echo
echo "WARNING: It looks like \"$1\" is GNU make 3.80."
echo "This version cannot be used to build GHC."
echo "Please use GNU make >= 3.81."
fi
}
checkMake380 make
checkMake380 gmake
echo ["
----------------------------------------------------------------------
Configure completed successfully.
Building GHC version : $ProjectVersion
Build platform : $BuildPlatform
Host platform : $HostPlatform
Target platform : $TargetPlatform
"]
if test "$BootingFromHc" = "YES"; then
echo ["\
Bootstrapping from HC files.
"]
else
echo ["\
Bootstrapping using : $WithGhc
which is version : $GhcVersion
"]
fi
echo ["\
Using GCC : $WhatGccIsCalled
which is version : $GccVersion
ld : $LdCmd
Happy : $HappyCmd ($HappyVersion)
Alex : $AlexCmd ($AlexVersion)
Python : $PythonCmd
Perl : $PerlCmd
dblatex : $DblatexCmd
xsltproc : $XsltprocCmd"]
if test "$HSCOLOUR" = ""; then
echo ["
HsColour was not found; documentation will not contain source links
"]
else
echo ["\
HsColour : $HSCOLOUR
"]
fi
echo ["\
Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
Building DocBook PS documentation : $BUILD_DOCBOOK_PS
Building DocBook PDF documentation : $BUILD_DOCBOOK_PDF"]
echo ["----------------------------------------------------------------------
"]
echo "\
For a standard build of GHC (fully optimised with profiling), type (g)make.
To make changes to the default build configuration, copy the file
mk/build.mk.sample to mk/build.mk, and edit the settings in there.
For more information on how to configure your GHC build, see
http://hackage.haskell.org/trac/ghc/wiki/Building
"