# see what flags are available. (Better yet, read the documentation!)
#
-AC_INIT([The Glorious Glasgow Haskell Compilation System], [7.11], [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 ** which are needed by FP_SETUP_PROJECT_VERSION
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])
- dnl ToDo, once "ld command" is reliably available.
- dnl Then, we can remove the LD_STAGE0 hack in mk/build-package-date.mk
- dnl BOOTSTRAPPING_GHC_INFO_FIELD([LD_STAGE0],[ld 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
then
AC_MSG_ERROR([GHC is required.])
fi
-FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.8],
- [AC_MSG_ERROR([GHC version 7.8 or later is required to compile GHC.])])
+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
GHC_PACKAGE_DB_FLAG=package-db
AC_SUBST(GHC_PACKAGE_DB_FLAG)
-# GHC 7.7+ needs -fcmm-sink when compiling Parser.hs. See #8182
-FP_COMPARE_VERSIONS([$GhcVersion],[-gt],[7.7],
- CMM_SINK_BOOTSTRAP_IS_NEEDED=YES,
- CMM_SINK_BOOTSTRAP_IS_NEEDED=NO)
-AC_SUBST(CMM_SINK_BOOTSTRAP_IS_NEEDED)
-
-FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[7.9],
- SUPPORTS_PACKAGE_KEY=NO,
- SUPPORTS_PACKAGE_KEY=YES)
-AC_SUBST(SUPPORTS_PACKAGE_KEY)
+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}" != ""
)
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() {
exit 1
}
-download_file() {
- local file_url="$1"
- local file_md5="$2"
- local dest_file="$3"
- local description="$4"
- local extra_curl_opts="$5"
- local dest_dir="$(dirname $dest_file)"
-
- if ! test -f "${dest_file}"
- then
- local curl_cmd="curl -L ${file_url} -o ${dest_file} --create-dirs -# ${extra_curl_opts}"
- if test "$TarballsAutodownload" = "NO"
- then
- echo >&2
- echo "ERROR: ${description} not found." >&2
- echo "Please rerun configure with --enable-tarballs-autodownload, or perform the download manually:" >&2
- echo " $curl_cmd" >&2
- exit 1
- fi
- AC_MSG_NOTICE([Downloading ${description} to ${dest_dir}...])
- $curl_cmd || {
- rm -f "${dest_file}"
- fail "ERROR: Download failed."
- }
- else
- AC_MSG_NOTICE([Using ${description} found in ${dest_dir}...])
- fi
-
- echo "${file_md5} *${dest_file}" | md5sum --quiet -c - ||
- fail "ERROR: ${description} appears to be corrupted, please delete it and try again."
-}
-
if test "$HostOS" = "mingw32"
then
tarball_dest_dir="mingw-w64/x86_64"
tarball_mingw_dir="mingw64"
fi
-
- tarball_dir='ghc-tarballs'
fi
-download_and_extract() {
- local mingw_url="$1"
- local file_md5sum_x86="$2"
- local file_md5sum_x64="$3"
-
- if test "$HostArch" = "i386"
+set_up_tarballs() {
+ AC_MSG_NOTICE([Checking for Windows toolchain tarballs...])
+ local action
+ if test "$TarballsAutodownload" = "NO"
then
- local file_md5sum="${file_md5sum_x86}"
+ action="verify"
else
- local file_md5sum="${file_md5sum_x64}"
- fi
-
- local mingw_toolchain="$(basename $mingw_url)"
- local mingw_w64="${tarball_dir}/${tarball_dest_dir}/${mingw_toolchain}"
-
- download_file "${mingw_url}" "${file_md5sum}" "${mingw_w64}" "${mingw_toolchain}"
-
- # Mark the tree as needing updates by deleting the folder
- if test -d inplace/mingw && test inplace/mingw -ot "$mingw_w64"
- then
- AC_MSG_NOTICE([In-tree MinGW-w64 tree requires updates...])
- rm -rf inplace/mingw
+ action="download"
fi
-}
-
-set_up_tarballs() {
- local mingw_base_url="https://downloads.haskell.org/~ghc/mingw"
- local package_prefix="mingw-w64"
-
- local format_url="${mingw_base_url}/${mingw_arch}/${package_prefix}-${mingw_arch}"
-
- download_and_extract "${format_url}-crt-git-5.0.0.4531.49c7046-1-any.pkg.tar.xz" "dd39323140c0c1b3e065e9edb1a66779" "ac22cedd38229bcd57f5999e4734054f"
- download_and_extract "${format_url}-winpthreads-git-5.0.0.4538.78dca70-1-any.pkg.tar.xz" "0b14fe27790e94db454fbb3564e79a73" "65cf07b6f42a1a62d1844e08190cab0d"
- download_and_extract "${format_url}-headers-git-5.0.0.4531.49c7046-1-any.pkg.tar.xz" "6ee9e3c2f9d3e507f60ee33d19417dc2" "f49a19cdea93998c33ac90ceb9570350"
- download_and_extract "${format_url}-libwinpthread-git-5.0.0.4538.78dca70-1-any.pkg.tar.xz" "fbb2114aa7fbb5507e21d8a2ea265cfd" "31ed10e2d8891f6251d968f81bfdd274"
- download_and_extract "${format_url}-zlib-1.2.8-8-any.pkg.tar.xz" "7f519cb6defa27a90c5353160cf088d4" "6a2f4a70ccb24acca70a01da331699a6"
- download_and_extract "${format_url}-isl-0.14.1-2-any.pkg.tar.xz" "4cd20fe75ed9ef03e260d529042cb742" "dc0e0a7fd23a8193cccb0bf8d7267685"
- download_and_extract "${format_url}-mpc-1.0.3-2-any.pkg.tar.xz" "719e76fa7a54a8676d2e60af3bb13c45" "df1a7d4050568d83c265ae78c32ef30b"
- download_and_extract "${format_url}-mpfr-3.1.3.p0-2-any.pkg.tar.xz" "e9cbd2402ac1afe6e86c102223b90dcb" "6e3b9ec27edab394aa41536839afdafe"
- download_and_extract "${format_url}-gmp-6.0.0-3-any.pkg.tar.xz" "c02f9759cd0140a6d8ea69ef5a88e167" "2970d4d8b176f8f36ae2d39269b25cce"
- download_and_extract "${format_url}-gcc-libs-5.2.0-3-any.pkg.tar.xz" "a9bd2e65cb350cc8f8a6deb6d3b346a8" "9c2ed24989e14fdf0c548a5215374660"
- download_and_extract "${format_url}-binutils-2.25.1-1-any.pkg.tar.xz" "997e9c2166fb851916cd8ac1bc9c6180" "7cb9f5f50a7103da41f7ec7547c09707"
- download_and_extract "${format_url}-libiconv-1.14-5-any.pkg.tar.xz" "2c99a163689ba8257627bb07274b3f86" "37418c6be92ef20be17cdc9fe844af35"
- download_and_extract "${format_url}-gcc-5.2.0-3-any.pkg.tar.xz" "efe6d6afc18aab89dc01e7ddcd2523a6" "0b697ce61112ba6e5a3c4d565957ea4e"
+ 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="../${tarball_dir}/${tarball_dest_dir}"
+ local base_dir="../ghc-tarballs/${tarball_dest_dir}"
( cd inplace &&
find "${base_dir}" -name "*.tar.xz" -exec tar xfJ {} \; &&
rm ".MTREE" &&
fp_prog_ar="${mingwbin}ar.exe"
# NB. Download the perl binaries if required
- download_file "https://github.com/ghc/ghc-tarballs/blob/master/perl/ghc-perl-1.tar.gz?raw=true" "b21d1681b61cf7a024e854096285b02e" "ghc-tarballs/perl/ghc-perl-1.tar.gz" "Windows Perl binary distributions" "--insecure"
-
if ! test -d inplace/perl ||
test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
then
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
-FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
-CC="$WhatGccIsCalled"
-export CC
-# If --with-gcc was used, and we're not cross-compiling, then it also
-# applies to the stage0 compiler.
-MAYBE_OVERRIDE_STAGE0([gcc],[CC_STAGE0])
+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
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 --------------------------------------------------------------
FIND_LD([LdCmd])
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])
# 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.6
+LlvmVersion=3.7
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 --------------------------------------------------------------
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
AC_SYS_LARGEFILE
dnl ** check for specific header (.h) files that we are interested in
-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/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], [], [],
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)])
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_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
])
-
-dnl ** 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)
-
dnl large address space support (see includes/rts/storage/MBlock.h)
dnl
dnl Darwin has vm_allocate/vm_protect
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 "$ghc_host_os" = "darwin" ; then
- use_large_address_space=yes
- 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
+ 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
-if test "$HAVE_DOCBOOK_XSL" = "NO" ||
- test "$XsltprocCmd" = ""
-then
- BUILD_DOCBOOK_HTML=NO
-else
- BUILD_DOCBOOK_HTML=YES
-fi
-AC_SUBST(BUILD_DOCBOOK_HTML)
+dnl ** Use MMAP in the runtime linker?
+dnl --------------------------------------------------------------
-if test "$DblatexCmd" = ""
-then
- BUILD_DOCBOOK_PS=NO
- BUILD_DOCBOOK_PDF=NO
+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
+
+AC_DEFINE_UNQUOTED([RTS_LINKER_USE_MMAP], [$RtsLinkerUseMmap],
+ [Use mmap in the runtime linker])
+
+dnl ** Have libdw?
+dnl --------------------------------------------------------------
+AC_ARG_ENABLE(libdw,
+ [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, [HaveLibdw=YES], [HaveLibdw=NO])],
+ [HaveLibdw=NO]
+)
+AC_SUBST(HaveLibdw)
+
+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 settings docs/users_guide/ug-book.xml docs/users_guide/ug-ent.xml docs/index.html libraries/prologue.txt distrib/configure.ac])
-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.
fi
echo ["\
- Using $CompilerName : $WhatGccIsCalled
+ Using (for bootstrapping) : $CC_STAGE0
+ Using $CompilerName : $CC
which is version : $GccVersion
Building a cross compiler : $CrossCompiling
hs-cpp : $HaskellCPPCmd
hs-cpp-flags : $HaskellCPPArgs
ld : $LdCmd
+ nm : $NmCmd
+ objdump : $ObjdumpCmd
Happy : $HappyCmd ($HappyVersion)
Alex : $AlexCmd ($AlexVersion)
Perl : $PerlCmd
- dblatex : $DblatexCmd
- xsltproc : $XsltprocCmd
+ sphinx-build : $SPHINXBUILD
+ xelatex : $XELATEX
Using LLVM tools
llc : $LlcCmd
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 ["----------------------------------------------------------------------
"]