# see what flags are available. (Better yet, read the documentation!)
#
-AC_INIT([The Glorious Glasgow Haskell Compilation System], [8.1], [glasgow-haskell-bugs@haskell.org], [ghc-AC_PACKAGE_VERSION])
+AC_INIT([The Glorious Glasgow Haskell Compilation System], [8.7], [glasgow-haskell-bugs@haskell.org], [ghc-AC_PACKAGE_VERSION])
# Set this to YES for a released version, otherwise NO
: ${RELEASE=NO}
# 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 'perl boot'?"
+ echo "mk/config.h.in doesn't exist: perhaps you haven't run 'python3 boot'?"
exit 1
fi
# First off, a distrib sanity check..
AC_CONFIG_SRCDIR([mk/config.mk.in])
-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.
-dnl Using autoconf 2.59 started to give nonsense like this
-dnl #define SIZEOF_CHAR 0
-dnl recently.
-AC_PREREQ([2.60])
+dnl * We require autoconf version 2.69 due to
+dnl https://bugs.ruby-lang.org/issues/8179. Also see #14910.
+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.
+dnl * Using autoconf 2.59 started to give nonsense like this
+dnl #define SIZEOF_CHAR 0
+dnl recently.
+AC_PREREQ([2.69])
# -------------------------------------------------------------------------
# Prepare to generate the following header files
TarballsAutodownload=NO
)
+AC_ARG_ENABLE(distro-toolchain,
+[AC_HELP_STRING([--enable-distro-toolchain],
+ [Do not use bundled Windows toolchain binaries.])],
+ EnableDistroToolchain=YES,
+ EnableDistroToolchain=NO
+)
+
+if test "$EnableDistroToolchain" = "YES"; then
+ TarballsAutodownload=NO
+fi
+
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
- if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
+ # See #15281
+ if test "$GhcMajVersion" = "8" && test "$GhcMinVersion" = "2" && test "$GhcPatchLevel" = "1"; then
+ AC_MSG_ERROR([GHC 8.2.1 is known to be buggy and cannot bootstrap this GHC release (See Trac 15281); please use GHC 8.2.2 or later.])
+ fi
+
+ if test "$GhcMajVersion" = "unknown" || test "$GhcMinVersion" = "unknown"; then
AC_MSG_ERROR([Cannot determine the version of $WithGhc. Is it really GHC?])
fi
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.])])
+FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[8.2],
+ [AC_MSG_ERROR([GHC version 8.2 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)
-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}" != ""
then
if test "$ghc_host_os" = "mingw32"
then
- # Canonicalise to <drive>:/path/to/ghc
- WithGhc=`cygpath -m "${WithGhc}"`
-
+ 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
dnl ** Do an unregisterised build?
dnl --------------------------------------------------------------
-case "$HostArch" in
- i386|x86_64|powerpc|powerpc64|powerpc64le|arm)
+case "$TargetArch" in
+ i386|x86_64|powerpc|powerpc64|powerpc64le|arm|aarch64)
UnregisterisedDefault=NO
;;
*)
)
AC_SUBST(Unregisterised)
+dnl ** Does target have runtime linker support?
+dnl --------------------------------------------------------------
+case "$target" in
+ powerpc64-*|powerpc64le-*|powerpc-ibm-aix*)
+ HaskellHaveRTSLinker=NO
+ ;;
+ *)
+ HaskellHaveRTSLinker=YES
+ ;;
+esac
+AC_SUBST(HaskellHaveRTSLinker)
+
# Requires FPTOOLS_SET_PLATFORM_VARS to be run first.
FP_FIND_ROOT
fi
}
-if test "$HostOS" = "mingw32"
+if test "$HostOS" = "mingw32" -a "$EnableDistroToolchain" = "NO"
then
test -d inplace || mkdir inplace
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"
+ AC_PATH_PROG([Genlib],[genlib])
+
# NB. Download the perl binaries if required
if ! test -d inplace/perl ||
test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
fi
fi
+# We don't want to bundle a MinGW-w64 toolchain
+# So we have to find these individual tools.
+if test "$EnableDistroToolchain" = "YES"
+then
+ # Ideally should use AC_CHECK_TARGET_TOOL but our triples
+ # are screwed up. Configure doesn't think they're ever equal and
+ # so never tried without the prefix.
+ AC_PATH_PROG([CC],[gcc], [clang])
+ AC_PATH_PROG([NM],[nm])
+ AC_PATH_PROG([AR],[ar])
+ AC_PATH_PROG([RANLIB],[ranlib])
+ AC_PATH_PROG([OBJDUMP],[objdump])
+ AC_PATH_PROG([DllWrap],[dllwrap])
+ AC_PATH_PROG([Windres],[windres])
+ AC_PATH_PROG([Genlib],[genlib])
+else
+ AC_CHECK_TARGET_TOOL([Windres],[windres])
+ AC_CHECK_TARGET_TOOL([DllWrap],[dllwrap])
+ AC_CHECK_TARGET_TOOL([OBJDUMP],[objdump])
+fi
+
+DllWrapCmd="$DllWrap"
+WindresCmd="$Windres"
+
+HAVE_GENLIB=False
+if test "$HostOS" = "mingw32"
+then
+ if test "$Genlib" != ""; then
+ GenlibCmd="$(cygpath -m $Genlib)"
+ HAVE_GENLIB=True
+ fi
+fi
+
+AC_SUBST([DllWrapCmd])
+AC_SUBST([WindresCmd])
+AC_SUBST([GenlibCmd])
+AC_SUBST([HAVE_GENLIB])
+
FP_ICONV
FP_GMP
FP_CURSES
XCODE_VERSION()
-SplitObjsBroken=NO
-if test "$TargetOS_CPP" = "darwin"
-then
- # Split objects is broken (#4013) with XCode < 3.2
- if test "$XCodeVersion1" -lt 3
- then
- SplitObjsBroken=YES
- else
- if test "$XCodeVersion1" -eq 3
- then
- if test "$XCodeVersion2" -lt 2
- then
- SplitObjsBroken=YES
- fi
- fi
- fi
-fi
-AC_SUBST([SplitObjsBroken])
dnl ** Building a cross compiler?
dnl --------------------------------------------------------------
GHC.
])
fi
+# Despite its similarity in name to TargetPlatform, TargetPlatformFull is used
+# in calls to subproject configure scripts and thus must be set to the autoconf
+# triple, not the normalized GHC triple that TargetPlatform is set to.
+#
+# We use the non-canonicalized triple, target_alias, here since the subproject
+# configure scripts will use this triple to construct the names of the toolchain
+# executables. If we instead passed down the triple produced by
+# AC_CANONICAL_TARGET then it may look for the target toolchain under the wrong
+# name (this is a known problem in the case of the Android NDK, which has
+# slightly odd triples).
+#
+# It may be better to just do away with the GHC triples altogether. This would
+# all be taken care of for us if we configured the subprojects using
+# AC_CONFIG_DIR, but unfortunately Cabal needs to be the one to do the
+# configuration.
+#
+# We also use non-canonicalized triple when install stage1 crosscompiler
+if test -z "${target_alias}"
+then
+ # --target wasn't given; use result from AC_CANONICAL_TARGET
+ TargetPlatformFull="${target}"
+else
+ TargetPlatformFull="${target_alias}"
+fi
if test "$CrossCompiling" = "YES"
then
- CrossCompilePrefix="${target}-"
+ # Use value passed by user from --target=
+ CrossCompilePrefix="${TargetPlatformFull}-"
else
CrossCompilePrefix=""
fi
-TargetPlatformFull="${TargetPlatform}"
AC_SUBST(CrossCompiling)
AC_SUBST(CrossCompilePrefix)
AC_SUBST(TargetPlatformFull)
+AC_SUBST(EnableDistroToolchain)
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
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 ** Which ld to use
dnl --------------------------------------------------------------
-FIND_LD([LdCmd])
+FIND_LD([$target],[GccUseLdOpt])
+CONF_GCC_LINKER_OPTS_STAGE1="$CONF_GCC_LINKER_OPTS_STAGE1 $GccUseLdOpt"
+CONF_GCC_LINKER_OPTS_STAGE2="$CONF_GCC_LINKER_OPTS_STAGE2 $GccUseLdOpt"
+LdCmd="$LD"
+LdNoGoldCmd="$LD_NO_GOLD"
+CFLAGS="$CFLAGS $GccUseLdOpt"
AC_SUBST([LdCmd])
+AC_SUBST([LdNoGoldCmd])
+
+FP_PROG_LD_IS_GNU
+FP_PROG_LD_BUILD_ID
+FP_PROG_LD_NO_COMPACT_UNWIND
+FP_PROG_LD_FILELIST
dnl ** Which nm to use?
dnl --------------------------------------------------------------
-FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
+if test "$HostOS" != "mingw32"; then
+ AC_CHECK_TARGET_TOOL([NM], [nm])
+ if test "$NM" = ":"; then
+ AC_MSG_ERROR([cannot find nm in your PATH])
+ fi
+fi
+NmCmd="$NM"
+AC_SUBST([NmCmd])
if test "$TargetOS_CPP" = "darwin"
then
echo
echo "Try re-running configure with:"
echo
- echo ' ./configure --with-nm=$(xcrun --find nm-classic)'
+ echo ' NM=$(xcrun --find nm-classic) ./configure'
echo
exit 1
;;
esac
fi
-NmCmd="$NM"
-AC_SUBST([NmCmd])
-
dnl ** Which objdump to use?
dnl --------------------------------------------------------------
-FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([OBJDUMP], [objdump], [objdump])
+dnl Note: we may not have objdump on OS X, and we only need it on
+dnl Windows (for DLL checks), OpenBSD, and AIX
+case $HostOS_CPP in
+ cygwin32|mingw32|openbsd|aix)
+ AC_CHECK_TARGET_TOOL([OBJDUMP], [objdump])
+ ;;
+esac
+
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])
+AC_PROG_RANLIB
+if test "$RANLIB" = ":"; then
+ AC_MSG_ERROR([cannot find ranlib in your PATH])
+fi
RanlibCmd="$RANLIB"
-RANLIB="$RanlibCmd"
+AC_SUBST([RanlibCmd])
+dnl ** which strip to use?
+dnl --------------------------------------------------------------
+AC_CHECK_TARGET_TOOL([STRIP], [strip])
+StripCmd="$STRIP"
+AC_SUBST([StripCmd])
-# 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)
- dnl ** Which objdump to use?
- dnl --------------------------------------------------------------
- FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
- ObjdumpCmd="$OBJDUMP"
- AC_SUBST([ObjdumpCmd])
- ;;
-esac
+
+dnl ** which libtool to use?
+dnl --------------------------------------------------------------
+# The host normalization on Windows breaks autoconf, it no longer
+# thinks that target == host so it never checks the unqualified
+# tools for Windows. See #14274.
+if test "$HostOS" = "mingw32"
+then
+ AC_PATH_PROG([LIBTOOL],[libtool])
+ LibtoolCmd="$(cygpath -m $LIBTOOL)"
+else
+ AC_CHECK_TARGET_TOOL([LIBTOOL], [libtool])
+ LibtoolCmd="$LIBTOOL"
+fi
+AC_SUBST([LibtoolCmd])
# 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
+LlvmVersion=6.0
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 clang to use?
+dnl --------------------------------------------------------------
+AC_CHECK_TARGET_TOOL([CLANG], [clang])
+ClangCmd="$CLANG"
+AC_SUBST([ClangCmd])
+
dnl ** Which LLVM llc to use?
dnl --------------------------------------------------------------
-FIND_LLVM_PROG([LLC], [llc], [llc], [$LlvmVersion])
+FIND_LLVM_PROG([LLC], [llc], [$LlvmVersion])
LlcCmd="$LLC"
AC_SUBST([LlcCmd])
dnl ** Which LLVM opt to use?
dnl --------------------------------------------------------------
-FIND_LLVM_PROG([OPT], [opt], [opt], [$LlvmVersion])
+FIND_LLVM_PROG([OPT], [opt], [$LlvmVersion])
OptCmd="$OPT"
AC_SUBST([OptCmd])
dnl End of configure script option section
dnl --------------------------------------------------------------
+dnl ** Copy the files from the "fs" utility into the right folders.
+dnl --------------------------------------------------------------
+AC_MSG_NOTICE([Creating links for in-tree file handling routines.])
+ln -f -v utils/fs/fs.* utils/lndir/
+ln -f -v utils/fs/fs.* utils/unlit/
+ln -f -v utils/fs/fs.* rts/
+ln -f -v utils/fs/fs.h libraries/base/include/
+ln -f -v utils/fs/fs.c libraries/base/cbits/
+AC_MSG_NOTICE([Routines in place. Packages can now be build normally.])
dnl --------------------------------------------------------------
dnl ** Can the unix package be built?
dnl ** does #! work?
AC_SYS_INTERPRETER()
+# Check for split-objs
+SplitObjsBroken=NO
dnl ** look for `perl'
case $HostOS_CPP in
cygwin32|mingw32)
+ if test "$EnableDistroToolchain" = "NO"; then
PerlCmd=$hardtop/inplace/perl/perl
- ;;
+ else
+ AC_PATH_PROG([PerlCmd],[perl])
+ fi
+ ;;
*)
- AC_PATH_PROG(PerlCmd,perl)
+ 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
+ AC_MSG_WARN([No Perl on PATH, disabling split object support])
+ SplitObjsBroken=YES
else
FPTOOLS_CHECK_PERL_VERSION
fi
;;
esac
+AC_SUBST([SplitObjsBroken])
dnl ** look for GCC and find out which version
dnl Figure out which C compiler to use. Gcc is preferred.
dnl ** See whether gcc supports -no-pie
FP_GCC_SUPPORTS_NO_PIE
+FP_GCC_EXTRA_FLAGS
+
dnl ** look to see if we have a C compiler using an llvm back end.
dnl
FP_CC_LLVM_BACKEND
-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])
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
-
# See rules/distdir-way-opts.mk for details.
# Flags passed to the C compiler
AC_SUBST(CONF_CC_OPTS_STAGE0)
dnl if GNU tar is named gtar, look for it first.
AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
+dnl ** check for compressors
+AC_PATH_PROGS(Bzip2Cmd,bzip2, bzip2)
+AC_PATH_PROGS(GzipCmd,gzip, gzip)
+AC_PATH_PROGS(XzCmd,pxz xz, xz)
+
dnl ** check for patch
dnl if GNU patch is named gpatch, look for it first
AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
dnl ** check for dtrace (currently only implemented for Mac OS X)
+AC_ARG_ENABLE(dtrace,
+ [AC_HELP_STRING([--enable-dtrace],
+ [Enable DTrace])],
+ EnableDtrace=$enableval,
+ EnableDtrace=yes
+)
+
HaveDtrace=NO
+
AC_PATH_PROG(DtraceCmd,dtrace)
-if test -n "$DtraceCmd"; then
- if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
- HaveDtrace=YES
+if test "x$EnableDtrace" = "xyes"; then
+ if test -n "$DtraceCmd"; then
+ if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple" \
+ -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xfreebsd-portbld" \
+ -o "x$TargetOS_CPP-$TargetVendor_CPP" = "xsolaris2-unknown"; then
+ HaveDtrace=YES
+ fi
fi
fi
AC_SUBST(HaveDtrace)
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
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`;
+ fp_cv_sphinx_version=`"$SPHINXBUILD" --version 2>&1 | sed 's/.* v\?\([0-9]\.[0-9]\.[0-9]\)/\1/' | head -n1`;
fi;
changequote([, ])dnl
])
dnl for use in settings.in
-WordSize=$ac_cv_sizeof_void_p
-AC_SUBST(WordSize)
+TargetWordSize=$ac_cv_sizeof_void_p
+if test "x$TargetWordSize" == 8; then
+ AC_SUBST([Cabal64bit],[True])
+else
+ AC_SUBST([Cabal64bit],[False])
+fi
+AC_SUBST(TargetWordSize)
FP_CHECK_FUNC([WinExec],
[@%:@include <windows.h>], [WinExec("",0)])
#include <time.h>])
dnl ** check for mingwex library
-AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
-AC_SUBST(HaveLibMingwEx)
+AC_CHECK_LIB(
+ [mingwex],
+ [closedir],
+ [AC_SUBST([HaveLibMingwEx],[YES])] [AC_SUBST([CabalMingwex],[True])],
+ [AC_SUBST([HaveLibMingwEx],[NO])] [AC_SUBST([CabalMingwex],[False])])
if test $HaveLibMingwEx = YES ; then
AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
if test $HaveLibM = YES
then
AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
+ AC_SUBST([CabalHaveLibm],[True])
+else
+ AC_SUBST([CabalHaveLibm],[False])
fi
FP_BFD_SUPPORT
AC_SUBST(FFILibDir)
+AC_SUBST([CabalHaveLibffi],[False])
AS_IF([test "$UseSystemLibFFI" = "YES"], [
CFLAGS2="$CFLAGS"
CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
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([HAVE_LIBFFI], [1], [Define to 1 if you have libffi.])]
+ AC_SUBST([CabalHaveLibffi],[True]),
[AC_MSG_ERROR([Cannot find system libffi])])
CFLAGS="$CFLAGS2"
LDFLAGS="$LDFLAGS2"
])
dnl ** check whether we need -ldl to get dlopen()
-AC_CHECK_LIB(dl, dlopen)
+AC_CHECK_LIB([dl], [dlopen])
+AC_CHECK_LIB([dl], [dlopen], [AC_SUBST([CabalHaveLibdl], [True])], [AC_SUBST([CabalHaveLibdl], [False])])
dnl --------------------------------------------------
dnl * Miscellaneous feature tests
FP_VISIBILITY_HIDDEN
dnl ** check for librt
-AC_CHECK_LIB(rt, clock_gettime)
+AC_CHECK_LIB([rt], [clock_gettime])
+AC_CHECK_LIB([rt], [clock_gettime], [AC_SUBST([CabalHaveLibrt], [True])], [AC_SUBST([CabalHaveLibrt], [False])])
AC_CHECK_FUNCS(clock_gettime timer_settime)
FP_CHECK_TIMER_CREATE
[Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
])
+dnl Some platforms (e.g. Android's Bionic) have pthreads support available
+dnl without linking against libpthread. Check whether -lpthread is necessary
+dnl to use pthreads.
+dnl
+dnl Note that it is important that this happens before we AC_CHECK_LIB(thread)
+AC_MSG_CHECKING(whether -lpthread is needed for pthreads)
+AC_CHECK_FUNC(pthread_create,
+ [
+ AC_MSG_RESULT(no)
+ AC_SUBST([CabalNeedLibpthread],[False])
+ need_lpthread=0
+ ],
+ [
+ AC_CHECK_LIB(pthread, pthread_create,
+ [
+ AC_MSG_RESULT(yes)
+ AC_SUBST([CabalNeedLibpthread],[True])
+ need_lpthread=1
+ ],
+ [
+ AC_SUBST([CabalNeedLibpthread],[False])
+ AC_MSG_RESULT([no pthreads support found.])
+ need_lpthread=0
+ ])
+ ])
+AC_DEFINE_UNQUOTED([NEED_PTHREAD_LIB], [$need_lpthread],
+ [Define 1 if we need to link code using pthreads with -lpthread])
+
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)
dnl --------------------------------------------------------------
case ${TargetOS} in
- linux|freebsd|dragonfly|netbsd|openbsd|kfreebsdgnu|gnu|solaris2)
+ linux|linux-android|freebsd|dragonfly|netbsd|openbsd|kfreebsdgnu|gnu|solaris2)
RtsLinkerUseMmap=1
;;
- darwin)
+ darwin|ios|watchos|tvos)
# 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
AC_SUBST(UseLibdw)
if test $UseLibdw = "YES" ; then
USE_LIBDW=1
+ AC_SUBST([CabalHaveLibdw],[True])
+else
+ AC_SUBST([CabalHaveLibdw],[False])
fi
AC_DEFINE_UNQUOTED([USE_LIBDW], [$USE_LIBDW], [Set to 1 to use libdw])
AC_CHECK_LIB(numa, numa_available,HaveLibNuma=1)
fi
AC_DEFINE_UNQUOTED([HAVE_LIBNUMA], [$HaveLibNuma], [Define to 1 if you have libnuma])
+if test $HaveLibNuma = "1" ; then
+ AC_SUBST([CabalHaveLibNuma],[True])
+else
+ AC_SUBST([CabalHaveLibNuma],[False])
+fi
+
dnl ** Documentation
dnl --------------------------------------------------------------
LIBRARY_VERSION(base)
LIBRARY_VERSION(Cabal, Cabal/Cabal)
LIBRARY_VERSION(ghc-prim)
+LIBRARY_VERSION(ghc-compact)
LIBRARY_ghc_VERSION="$ProjectVersion"
AC_SUBST(LIBRARY_ghc_VERSION)
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_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk rts/rts.cabal compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal utils/gen-dll/gen-dll.cabal libraries/ghc-boot/ghc-boot.cabal libraries/ghc-boot-th/ghc-boot-th.cabal libraries/ghci/ghci.cabal libraries/ghc-heap/ghc-heap.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 "Please use GNU make >= 3.81."
fi
-echo ["
+echo "
----------------------------------------------------------------------
Configure completed successfully.
Build platform : $BuildPlatform
Host platform : $HostPlatform
Target platform : $TargetPlatform
-"]
+"
-echo ["\
+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="gcc "
fi
-echo ["\
+echo "\
Using (for bootstrapping) : $CC_STAGE0
Using $CompilerName : $CC
which is version : $GccVersion
Unregisterised : $Unregisterised
hs-cpp : $HaskellCPPCmd
hs-cpp-flags : $HaskellCPPArgs
+ ar : $ArCmd
ld : $LdCmd
nm : $NmCmd
+ libtool : $LibtoolCmd
objdump : $ObjdumpCmd
+ ranlib : $RanlibCmd
+ windres : $WindresCmd
+ dllwrap : $DllWrapCmd
+ genlib : $GenlibCmd
Happy : $HappyCmd ($HappyVersion)
Alex : $AlexCmd ($AlexVersion)
Perl : $PerlCmd
xelatex : $XELATEX
Using LLVM tools
+ clang : $ClangCmd
llc : $LlcCmd
- opt : $OptCmd"]
+ opt : $OptCmd"
if test "$HSCOLOUR" = ""; then
-echo ["
+echo "
HsColour was not found; documentation will not contain source links
-"]
+"
else
-echo ["\
+echo "\
HsColour : $HSCOLOUR
-"]
+"
fi
-echo ["\
+echo "\
Tools to build Sphinx HTML documentation available: $BUILD_SPHINX_HTML
- Tools to build Sphinx PDF documentation available: $BUILD_SPHINX_PDF"]
+ Tools to build Sphinx PDF documentation available: $BUILD_SPHINX_PDF"
-echo ["----------------------------------------------------------------------
-"]
+echo "----------------------------------------------------------------------
+"
echo "\
For a standard build of GHC (fully optimised with profiling), type (g)make.
For more information on how to configure your GHC build, see
http://ghc.haskell.org/trac/ghc/wiki/Building
-"
+"]