# see what flags are available. (Better yet, read the documentation!)
#
-AC_INIT([The Glorious Glasgow Haskell Compilation System], [7.7], [glasgow-haskell-bugs@haskell.org], [ghc])
+AC_INIT([The Glorious Glasgow Haskell Compilation System], [8.1], [glasgow-haskell-bugs@haskell.org], [ghc-AC_PACKAGE_VERSION])
# Set this to YES for a released version, otherwise NO
: ${RELEASE=NO}
AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
+dnl this makes sure `./configure --target=<cross-compile-target>`
+dnl works as expected, since we're slightly modifying how Autoconf
+dnl interprets build/host/target and how this interacts with $CC tests
+test -n "$target_alias" && ac_tool_prefix=$target_alias-
+
dnl ----------------------------------------------------------
-dnl ** Find unixy sort and find commands,
+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
+FP_PROG_SORT
dnl ----------------------------------------------------------
FP_SETUP_PROJECT_VERSION
# First off, a distrib sanity check..
AC_CONFIG_SRCDIR([mk/config.mk.in])
-dnl * We require autoconf version 2.52
+dnl * We require autoconf version 2.60
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])
+dnl Using autoconf 2.59 started to give nonsense like this
+dnl #define SIZEOF_CHAR 0
+dnl recently.
+AC_PREREQ([2.60])
# -------------------------------------------------------------------------
# Prepare to generate the following header files
WithGhc="$GHC"])
dnl ** Tell the make system which OS we are using
-dnl $OSTYPE is set by the operating system to "msys" or "cygwin" or something
+dnl $OSTYPE is set by the operating system to "msys" or "cygwin" or something
AC_SUBST(OSTYPE)
-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=NO
)
+AC_ARG_ENABLE(tarballs-autodownload,
+[AC_HELP_STRING([--enable-tarballs-autodownload],
+ [Automatically download Windows distribution binaries if needed.])],
+ TarballsAutodownload=YES,
+ TarballsAutodownload=NO
+)
+
+dnl CC_STAGE0 is like the "previous" variable CC (inherited by CC_STAGE[123])
+dnl but instead used by stage0 for bootstrapping stage1
+AC_ARG_VAR(CC_STAGE0, [C compiler command (bootstrap)])
+
if test "$WithGhc" != ""; then
FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
- BOOTSTRAPPING_GHC_INFO_FIELD([OS_STAGE0],[target os])
- BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
- if test "x$OS_STAGE0" != "xOSDarwin"; then
- BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command])
- BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags])
- BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file])
- else
- AR_STAGE0='$(AR)'
- AR_OPTS_STAGE0='$(AR_OPTS)'
- ArSupportsAtFile_STAGE0='$(ArSupportsAtFile)'
+ dnl infer CC_STAGE0 from `ghc --info` unless explicitly set by user
+ if test -z "$CC_STAGE0"; then
+ BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
fi
+
+ BOOTSTRAPPING_GHC_INFO_FIELD([LD_STAGE0],[ld command])
+ BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command])
+ BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags])
+ BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file])
fi
-dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
-if test "$BootingFromHc" = "NO"; then
- if test "$WithGhc" = ""; then
- AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
- fi
- FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.4],
- [AC_MSG_ERROR([GHC version 7.4 or later is required to compile GHC.])])dnl
+dnl ** Must have GHC to build GHC
+if test "$WithGhc" = ""
+then
+ AC_MSG_ERROR([GHC is required.])
+fi
+FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.10],
+ [AC_MSG_ERROR([GHC version 7.10 or later is required to compile GHC.])])
- if test `expr $GhcMinVersion % 2` = "1"; then
- if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
+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
+fi
- GHC_PACKAGE_DB_FLAG=package-db
- FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.5],GHC_PACKAGE_DB_FLAG=package-conf)
- AC_SUBST(GHC_PACKAGE_DB_FLAG)
-fi;
+GHC_PACKAGE_DB_FLAG=package-db
+AC_SUBST(GHC_PACKAGE_DB_FLAG)
+
+FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.11],
+ SUPPORTS_THIS_UNIT_ID=NO,
+ SUPPORTS_THIS_UNIT_ID=YES)
+AC_SUBST(SUPPORTS_THIS_UNIT_ID)
# GHC is passed to Cabal, so we need a native path
if test "${WithGhc}" != ""
if test "$ghc_host_os" = "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
+ # Canonicalise to <drive>:/path/to/ghc
+ WithGhc=`cygpath -m "${WithGhc}"`
+
echo "GHC path canonicalised to: ${WithGhc}"
fi
fi
# Verify that the installed (bootstrap) GHC is capable of generating
# code for the requested build platform.
-if test "$BootingFromHc" = "NO"
+if test "$BuildPlatform" != "$bootstrap_target"
then
- if test "$BuildPlatform" != "$bootstrap_target"
- then
- echo "This GHC (${WithGhc}) does not generate code for the build platform"
- echo " GHC target platform : $bootstrap_target"
- echo " Desired build platform : $BuildPlatform"
- exit 1
- fi
+ echo "This GHC (${WithGhc}) does not generate code for the build platform"
+ echo " GHC target platform : $bootstrap_target"
+ echo " Desired build platform : $BuildPlatform"
+ exit 1
fi
# Testing if we shall enable shared libs support on Solaris.
# here we go with the test
MINOR=`uname -r|cut -d '.' -f 2-`
if test "$MINOR" -lt "11"; then
- SOLARIS_BROKEN_SHLD=YES
+ SOLARIS_BROKEN_SHLD=YES
fi
;;
esac
dnl ** Do an unregisterised build?
dnl --------------------------------------------------------------
case "$HostArch" in
- i386|x86_64|powerpc|arm)
+ i386|x86_64|powerpc|powerpc64|powerpc64le|arm)
UnregisterisedDefault=NO
;;
*)
)
AC_SUBST(Unregisterised)
-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)
-
-# This uses GHC, so put it after the "GHC is required" check above:
-FP_INTREE_GHC_PWD
+# Requires FPTOOLS_SET_PLATFORM_VARS to be run first.
FP_FIND_ROOT
+fail() {
+ echo >&2
+ echo "$1" >&2
+ exit 1
+}
+
+
if test "$HostOS" = "mingw32"
then
- test -d inplace || mkdir inplace
-
+ # Find the mingw-w64 7z file to extract.
+ # NB. If you update the tarballs to a new version of gcc, don't
+ # forget to tweak the paths in driver/gcc/gcc.c.
if test "$HostArch" = "i386"
then
- # NB. If you update the tarballs to a new version of gcc, don't
- # forget to tweak the paths in driver/gcc/gcc.c.
- if ! test -d inplace/mingw ||
- test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma ||
- test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma ||
- test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma ||
- test inplace/mingw -ot ghc-tarballs/mingw/libgcc*.tar.gz ||
- test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz ||
- test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz ||
- test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz ||
- test inplace/mingw -ot ghc-tarballs/mingw/libstdc*.tar.lzma ||
- test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz ||
- test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz ||
- test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma
- then
- AC_MSG_NOTICE([Making in-tree mingw tree])
- rm -rf inplace/mingw
- mkdir inplace/mingw
- (
- cd inplace/mingw &&
- tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma &&
- tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma &&
- tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma &&
- tar --lzma -xf ../../ghc-tarballs/mingw/libgcc*.tar.lzma &&
- tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma &&
- tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma &&
- tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma &&
- tar --lzma -xf ../../ghc-tarballs/mingw/libstdc*.tar.lzma &&
- tar -z -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz &&
- tar -z -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz &&
- tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma &&
- mv bin/gcc.exe bin/realgcc.exe
- )
- 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
- AC_MSG_NOTICE([In-tree mingw tree created])
- fi
+ mingw_arch="i686"
+ tarball_dest_dir="mingw-w64/x86"
+ tarball_mingw_dir="mingw32"
else
- # NB. If you update the tarballs to a new version of gcc, don't
- # forget to tweak the paths in driver/gcc/gcc.c.
- if ! test -d inplace/mingw ||
- test inplace/mingw -ot ghc-tarballs/mingw64/*.tar.bz2
- then
- AC_MSG_NOTICE([Making in-tree mingw tree])
- rm -rf inplace/mingw
- mkdir inplace/mingw
- (
- cd inplace/mingw &&
- tar -jxf ../../ghc-tarballs/mingw64/*.tar.bz2
- )
- AC_MSG_NOTICE([In-tree mingw tree created])
- fi
+ mingw_arch="x86_64"
+ tarball_dest_dir="mingw-w64/x86_64"
+ tarball_mingw_dir="mingw64"
fi
+fi
+
+set_up_tarballs() {
+ AC_MSG_NOTICE([Checking for Windows toolchain tarballs...])
+ local action
+ if test "$TarballsAutodownload" = "NO"
+ then
+ action="verify"
+ else
+ action="download"
+ fi
+ mk/get-win32-tarballs.sh $action $HostArch > missing-win32-tarballs
+ case $? in
+ 0)
+ rm missing-win32-tarballs
+ ;;
+ 2)
+ echo
+ echo "Error:"
+ echo "Needed msys2 tarballs are missing. You have a few options to get them,"
+ echo
+ echo " * run configure with the --enable-tarballs-autodownload option"
+ echo
+ echo " * run mk/get-win32-tarballs.sh download ${HostArch}"
+ echo
+ echo " * manually download the files listed in ./missing-win32-tarballs and place"
+ echo " them in the ghc-tarballs directory."
+ echo
+ exit 1
+ ;;
+ *)
+ echo
+ echo "Error fetching msys2 tarballs; see errors above."
+ exit 1
+ ;;
+ esac
+
+ # Extract all the tarballs in one go
+ if ! test -d inplace/mingw
+ then
+ AC_MSG_NOTICE([Extracting Windows toolchain from archives (may take a while)...])
+ rm -rf inplace/mingw
+ local base_dir="../ghc-tarballs/${tarball_dest_dir}"
+ ( cd inplace &&
+ find "${base_dir}" -name "*.tar.xz" -exec tar xfJ {} \; &&
+ rm ".MTREE" &&
+ rm ".PKGINFO" &&
+ cd .. ) || fail "Error: Could not extract Windows toolchains."
+
+ mv "inplace/${tarball_mingw_dir}" inplace/mingw &&
+ touch inplace/mingw
+
+ # NB. Now since the GCC is hardcoded to use /mingw32 we need to
+ # make a wrapper around it to give it the proper paths
+ mv inplace/mingw/bin/gcc.exe inplace/mingw/bin/realgcc.exe
+ 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
+
+ AC_MSG_NOTICE([In-tree MingW-w64 tree created])
+ fi
+}
+
+if test "$HostOS" = "mingw32"
+then
+ test -d inplace || mkdir inplace
+
+ # NB. Download and extract the MingW-w64 distribution if required
+ set_up_tarballs
mingwbin="$hardtop/inplace/mingw/bin/"
CC="${mingwbin}gcc.exe"
LD="${mingwbin}ld.exe"
NM="${mingwbin}nm.exe"
+ RANLIB="${mingwbin}ranlib.exe"
OBJDUMP="${mingwbin}objdump.exe"
+ Windres="${mingwbin}windres.exe"
+ DllWrap="${mingwbin}dllwrap.exe"
fp_prog_ar="${mingwbin}ar.exe"
+ # NB. Download the perl binaries if required
if ! test -d inplace/perl ||
test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
then
fi
fi
-# system libffi
-
-AC_ARG_WITH([system-libffi],
-[AC_HELP_STRING([--with-system-libffi],
- [Use system provided libffi for RTS [default=no]])
-])
-
-AS_IF([test "x$with_system_libffi" = "xyes"],
- [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
-)
-
-
-AC_SUBST(UseSystemLibFFI)
-
-AC_ARG_WITH([ffi-includes],
-[AC_HELP_STRING([--with-ffi-includes=ARG]
- [Find includes for libffi in ARG [default=system default]])
-],
-[
- if test "x$UseSystemLibFFI" != "xYES"; then
- AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
- else
- FFIIncludeDir="$withval"
- LIBFFI_CFLAGS="-I $withval"
- fi
-])
-
-AC_SUBST(FFIIncludeDir)
-
-AC_ARG_WITH([ffi-libraries],
-[AC_HELP_STRING([--with-ffi-libraries=ARG]
- [Find libffi in ARG [default=system default]])
-],
-[
- if test "x$UseSystemLibFFI" != "xYES"; then
- AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
- else
- FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
- fi
-])
-
-AC_SUBST(FFILibDir)
-
-AS_IF([test "$UseSystemLibFFI" = "YES"], [
- CFLAGS2="$CFLAGS"
- CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
- LDFLAGS2="$LDFLAGS"
- LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
- AC_CHECK_LIB(ffi, ffi_call,
- [AC_CHECK_HEADERS([ffi.h], [break], [])
- AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
- [AC_MSG_ERROR([Cannot find system libffi])])
- CFLAGS="$CFLAGS2"
- LDFLAGS="$LDFLAGS2"
-])
-
FP_ICONV
FP_GMP
+FP_CURSES
XCODE_VERSION()
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
-FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
-CC="$WhatGccIsCalled"
-export CC
+
+AC_ARG_WITH([gcc],
+ AS_HELP_STRING([--with-gcc=ARG], [Use ARG as the path to gcc (obsolete, use CC=ARG instead) [default=autodetect]]),
+ AC_MSG_ERROR([--with-gcc=$withval is obsolete (use './configure CC=$withval' or 'CC=$withval ./configure' instead)]))
+
+AC_ARG_WITH([clang],
+ AS_HELP_STRING([--with-clang=ARG], [Use ARG as the path to gcc (obsolete, use CC=ARG instead) [default=autodetect]]),
+ AC_MSG_ERROR([--with-clang=$withval is obsolete (use './configure CC=$withval' or 'CC=$withval ./configure' instead)]))
+
+dnl detect compiler (prefer gcc over clang) and set $CC (unless CC already set),
+dnl later CC is copied to CC_STAGE{1,2,3}
+AC_PROG_CC([gcc clang])
+
+MAYBE_OVERRIDE_STAGE0([ar],[AR_STAGE0])
+
+dnl make extensions visible to allow feature-tests to detect them lateron
+AC_USE_SYSTEM_EXTENSIONS
+
+dnl ** figure out how to invoke the C preprocessor (i.e. `gcc -E`)
+AC_PROG_CPP
+
+# --with-hs-cpp/--with-hs-cpp-flags
+FP_CPP_CMD_WITH_ARGS(HaskellCPPCmd, HaskellCPPArgs)
+AC_SUBST([HaskellCPPCmd])
+AC_SUBST([HaskellCPPArgs])
+
+FP_SET_CFLAGS_C99([CC],[CFLAGS],[CPPFLAGS])
+FP_SET_CFLAGS_C99([CC_STAGE0],[CONF_CC_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
+FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
+FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
dnl ** Which ld to use?
dnl --------------------------------------------------------------
-FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld])
-LdCmd="$LD"
+FIND_LD([LdCmd])
AC_SUBST([LdCmd])
dnl ** Which nm to use?
NmCmd="$NM"
AC_SUBST([NmCmd])
+dnl ** Which objdump to use?
+dnl --------------------------------------------------------------
+FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OBJDUMP], [objdump], [objdump])
+ObjdumpCmd="$OBJDUMP"
+AC_SUBST([ObjdumpCmd])
+
+dnl ** Which ar to use?
+dnl --------------------------------------------------------------
+FP_ARG_WITH_PATH_GNU_PROG([AR], [ar], [ar])
+ArCmd="$AR"
+fp_prog_ar="$AR"
+AC_SUBST([ArCmd])
+
+dnl ** Which ranlib to use?
+dnl --------------------------------------------------------------
+FP_ARG_WITH_PATH_GNU_PROG([RANLIB], [ranlib], [ranlib])
+RanlibCmd="$RANLIB"
+RANLIB="$RanlibCmd"
+
+
# Note: we may not have objdump on OS X, and we only need it on Windows (for DLL checks)
case $HostOS_CPP in
cygwin32|mingw32)
;;
esac
+# Here is where we re-target which specific version of the LLVM
+# tools we are looking for. In the past, GHC supported a number of
+# versions of LLVM simultaneously, but that stopped working around
+# 3.5/3.6 release of LLVM.
+LlvmVersion=3.8
+AC_SUBST([LlvmVersion])
+sUPPORTED_LLVM_VERSION=$(echo \($LlvmVersion\) | sed 's/\./,/')
+AC_DEFINE_UNQUOTED([sUPPORTED_LLVM_VERSION], ${sUPPORTED_LLVM_VERSION}, [The supported LLVM version number])
+
dnl ** Which LLVM llc to use?
dnl --------------------------------------------------------------
-FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([LLC], [llc])
+FIND_LLVM_PROG([LLC], [llc], [llc], [$LlvmVersion])
LlcCmd="$LLC"
AC_SUBST([LlcCmd])
dnl ** Which LLVM opt to use?
dnl --------------------------------------------------------------
-FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OPT], [opt])
+FIND_LLVM_PROG([OPT], [opt], [opt], [$LlvmVersion])
OptCmd="$OPT"
AC_SUBST([OptCmd])
-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 * General configuration checks
dnl --------------------------------------------------------------
+dnl ** Bug 9439: Some GHC 7.8 releases had broken LLVM code generator.
+dnl Unfortunately we don't know whether the user is going to request a
+dnl build with the LLVM backend as this is only given in build.mk.
+dnl
+dnl Instead, we try to do as much work as possible here, checking
+dnl whether -fllvm is the stage 0 compiler's default. If so we
+dnl fail. If not, we check whether -fllvm is affected explicitly and
+dnl if so set a flag. The build system will later check this flag
+dnl after the desired build flags are known.
+
+dnl This problem is further complicated by the fact that the llvm
+dnl version used by the bootstrap compiler may be different from the
+dnl version we arre trying to compile GHC against. Therefore, we need
+dnl to find the boostrap compiler's `settings` file then check to see
+dnl if the `opt` and `llc` command strings are non-empty and if these
+dnl programs exist. Only if they exist to we test for bug #9439.
+
+FIND_GHC_BOOTSTRAP_PROG([BootstrapLlcCmd], [${WithGhc}], "LLVM llc command")
+FIND_GHC_BOOTSTRAP_PROG([BootstrapOptCmd], [${WithGhc}], "LLVM opt command")
+
+if test -n "$BootstrapLlcCmd" && test -n "$BootstrapOptCmd"
+then
+ AC_MSG_CHECKING(whether bootstrap compiler is affected by bug 9439)
+ echo "main = putStrLn \"%function\"" > conftestghc.hs
+
+ # Check whether LLVM backend is default for this platform
+ "${WithGhc}" -pgmlc="${BootstrapLlcCmd}" -pgmlo="${BootstrapOptCmd}" conftestghc.hs 2>&1 >/dev/null
+ res=`./conftestghc`
+ if test "x$res" = "x%object"
+ then
+ AC_MSG_RESULT(yes)
+ echo "Buggy bootstrap compiler"
+ echo ""
+ echo "The stage 0 compiler $WithGhc is affected by GHC Bug \#9439"
+ echo "and therefore will miscompile the LLVM backend if -fllvm is"
+ echo "used."
+ echo
+ echo "Please use another bootstrap compiler"
+ exit 1
+ fi
+
+ # -fllvm is not the default, but set a flag so the Makefile can check
+ # -for it in the build flags later on
+ "${WithGhc}" -fforce-recomp -pgmlc="${BootstrapLlcCmd}" -pgmlo="${BootstrapOptCmd}" -fllvm conftestghc.hs 2>&1 >/dev/null
+ if test $? = 0
+ then
+ res=`./conftestghc`
+ if test "x$res" = "x%object"
+ then
+ AC_MSG_RESULT(yes)
+ GHC_LLVM_AFFECTED_BY_9439=1
+ elif test "x$res" = "x%function"
+ then
+ AC_MSG_RESULT(no)
+ GHC_LLVM_AFFECTED_BY_9439=0
+ else
+ AC_MSG_WARN(unexpected output $res)
+ fi
+ else
+ AC_MSG_RESULT(failed to compile, assuming no)
+ fi
+fi
+AC_SUBST([GHC_LLVM_AFFECTED_BY_9439])
+
dnl ** Can the unix package be built?
dnl --------------------------------------------------------------
dnl
FP_CC_LLVM_BACKEND
-FP_PROG_LD_HashSize31
-FP_PROG_LD_ReduceMemoryOverheads
FP_PROG_LD_IS_GNU
FP_PROG_LD_BUILD_ID
FP_PROG_LD_NO_COMPACT_UNWIND
+FP_PROG_LD_FILELIST
FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0])
FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_GCC_LINKER_OPTS_STAGE1],[CONF_LD_LINKER_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1])
-# Stage 3 won't be supported by cross-compilation
FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_GCC_LINKER_OPTS_STAGE2],[CONF_LD_LINKER_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2])
+# Stage 3 won't be supported by cross-compilation
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_STAGE0)
AC_SUBST(CONF_CC_OPTS_STAGE1)
AC_SUBST(CONF_CC_OPTS_STAGE2)
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_SUPPORTS_ATFILE
FP_PROG_AR_NEEDS_RANLIB
AC_PATH_PROG(HSCOLOUR,HsColour)
# HsColour is passed to Cabal, so we need a native path
if test "$HostOS" = "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
+dnl ** check for Sphinx toolchain
+AC_PATH_PROG(SPHINXBUILD,sphinx-build)
+AC_CACHE_CHECK([for version of sphinx-build], fp_cv_sphinx_version,
+changequote(, )dnl
+[if test -n "$SPHINXBUILD"; then
+ fp_cv_sphinx_version=`"$SPHINXBUILD" --version 2>&1 | sed 's/Sphinx\( (sphinx-build)\)\? v\?\([0-9]\.[0-9]\.[0-9]\)/\2/' | head -n1`;
+fi;
+changequote([, ])dnl
+])
+FP_COMPARE_VERSIONS([$fp_cv_sphinx_version],-lt,1.0.0,
+ [AC_MSG_WARN([Sphinx version 1.0.0 or later is required to build documentation]); SPHINXBUILD=;])
+
+dnl ** check for xelatex
+AC_PATH_PROG(XELATEX,xelatex)
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 ###
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/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])
+AC_CHECK_HEADERS([ctype.h dirent.h dlfcn.h errno.h fcntl.h grp.h limits.h locale.h nlist.h pthread.h pwd.h signal.h sys/param.h sys/mman.h sys/resource.h sys/select.h sys/time.h sys/timeb.h sys/timerfd.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 sys/cpuset.h needs sys/param.h to be included first on FreeBSD 9.1; #7708
+AC_CHECK_HEADERS([sys/cpuset.h], [], [],
+[[#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+]])
dnl ** check if it is safe to include both <time.h> and <sys/time.h>
AC_HEADER_TIME
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)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(char)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(double)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(float)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(long)
if test "$ac_cv_type_long_long" = yes; then
-AC_CHECK_SIZEOF(long long, 8)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(long long)
fi
-AC_CHECK_SIZEOF(short, 2)
-AC_CHECK_SIZEOF(unsigned char, 1)
-AC_CHECK_SIZEOF(unsigned int, 4)
-AC_CHECK_SIZEOF(unsigned long, 4)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(short)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned char)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned int)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long)
if test "$ac_cv_type_long_long" = yes; then
-AC_CHECK_SIZEOF(unsigned long long, 8)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long long)
fi
-AC_CHECK_SIZEOF(unsigned short, 2)
-AC_CHECK_SIZEOF(void *, 4)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned short)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(void *)
+
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int8_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint8_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int16_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint16_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int32_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint32_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int64_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint64_t)
+
dnl for use in settings.in
WordSize=$ac_cv_sizeof_void_p
AC_SUBST(WordSize)
-
-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])
dnl Keep that check as early as possible.
dnl as we need to know whether we need libm
dnl for math functions or not
-dnl (see http://hackage.haskell.org/trac/ghc/ticket/3730)
+dnl (see http://ghc.haskell.org/trac/ghc/ticket/3730)
AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
if test $HaveLibM = YES
then
AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
fi
-dnl ** check whether this machine has BFD and libiberty installed (used for debugging)
-dnl the order of these tests matters: bfd needs libiberty
-AC_CHECK_LIB(iberty, xmalloc)
-AC_CHECK_LIB(bfd, bfd_uncompress_section_contents)
+FP_BFD_SUPPORT
dnl ################################################################
dnl Check for libraries
dnl ################################################################
-dnl ** check whether we need -ldl to get dlopen()
+# system libffi
+
+AC_ARG_WITH([system-libffi],
+[AC_HELP_STRING([--with-system-libffi],
+ [Use system provided libffi for RTS [default=no]])
+])
+
+AS_IF([test "x$with_system_libffi" = "xyes"],
+ [UseSystemLibFFI="YES"], [UseSystemLibFFI="NO"]
+)
+
+
+AC_SUBST(UseSystemLibFFI)
+
+AC_ARG_WITH([ffi-includes],
+[AC_HELP_STRING([--with-ffi-includes=ARG],
+ [Find includes for libffi in ARG [default=system default]])
+],
+[
+ if test "x$UseSystemLibFFI" != "xYES"; then
+ AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set])
+ else
+ FFIIncludeDir="$withval"
+ LIBFFI_CFLAGS="-I$withval"
+ fi
+])
+
+AC_SUBST(FFIIncludeDir)
+
+AC_ARG_WITH([ffi-libraries],
+[AC_HELP_STRING([--with-ffi-libraries=ARG],
+ [Find libffi in ARG [default=system default]])
+],
+[
+ if test "x$UseSystemLibFFI" != "xYES"; then
+ AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set])
+ else
+ FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval"
+ fi
+])
+
+AC_SUBST(FFILibDir)
+
+AS_IF([test "$UseSystemLibFFI" = "YES"], [
+ CFLAGS2="$CFLAGS"
+ CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
+ LDFLAGS2="$LDFLAGS"
+ LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS"
+ if test "$HostOS" = "openbsd";
+ then
+ # OpenBSD's libffi is not directly linked to the libpthread but
+ # still requires pthread functionality. This means that any client
+ # binary which links with libffi also needs to link with
+ # libpthread. If it does not, then linking fails with unresolved
+ # symbols.
+ LDFLAGS="$LDFLAGS -lpthread"
+ fi
+ AC_CHECK_LIB(ffi, ffi_call,
+ [AC_CHECK_HEADERS([ffi.h], [break], [])
+ AC_DEFINE([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])],
+ [AC_MSG_ERROR([Cannot find system libffi])])
+ CFLAGS="$CFLAGS2"
+ LDFLAGS="$LDFLAGS2"
+])
-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 ** check whether we need -ldl to get dlopen()
+AC_CHECK_LIB(dl, dlopen)
dnl --------------------------------------------------
dnl * Miscellaneous feature tests
[Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
])
+dnl ** pthread_setname_np is a recent addition to glibc, and OS X has
+dnl a different single-argument version.
+AC_CHECK_LIB(pthread, pthread_setname_np)
+AC_MSG_CHECKING(for pthread_setname_np)
+AC_TRY_LINK(
+[
+#define _GNU_SOURCE
+#include <pthread.h>
+],
+[pthread_setname_np(pthread_self(), "name");],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1],
+ [Define to 1 if you have the glibc version of pthread_setname_np]),
+ AC_MSG_RESULT(no)
+)
+
dnl ** check for eventfd which is needed by the I/O manager
AC_CHECK_HEADERS([sys/eventfd.h])
AC_CHECK_FUNCS([eventfd])
-# 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
+dnl ** Check for __thread support in the compiler
+AC_MSG_CHECKING(for __thread support)
+AC_COMPILE_IFELSE(
+ [ AC_LANG_SOURCE([[__thread int tester = 0;]]) ],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE([CC_SUPPORTS_TLS],[1],[Define to 1 if __thread is supported])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
+ ])
+
+dnl large address space support (see includes/rts/storage/MBlock.h)
+dnl
+dnl Darwin has vm_allocate/vm_protect
+dnl Linux has mmap(MAP_NORESERVE)/madv(MADV_DONTNEED)
+dnl FreeBSD, Solaris and maybe other have MAP_NORESERVE/MADV_FREE
+dnl (They also have MADV_DONTNEED, but it means something else!)
+dnl
+dnl Windows has VirtualAlloc MEM_RESERVE/MEM_COMMIT, however
+dnl it counts page-table space as committed memory, and so quickly
+dnl runs out of paging file when we have multiple processes reserving
+dnl 1TB of address space, we get the following error:
+dnl VirtualAlloc MEM_RESERVE 1099512676352 bytes failed: The paging file is too small for this operation to complete.
+dnl
+
+AC_ARG_ENABLE(large-address-space,
+ [AC_HELP_STRING([--enable-large-address-space],
+ [Use a single large address space on 64 bit systems (enabled by default on 64 bit platforms)])],
+ EnableLargeAddressSpace=$enableval,
+ EnableLargeAddressSpace=yes
+)
+
+use_large_address_space=no
+if test "$ac_cv_sizeof_void_p" -eq 8 ; then
+ if test "x$EnableLargeAddressSpace" = "xyes" ; then
+ if test "$ghc_host_os" = "darwin" ; then
+ use_large_address_space=yes
+ elif test "$ghc_host_os" = "openbsd" ; then
+ # as of OpenBSD 5.8 (2015), OpenBSD does not support mmap with MAP_NORESERVE.
+ # The flag MAP_NORESERVE is supported for source compatibility reasons,
+ # but is completely ignored by OS mmap
+ use_large_address_space=no
+ else
+ AC_CHECK_DECLS([MAP_NORESERVE, MADV_FREE, MADV_DONTNEED],[],[],
+ [
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/mman.h>
+ #include <fcntl.h>
+ ])
+ if test "$ac_cv_have_decl_MAP_NORESERVE" = "yes" &&
+ test "$ac_cv_have_decl_MADV_FREE" = "yes" ||
+ test "$ac_cv_have_decl_MADV_DONTNEED" = "yes" ; then
+ use_large_address_space=yes
+ fi
+ fi
+ fi
+fi
+if test "$use_large_address_space" = "yes" ; then
+ AC_DEFINE([USE_LARGE_ADDRESS_SPACE], [1], [Enable single heap address space support])
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)
+dnl ** Use MMAP in the runtime linker?
+dnl --------------------------------------------------------------
-AC_CHECK_FUNCS(__mingw_vfprintf)
+case ${TargetOS} in
+ linux|freebsd|dragonfly|netbsd|openbsd|kfreebsdgnu|gnu|solaris2)
+ RtsLinkerUseMmap=1
+ ;;
+ darwin)
+ # Don't use mmap on powerpc/darwin as the mmap there doesn't support
+ # reallocating. Reallocating is needed to allocate jump islands just
+ # after each object image. Jumps to these jump islands use relative
+ # branches which are limited to offsets that can be represented in
+ # 24-bits.
+ if test "$TargetArch" != "powerpc" ; then
+ RtsLinkerUseMmap=1
+ else
+ RtsLinkerUseMmap=0
+ fi
+ ;;
+ *)
+ # Windows (which doesn't have mmap) and everything else.
+ RtsLinkerUseMmap=0
+ ;;
+ esac
-if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
- HavePapi=YES
-else
- HavePapi=NO
+AC_DEFINE_UNQUOTED([RTS_LINKER_USE_MMAP], [$RtsLinkerUseMmap],
+ [Use mmap in the runtime linker])
+
+dnl ** Have libdw?
+dnl --------------------------------------------------------------
+UseLibdw=NO
+USE_LIBDW=0
+AC_ARG_ENABLE(dwarf-unwind,
+ [AC_HELP_STRING([--enable-dwarf-unwind],
+ [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])],
+ [AC_CHECK_LIB(dw, dwfl_attach_state, [UseLibdw=YES], [UseLibdw=NO])],
+ [UseLibdw=NO]
+)
+AC_SUBST(UseLibdw)
+if test $UseLibdw = "YES" ; then
+ USE_LIBDW=1
fi
-AC_SUBST(HavePapi)
+AC_DEFINE_UNQUOTED([USE_LIBDW], [$USE_LIBDW], [Set to 1 to use libdw])
-if test "$HAVE_DOCBOOK_XSL" = "NO" ||
- test "$XsltprocCmd" = ""
-then
- BUILD_DOCBOOK_HTML=NO
-else
- BUILD_DOCBOOK_HTML=YES
+dnl ** Have libnuma?
+dnl --------------------------------------------------------------
+HaveLibNuma=0
+AC_CHECK_HEADERS([numa.h numaif.h])
+
+if test "$ac_cv_header_numa_h$ac_cv_header_numaif_h" = "yesyes" ; then
+ AC_CHECK_LIB(numa, numa_available,HaveLibNuma=1)
fi
-AC_SUBST(BUILD_DOCBOOK_HTML)
+AC_DEFINE_UNQUOTED([USE_LIBNUMA], [$HaveLibNuma], [Define to 1 if you have libnuma])
-if test "$DblatexCmd" = ""
-then
- BUILD_DOCBOOK_PS=NO
- BUILD_DOCBOOK_PDF=NO
+dnl ** Documentation
+dnl --------------------------------------------------------------
+if test -n "$SPHINXBUILD"; then
+ BUILD_MAN=YES
+ BUILD_SPHINX_HTML=YES
+ if test -n "$XELATEX"; then
+ BUILD_SPHINX_PDF=YES
+ else
+ BUILD_SPHINX_PDF=NO
+ fi
else
- BUILD_DOCBOOK_PS=YES
- BUILD_DOCBOOK_PDF=YES
+ BUILD_MAN=NO
+ BUILD_SPHINX_HTML=NO
+ BUILD_SPHINX_PDF=NO
fi
-AC_SUBST(BUILD_DOCBOOK_PS)
-AC_SUBST(BUILD_DOCBOOK_PDF)
+AC_SUBST(BUILD_MAN)
+AC_SUBST(BUILD_SPHINX_HTML)
+AC_SUBST(BUILD_SPHINX_PDF)
LIBRARY_VERSION(base)
LIBRARY_VERSION(Cabal, Cabal/Cabal)
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 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])
-AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
-AC_OUTPUT
+# Create the configuration for the Hadrian build system if it is present
+if test -e hadrian/cfg/system.config.in; then
+ AC_CONFIG_FILES([hadrian/cfg/system.config])
+fi
# We got caught by
# http://savannah.gnu.org/bugs/index.php?1516
# 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.
+print_make_warning=""
checkMake380() {
- if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
+ make_ver=`$1 --version 2>&1 | head -1`
+ if echo "$make_ver" | 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."
+ print_make_warning="true"
+ fi
+ if echo "$make_ver" | grep 'GNU Make' > /dev/null
+ then
+ MakeCmd=$1
+ AC_SUBST(MakeCmd)
fi
}
checkMake380 make
checkMake380 gmake
+AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal libraries/ghc-boot/ghc-boot.cabal libraries/ghc-boot-th/ghc-boot-th.cabal libraries/ghci/ghci.cabal settings docs/users_guide/ghc_config.py docs/index.html libraries/prologue.txt distrib/configure.ac])
+AC_OUTPUT
+
+if test "$print_make_warning" = "true"; then
+ echo
+ echo "WARNING: It looks like \"$MakeCmd\" is GNU make 3.80."
+ echo "This version cannot be used to build GHC."
+ echo "Please use GNU make >= 3.81."
+fi
+
echo ["
----------------------------------------------------------------------
Configure completed successfully.
Building GHC version : $ProjectVersion
+ Git commit id : $ProjectGitCommitId
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
"]
+
+if test "x$CC_LLVM_BACKEND" = "x1"; then
+ if test "x$CC_CLANG_BACKEND" = "x1"; then
+ CompilerName="clang "
+ else
+ CompilerName="llvm-gcc "
+ fi
+else
+ CompilerName="gcc "
fi
echo ["\
- Using GCC : $WhatGccIsCalled
+ Using (for bootstrapping) : $CC_STAGE0
+ Using $CompilerName : $CC
which is version : $GccVersion
Building a cross compiler : $CrossCompiling
-
- ld : $LdCmd
- Happy : $HappyCmd ($HappyVersion)
- Alex : $AlexCmd ($AlexVersion)
- Perl : $PerlCmd
- dblatex : $DblatexCmd
- xsltproc : $XsltprocCmd"]
+ hs-cpp : $HaskellCPPCmd
+ hs-cpp-flags : $HaskellCPPArgs
+ ld : $LdCmd
+ nm : $NmCmd
+ objdump : $ObjdumpCmd
+ Happy : $HappyCmd ($HappyVersion)
+ Alex : $AlexCmd ($AlexVersion)
+ Perl : $PerlCmd
+ sphinx-build : $SPHINXBUILD
+ xelatex : $XELATEX
+
+ Using LLVM tools
+ llc : $LlcCmd
+ opt : $OptCmd"]
if test "$HSCOLOUR" = ""; then
echo ["
fi
echo ["\
- Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
- Building DocBook PS documentation : $BUILD_DOCBOOK_PS
- Building DocBook PDF documentation : $BUILD_DOCBOOK_PDF"]
+ Tools to build Sphinx HTML documentation available: $BUILD_SPHINX_HTML
+ Tools to build Sphinx PDF documentation available: $BUILD_SPHINX_PDF"]
echo ["----------------------------------------------------------------------
"]
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
+ http://ghc.haskell.org/trac/ghc/wiki/Building
"