# 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 --------------------------------------------------------------
CrossCompiling=NO
# If 'host' and 'target' differ, then this means we are building a cross-compiler.
-if test "$target" != "$host" ; then
+if test "$TargetPlatform" != "$HostPlatform" ; then
CrossCompiling=YES
cross_compiling=yes # This tells configure that it can accept just 'target',
# otherwise you get
# configure: error: cannot run C compiled programs.
# If you meant to cross compile, use `--host'.
fi
-if test "$build" != "$host" ; then
+if test "$BuildPlatform" != "$HostPlatform" ; then
AC_MSG_ERROR([
You've selected:
- BUILD: $build (the architecture we're building on)
- HOST: $host (the architecture the compiler we're building will execute on)
- TARGET: $target (the architecture the compiler we're building will produce code for)
+ BUILD: $BuildPlatform (the architecture we're building on)
+ HOST: $HostPlatform (the architecture the compiler we're building will execute on)
+ TARGET: $TargetPlatform (the architecture the compiler we're building will produce code for)
BUILD must equal HOST; that is, we do not support building GHC itself
with a cross-compiler. To cross-compile GHC itself, set TARGET: stage
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="${target}"
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
+ AC_MSG_CHECKING(whether nm program is broken)
+ # Some versions of XCode ship a broken version of `nm`. Detect and work
+ # around this issue. See : https://ghc.haskell.org/trac/ghc/ticket/11744
+ nmver=$(${NM} --version | grep version | sed 's/ //g')
+ case "$nmver" in
+ LLVMversion7.3.0|LLVMversion7.3.1)
+ AC_MSG_RESULT(yes)
+ echo "The detected nm program is broken."
+ echo
+ echo "See: https://ghc.haskell.org/trac/ghc/ticket/11744"
+ echo
+ echo "Try re-running configure with:"
+ echo
+ echo ' NM=$(xcrun --find nm-classic) ./configure'
+ echo
+ exit 1
+ ;;
+ *)
+ AC_MSG_RESULT(no)
+ ;;
+ esac
+fi
+
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.7
+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 --------------------------------------------------------------
-dnl * General configuration checks
+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 ** 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 --------------------------------------------------------------
dnl ** Can the unix package be built?
dnl --------------------------------------------------------------
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
FP_GCC_VERSION
+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)
AC_SUBST(CONF_CC_OPTS_STAGE1)
AC_SUBST(CONF_CC_OPTS_STAGE2)
+# Flags passed to the C compiler when we ask it to link
AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0)
AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1)
AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2)
+# Flags passed to the linker when we ask it to link
AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0)
AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1)
AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2)
+# Flags passed to the C preprocessor
AC_SUBST(CONF_CPP_OPTS_STAGE0)
AC_SUBST(CONF_CPP_OPTS_STAGE1)
AC_SUBST(CONF_CPP_OPTS_STAGE2)
+# Flags passed to the Haskell compiler
+AC_SUBST(CONF_HC_OPTS_STAGE0)
+AC_SUBST(CONF_HC_OPTS_STAGE1)
+AC_SUBST(CONF_HC_OPTS_STAGE2)
dnl ** Set up the variables for the platform in the settings file.
dnl May need to use gcc to find platform details.
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])
+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_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 --------------------------------------------------------------
if test -n "$SPHINXBUILD"; then
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
Building a cross compiler : $CrossCompiling
+ 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
-"
+"]