X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=configure.ac;h=b634bbfb26e49b0e7c0141e2158f119995359e58;hp=085dd35164f1e9f16e5fd0841be06f9c878d2833;hb=HEAD;hpb=5368455619482deeb90af1b3b85784bc4b57a09d diff --git a/configure.ac b/configure.ac index 085dd35..b634bbf 100644 --- a/configure.ac +++ b/configure.ac @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [6.11], [glasgow-haskell-bugs@haskell.org], [ghc]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [7.1], [glasgow-haskell-bugs@haskell.org], [ghc]) # Set this to YES for a released version, otherwise NO : ${RELEASE=NO} @@ -27,12 +27,23 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [6.11], [glasgow-hask # when the source distribution was created. if test ! -f mk/config.h.in; then - echo "mk/config.h.in doesn't exist: perhaps you haven't run 'sh boot'?" + echo "mk/config.h.in doesn't exist: perhaps you haven't run 'perl boot'?" exit 1 fi AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args]) +dnl ---------------------------------------------------------- +dnl ** Find unixy sort and find commands, +dnl ** which are needed by FP_SETUP_PROJECT_VERSION + +dnl ** Find find command (for Win32's benefit) +FP_PROG_FIND + +dnl ** Find sort command (for the benefit of Win32 environs) +FP_PROG_SORT + +dnl ---------------------------------------------------------- FP_SETUP_PROJECT_VERSION # Hmmm, we fix the RPM release number to 1 here... Is this convenient? @@ -58,560 +69,258 @@ if test x"$srcdir" != 'x.' ; then exit 1 fi -dnl-------------------------------------------------------------------- -dnl * Deal with arguments telling us gmp is somewhere odd -dnl-------------------------------------------------------------------- +dnl -------------------------------------------------------------- +dnl * Project specific configuration options +dnl -------------------------------------------------------------- +dnl What follows is a bunch of options that can either be configured +dnl through command line options to the configure script or by +dnl supplying defns in the build tree's mk/build.mk. Having the option to +dnl use either is considered a Feature. + +dnl ** What command to use to compile compiler sources ? +dnl -------------------------------------------------------------- + +AC_ARG_WITH([ghc], +[AC_HELP_STRING([--with-ghc=ARG], + [Use ARG as the path to GHC [default=autodetect]])], + [WithGhc="$withval"], + [if test "$GHC" = ""; then + AC_PATH_PROG([GHC], [ghc]) + fi + WithGhc="$GHC"]) + + +dnl ** Tell the make system which OS we are using +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=YES, + EnableBootstrapWithDevelSnaphost=NO +) -FP_ARG_GMP +if test "$WithGhc" != ""; then + FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl + + if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then + AC_MSG_ERROR([Cannot determine the version of $WithGhc. Is it really GHC?]) + fi + + AC_SUBST(GhcVersion)dnl + AC_SUBST(GhcMajVersion)dnl + AC_SUBST(GhcMinVersion)dnl + AC_SUBST(GhcPatchLevel)dnl + GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'` + GhcCanonVersion="$GhcMajVersion$GhcMinVersion2" + if test $GhcCanonVersion -ge 613; then ghc_ge_613=YES; else ghc_ge_613=NO; fi + AC_SUBST(ghc_ge_613)dnl -GMP_INCLUDE_DIRS= -GMP_LIB_DIRS= -if test "x$gmp_libraries" != "xNONE"; then - LDFLAGS="-L$gmp_libraries $LDFLAGS" - GMP_LIB_DIRS=$gmp_libraries + BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command],['$(CC)']) + BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command],['$(AR)']) + BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags],['$(AR_OPTS)']) + BOOTSTRAPPING_GHC_INFO_FIELD([ArSupportsAtFile_STAGE0],[ar supports at file],['$(ArSupportsAtFile)']) fi -if test "x$gmp_includes" != "xNONE"; then - CPPFLAGS="-I$gmp_includes $CPPFLAGS" - GMP_INCLUDE_DIRS=$gmp_includes + +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],[6.12], + [AC_MSG_ERROR([GHC version 6.12 or later is required to compile GHC.])])dnl + + if test `expr $GhcMinVersion % 2` = "1"; then + if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then + AC_MSG_ERROR([ + $WithGhc is a development snapshot of GHC, version $GhcVersion. + Bootstrapping using this version of GHC is not supported, and may not + work. Use --enable-bootstrap-with-devel-snapshot to try it anyway, + or --with-ghc to specify a different GHC to use.]) + fi + fi +fi; + +# GHC is passed to Cabal, so we need a native path +if test "${WithGhc}" != "" +then + ghc_host=`"${WithGhc}" +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'` + + if test "$ghc_host" = "i386-unknown-mingw32" + then + if test "${OSTYPE}" = "msys" + then + WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"` + else + # Canonicalise to :/path/to/ghc + WithGhc=`cygpath -m "${WithGhc}"` + fi + echo "GHC path canonicalised to: ${WithGhc}" + fi fi -AC_SUBST(GMP_INCLUDE_DIRS) -AC_SUBST(GMP_LIB_DIRS) +AC_SUBST([WithGhc]) + +dnl ** Without optimization some INLINE trickery fails for GHCi +SRC_CC_OPTS="-O" + +FP_ICONV +FP_GMP dnl-------------------------------------------------------------------- dnl * Choose host(/target/build) platform dnl-------------------------------------------------------------------- +dnl If we aren't explicitly told what values to use with configure flags, +dnl we ask the bootstrapping compiler what platform it is for -dnl Guess host/target/build platform(s) if necessary. -AC_CANONICAL_TARGET - -# "$host" defaults to "$target" -if test "x$host" = xNONE ; then - host=$target +if test "${WithGhc}" != "" +then + bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + if test "$bootstrap_host" != "$bootstrap_target" + then + echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work" + fi fi -dnl ** canonicalize platform names -BuildPlatform=`/bin/sh $srcdir/config.sub $build` || exit 1 -HostPlatform=`/bin/sh $srcdir/config.sub $host` || exit 1 -TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1 +# We have to run these unconditionally, but we may discard their +# results in the following code +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET -if test x"$TargetPlatform" != x"$HostPlatform" ; then - AC_MSG_ERROR([ - GHC configuration does not support differing host/target (i.e., cross-compiling)]) -fi +FPTOOLS_SET_PLATFORM_VARS -case $HostPlatform in -*-cygwin*) +exeext='' +soext='.so' +case $host in +*-unknown-cygwin32) AC_MSG_WARN([GHC does not support the Cygwin target at the moment]) AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32]) - HostPlatform=i386-unknown-mingw32 + exit 1 + ;; +*-unknown-mingw32) + exeext='.exe' + soext='.dll' + ;; +i386-apple-darwin|powerpc-apple-darwin) + soext='.dylib' + ;; +x86_64-apple-darwin) + soext='.dylib' ;; esac -exeext='' -soext='.so' -# -# The following will be more difficult when we *are* cross-compiling. -# Suitable names to slam in *_CPP are in platform.h.in. -# We also record the architecture, vendor, and operating system (OS) -# separately. -case $HostPlatform in -alpha*-dec-osf[[12]]*) - HostPlatform=alpha-dec-osf1 # canonicalise for our purposes - TargetPlatform=alpha-dec-osf1 # this will work for now... (hack) - BuildPlatform=alpha-dec-osf1 # hack - HostPlatform_CPP='alpha_dec_osf1' - HostArch_CPP='alpha' - HostVendor_CPP='dec' - HostOS_CPP='osf1' - ;; -alpha*-dec-osf[[345]]*) - HostPlatform=alpha-dec-osf3 # canonicalise for our purposes - TargetPlatform=alpha-dec-osf3 # this will work for now... (hack) - BuildPlatform=alpha-dec-osf3 # hack - HostPlatform_CPP='alpha_dec_osf3' - HostArch_CPP='alpha' - HostVendor_CPP='dec' - HostOS_CPP='osf3' - ;; -alpha*-unknown-linux*) - HostPlatform=alpha-unknown-linux - TargetPlatform=alpha-unknown-linux - BuildPlatform=alpha-unknown-linux - HostPlatform_CPP='alpha_unknown_linux' - HostArch_CPP='alpha' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -alpha*-unknown-freebsd*) - HostPlatform=alpha-unknown-freebsd - TargetPlatform=alpha-unknown-freebsd - BuildPlatform=alpha-unknown-freebsd - HostPlatform_CPP='alpha_unknown_freebsd' - HostArch_CPP='alpha' - HostVendor_CPP='unknown' - HostOS_CPP='freebsd' - ;; -alpha*-unknown-openbsd*) - HostPlatform=alpha-unknown-openbsd - TargetPlatform=alpha-unknown-openbsd - BuildPlatform=alpha-unknown-openbsd - HostPlatform_CPP='alpha_unknown_openbsd' - HostArch_CPP='alpha' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -amd64-*-openbsd*|x86_64-*-openbsd*) - HostPlatform=x86_64-unknown-openbsd - TargetPlatform=x86_64-unknown-openbsd - BuildPlatform=x86_64-unknown-openbsd - HostPlatform_CPP='x86_64_unknown_openbsd' - HostArch_CPP='x86_64' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -amd64-*-freebsd*|x86_64-*-freebsd*) - HostPlatform=x86_64-unknown-freebsd - TargetPlatform=x86_64-unknown-freebsd - BuildPlatform=x86_64-unknown-freebsd - HostPlatform_CPP='x86_64_unknown_freebsd' - HostArch_CPP='x86_64' - HostVendor_CPP='unknown' - HostOS_CPP='freebsd' - ;; -amd64-*-netbsd*|x86_64-*-netbsd*) - HostPlatform=x86_64-unknown-netbsd - TargetPlatform=x86_64-unknown-netbsd - BuildPlatform=x86_64-unknown-netbsd - HostPlatform_CPP='x86_64_unknown_netbsd' - HostArch_CPP='x86_64' - HostVendor_CPP='unknown' - HostOS_CPP='netbsd' - ;; -arm*-linux*) - HostPlatform=arm-unknown-linux # hack again - TargetPlatform=arm-unknown-linux - BuildPlatform=arm-unknown-linux - HostPlatform_CPP='arm_unknown_linux' - HostArch_CPP='arm' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -arm*-openbsd*) - HostPlatform=arm-unknown-openbsd - TargetPlatform=arm-unknown-openbsd - BuildPlatform=arm-unknown-openbsd - HostPlatform_CPP='arm_unknown_openbsd' - HostArch_CPP='arm' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -hppa*-*-linux*) - HostPlatform=hppa-unknown-linux # hack again - TargetPlatform=hppa-unknown-linux - BuildPlatform=hppa-unknown-linux - HostPlatform_CPP='hppa_unknown_linux' - HostArch_CPP='hppa' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -hppa*-*-openbsd*) - HostPlatform=hppa-unknown-openbsd # hack again - TargetPlatform=hppa-unknown-openbsd - BuildPlatform=hppa-unknown-openbsd - HostPlatform_CPP='hppa_unknown_openbsd' - HostArch_CPP='hppa' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -hppa1.1-hp-hpux*) - HostPlatform=hppa1.1-hp-hpux # canonicalise for our purposes (hack) - TargetPlatform=hppa1.1-hp-hpux - BuildPlatform=hppa1.1-hp-hpux - HostPlatform_CPP='hppa1_1_hp_hpux' - HostArch_CPP='hppa1_1' - HostVendor_CPP='hp' - HostOS_CPP='hpux' - ;; -i[[3456]]86-*-linuxaout*) - HostPlatform=i386-unknown-linuxaout # hack again - TargetPlatform=i386-unknown-linuxaout - BuildPlatform=i386-unknown-linuxaout - HostPlatform_CPP='i386_unknown_linuxaout' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='linuxaout' - ;; -i[[3456]]86-*-linux*) - HostPlatform=i386-unknown-linux # hack again - TargetPlatform=i386-unknown-linux - BuildPlatform=i386-unknown-linux - HostPlatform_CPP='i386_unknown_linux' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -i[[3456]]86-*-kfreebsd*-gnu) - HostPlatform=i386-unknown-kfreebsdgnu # hack again - TargetPlatform=i386-unknown-kfreebsdgnu - BuildPlatform=i386-unknown-kfreebsdgnu - HostPlatform_CPP='i386_unknown_kfreebsdgnu' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='kfreebsdgnu' - ;; -i[[3456]]86-*-freebsd[[3-9]]*) # FreeBSD 3.0+ uses ELF - HostPlatform=i386-unknown-freebsd # hack again - TargetPlatform=i386-unknown-freebsd - BuildPlatform=i386-unknown-freebsd - HostPlatform_CPP='i386_unknown_freebsd' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='freebsd' - ;; -i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out - HostPlatform=i386-unknown-freebsd2 # hack again - TargetPlatform=i386-unknown-freebsd2 - BuildPlatform=i386-unknown-freebsd2 - HostPlatform_CPP='i386_unknown_freebsd2' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='freebsd2' - ;; -i[[3456]]86-*-netbsd*) - HostPlatform=i386-unknown-netbsd # hack again - TargetPlatform=i386-unknown-netbsd - BuildPlatform=i386-unknown-netbsd - HostPlatform_CPP='i386_unknown_netbsd' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='netbsd' - ;; -i[[3456]]86-*-openbsd*) - HostPlatform=i386-unknown-openbsd # hack again - TargetPlatform=i386-unknown-openbsd - BuildPlatform=i386-unknown-openbsd - HostPlatform_CPP='i386_unknown_openbsd' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -i[[3456]]86-*-solaris2*) - HostPlatform=i386-unknown-solaris2 # hack again - TargetPlatform=i386-unknown-solaris2 - BuildPlatform=i386-unknown-solaris2 - HostPlatform_CPP='i386_unknown_solaris2' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='solaris2' - ;; -i[[3456]]86-*-cygwin*) - HostPlatform=i386-unknown-cygwin32 # hack again - TargetPlatform=i386-unknown-cygwin32 - BuildPlatform=i386-unknown-cygwin32 - HostPlatform_CPP='i386_unknown_cygwin32' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='cygwin32' - exeext='.exe' - soext='.dll' - ;; -i[[3456]]86-*-mingw32*) - HostPlatform=i386-unknown-mingw32 # hack again - TargetPlatform=i386-unknown-mingw32 - BuildPlatform=i386-unknown-mingw32 - HostPlatform_CPP='i386_unknown_mingw32' - HostArch_CPP='i386' - HostVendor_CPP='unknown' - HostOS_CPP='mingw32' - exeext='.exe' - soext='.dll' - ;; -i[[3456]]86-apple-darwin*) - HostPlatform=i386-apple-darwin - TargetPlatform=i386-apple-darwin #hack - BuildPlatform=i386-apple-darwin #hack - HostPlatform_CPP='i386_apple_darwin' - HostArch_CPP='i386' - HostVendor_CPP='apple' - HostOS_CPP='darwin' - soext='.dylib' - ;; -i[[3456]]86-*-gnu*) - HostPlatform=i386-unknown-gnu - TargetPlatform=i386-unknown-gnu - BuildPlatform=i386-unknown-gnu - HostPlatform_CPP=i386_unknown_gnu - HostArch_CPP=i386 - HostVendor_CPP=unknown - HostOS_CPP=gnu - ;; -ia64-*-linux*) - HostPlatform=ia64-unknown-linux # hack again - TargetPlatform=ia64-unknown-linux - BuildPlatform=ia64-unknown-linux - HostPlatform_CPP='ia64_unknown_linux' - HostArch_CPP='ia64' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -x86_64-*-linux*) - HostPlatform=x86_64-unknown-linux - TargetPlatform=x86_64-unknown-linux - BuildPlatform=x86_64-unknown-linux - HostPlatform_CPP='x86_64_unknown_linux' - HostArch_CPP='x86_64' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -x86_64-apple-darwin*) - HostPlatform=x86_64-apple-darwin - TargetPlatform=x86_64-apple-darwin - BuildPlatform=x86_64-apple-darwin - HostPlatform_CPP='x86_64_apple_darwin' - HostArch_CPP='x86_64' - HostVendor_CPP='apple' - HostOS_CPP='darwin' - soext='.dylib' - # By default, gcc makes 32bit executables on OS X - CFLAGS="$CFLAGS -m64" - LDFLAGS="$LDFLAGS -m64" - ;; -m68k-*-linux*) - HostPlatform=m68k-unknown-linux # hack again - TargetPlatform=m68k-unknown-linux - BuildPlatform=m68k-unknown-linux - HostPlatform_CPP='m68k_unknown_linux' - HostArch_CPP='m68k' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -m68k-next-nextstep2) - HostPlatform_CPP='m68k_next_nextstep2' - HostArch_CPP='m68k' - HostVendor_CPP='next' - HostOS_CPP='nextstep2' - ;; -m68k-next-nextstep3) - HostPlatform_CPP='m68k_next_nextstep3' - HostArch_CPP='m68k' - HostVendor_CPP='next' - HostOS_CPP='nextstep3' - ;; -i[[3456]]86-next-nextstep3) - HostPlatform=i386-next-nextstep3 # hack again - TargetPlatform=i386-next-nextstep3 - BuildPlatform=i386-next-nextstep3 - HostPlatform_CPP='i386_next_nextstep3' - HostArch_CPP='i386' - HostVendor_CPP='next' - HostOS_CPP='nextstep3' - ;; -m68k-*-openbsd*) - HostPlatform=m68k-unknown-openbsd - TargetPlatform=m68k-unknown-openbsd - BuildPlatform=m68k-unknown-openbsd - HostPlatform_CPP='m68k_unknown_openbsd' - HostArch_CPP='m68k' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -m68k-*-netbsd*) - HostPlatform=m68k-unknown-netbsd - TargetPlatform=m68k-unknown-netbsd - BuildPlatform=m68k-unknown-netbsd - HostPlatform_CPP='m68k_unknown_netbsd' - HostArch_CPP='m68k' - HostVendor_CPP='unknown' - HostOS_CPP='netbsd' - ;; -m68k-sun-sunos4*) - HostPlatform=m68k-sun-sunos4 - TargetPlatform=m68k-sun-sunos4 #hack - BuildPlatform=m68k-sun-sunos4 #hack - HostPlatform_CPP='m68k_sun_sunos4' - HostArch_CPP='m68k' - HostVendor_CPP='sun' - HostOS_CPP='sunos4' - ;; -m88k-*-openbsd*) - HostPlatform=m88k-unknown-openbsd - TargetPlatform=m88k-unknown-openbsd - BuildPlatform=m88k-unknown-openbsd - HostPlatform_CPP='m88k_unknown_openbsd' - HostArch_CPP='m88k' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -mips-*-linux*) - HostPlatform=mips-unknown-linux # hack again - TargetPlatform=mips-unknown-linux - BuildPlatform=mips-unknown-linux - HostPlatform_CPP='mips_unknown_linux' - HostArch_CPP='mips' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -mipsel-*-linux*) - HostPlatform=mipsel-unknown-linux # hack again - TargetPlatform=mipsel-unknown-linux - BuildPlatform=mipsel-unknown-linux - HostPlatform_CPP='mipsel_unknown_linux' - HostArch_CPP='mipsel' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -mips-dec-ultrix*) - HostPlatform_CPP='mips_dec_ultrix' - HostArch_CPP='mipsel' # NB a little different - HostVendor_CPP='dec' - HostOS_CPP='ultrix' - ;; -mips-sgi-irix*) - HostPlatform=mips-sgi-irix - TargetPlatform=mips-sgi-irix #hack - BuildPlatform=mips-sgi-irix #hack - HostPlatform_CPP='mips_sgi_irix' - HostArch_CPP='mipseb' # NB a little different - HostVendor_CPP='sgi' - HostOS_CPP='irix' - ;; -rs6000-ibm-aix*) - HostPlatform=rs6000-ibm-aix - TargetPlatform=rs6000-ibm-aix #hack - BuildPlatform=rs6000-ibm-aix #hack - HostPlatform_CPP='rs6000_ibm_aix' - HostArch_CPP='rs6000' - HostVendor_CPP='ibm' - HostOS_CPP='aix' - ;; -powerpc-ibm-aix*) - HostPlatform=powerpc-ibm-aix - TargetPlatform=powerpc-ibm-aix #hack - BuildPlatform=powerpc-ibm-aix #hack - HostPlatform_CPP='powerpc_ibm_aix' - HostArch_CPP='powerpc' - HostVendor_CPP='ibm' - HostOS_CPP='aix' - ;; -powerpc-apple-darwin*) - HostPlatform=powerpc-apple-darwin - TargetPlatform=powerpc-apple-darwin #hack - BuildPlatform=powerpc-apple-darwin #hack - HostPlatform_CPP='powerpc_apple_darwin' - HostArch_CPP='powerpc' - HostVendor_CPP='apple' - HostOS_CPP='darwin' - soext='.dylib' - ;; -powerpc-unknown-linux*) - HostPlatform=powerpc-unknown-linux - TargetPlatform=powerpc-unknown-linux - BuildPlatform=powerpc-unknown-linux - HostPlatform_CPP='powerpc_unknown_linux' - HostArch_CPP='powerpc' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; -powerpc-unknown-openbsd*) - HostPlatform=powerpc-unknown-openbsd - TargetPlatform=powerpc-unknown-openbsd - BuildPlatform=powerpc-unknown-openbsd - HostPlatform_CPP='powerpc_unknown_openbsd' - HostArch_CPP='powerpc' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' - ;; -powerpc64-unknown-linux*) - HostPlatform=powerpc64-unknown-linux - TargetPlatform=powerpc64-unknown-linux - BuildPlatform=powerpc64-unknown-linux - HostPlatform_CPP='powerpc64_unknown_linux' - HostArch_CPP='powerpc64' - HostVendor_CPP='unknown' - HostOS_CPP='linux' - ;; +# Testing if we shall enable shared libs support on Solaris. +# Anything older than SunOS 5.11 aka Solaris 11 (Express) is broken. -s390-ibm-linux*) - HostPlatform=s390-ibm-linux - TargetPlatform=s390-ibm-linux #hack - BuildPlatform=s390-ibm-linux #hack - HostPlatform_CPP='s390_ibm_linux' - HostArch_CPP='s390' - HostVendor_CPP='ibm' - HostOS_CPP='linux' - ;; -sparc-sun-sunos4*) - HostPlatform=sparc-sun-sunos4 - TargetPlatform=sparc-sun-sunos4 #hack - BuildPlatform=sparc-sun-sunos4 #hack - HostPlatform_CPP='sparc_sun_sunos4' - HostArch_CPP='sparc' - HostVendor_CPP='sun' - HostOS_CPP='sunos4' - ;; -sparc-sun-solaris2*) - HostPlatform=sparc-sun-solaris2 - TargetPlatform=sparc-sun-solaris2 #hack - BuildPlatform=sparc-sun-solaris2 #hack - HostPlatform_CPP='sparc_sun_solaris2' - HostArch_CPP='sparc' - HostVendor_CPP='sun' - HostOS_CPP='solaris2' +SOLARIS_BROKEN_SHLD=NO + +case $host in + i386-*-solaris2) + # here we go with the test + MINOR=`uname -r|cut -d '.' -f 2-` + if test "$MINOR" -lt "11"; then + SOLARIS_BROKEN_SHLD=YES + fi + ;; +esac + +checkArch() { + case $1 in + alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64) ;; -sparc*-linux*) - HostPlatform=sparc-unknown-linux - TargetPlatform=sparc-unknown-linux - BuildPlatform=sparc-unknown-linux - HostPlatform_CPP='sparc_unknown_linux' - HostArch_CPP='sparc' - HostVendor_CPP='unknown' - HostOS_CPP='linux' + *) + echo "Unknown arch $1" + exit 1 ;; -sparc-*-openbsd*) - HostPlatform=sparc-unknown-openbsd - TargetPlatform=sparc-unknown-openbsd - BuildPlatform=sparc-unknown-openbsd - HostPlatform_CPP='sparc_unknown_openbsd' - HostArch_CPP='sparc' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' + esac +} + +checkVendor() { + case $1 in + dec|unknown|hp|apple|next|sun|sgi|ibm) ;; -sparc64-*-openbsd*) - HostPlatform=sparc64-unknown-openbsd - TargetPlatform=sparc64-unknown-openbsd - BuildPlatform=sparc64-unknown-openbsd - HostPlatform_CPP='sparc64_unknown_openbsd' - HostArch_CPP='sparc64' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' + *) + echo "Unknown vendor $1" + exit 1 ;; -vax-*-openbsd*) - HostPlatform=vax-unknown-openbsd - TargetPlatform=vax-unknown-openbsd - BuildPlatform=vax-unknown-openbsd - HostPlatform_CPP='vax_unknown_openbsd' - HostArch_CPP='vax' - HostVendor_CPP='unknown' - HostOS_CPP='openbsd' + esac +} + +checkOS() { + case $1 in + linux|freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku) ;; -*) - echo "Unrecognised platform: $HostPlatform" + *) + echo "Unknown OS '$1'" exit 1 ;; -esac -echo "Canonicalised to: $HostPlatform" -test x"$HostPlatform" != x"$TargetPlatform" && echo "Target platform set to $TargetPlatform" -test x"$BuildPlatform" != x"$HostPlatform" && echo "Build platform set to $BuildPlatform" - -BuildPlatform_CPP=$HostPlatform_CPP -TargetPlatform_CPP=$HostPlatform_CPP -BuildArch_CPP=$HostArch_CPP -TargetArch_CPP=$HostArch_CPP -BuildOS_CPP=$HostOS_CPP -HostOS_Full=$host_os -TargetOS_CPP=$HostOS_CPP -BuildVendor_CPP=$HostVendor_CPP -TargetVendor_CPP=$HostVendor_CPP + esac +} + +BuildPlatform="$BuildArch-$BuildVendor-$BuildOS" +BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` +BuildArch_CPP=` echo "$BuildArch" | sed -e 's/\./_/g' -e 's/-/_/g'` +BuildVendor_CPP=` echo "$BuildVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` +BuildOS_CPP=` echo "$BuildOS" | sed -e 's/\./_/g' -e 's/-/_/g'` + +checkArch "$BuildArch" +checkVendor "$BuildVendor" +checkOS "$BuildOS" + +HostPlatform="$HostArch-$HostVendor-$HostOS" +HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` +HostArch_CPP=` echo "$HostArch" | sed -e 's/\./_/g' -e 's/-/_/g'` +HostVendor_CPP=` echo "$HostVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` +HostOS_CPP=` echo "$HostOS" | sed -e 's/\./_/g' -e 's/-/_/g'` + +checkArch "$HostArch" +checkVendor "$HostVendor" +checkOS "$HostOS" + +TargetPlatform="$TargetArch-$TargetVendor-$TargetOS" +TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` +TargetArch_CPP=` echo "$TargetArch" | sed -e 's/\./_/g' -e 's/-/_/g'` +TargetVendor_CPP=` echo "$TargetVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` +TargetOS_CPP=` echo "$TargetOS" | sed -e 's/\./_/g' -e 's/-/_/g'` + +checkArch "$TargetArch" +checkVendor "$TargetVendor" +checkOS "$TargetOS" + +# Verify that the installed (bootstrap) GHC is capable of generating +# code for the requested build platform. +if test "$BootingFromHc" = "NO" +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 +fi + +echo "GHC build : $BuildPlatform" +echo "GHC host : $HostPlatform" +echo "GHC target : $TargetPlatform" AC_SUBST(BuildPlatform) AC_SUBST(HostPlatform) @@ -625,7 +334,6 @@ AC_SUBST(BuildArch_CPP) AC_SUBST(TargetArch_CPP) AC_SUBST(HostOS_CPP) -AC_SUBST(HostOS_Full) AC_SUBST(BuildOS_CPP) AC_SUBST(TargetOS_CPP) @@ -636,38 +344,7 @@ AC_SUBST(TargetVendor_CPP) AC_SUBST(exeext) AC_SUBST(soext) -dnl -------------------------------------------------------------- -dnl * Project specific configuration options -dnl -------------------------------------------------------------- -dnl What follows is a bunch of options that can either be configured -dnl through command line options to the configure script or by -dnl supplying defns in the build tree's mk/build.mk. Having the option to -dnl use either is considered a Feature. - -dnl ** What command to use to compile compiler sources ? -dnl -------------------------------------------------------------- - -AC_ARG_WITH([ghc], -[AC_HELP_STRING([--with-ghc=ARG], - [Use ARG as the path to GHC [default=autodetect]])], - [WithGhc="$withval"], - [if test "$GHC" = ""; then - AC_PATH_PROG([GHC], [ghc]) - fi - WithGhc="$GHC"]) -# GHC is passed to Cabal, so we need a native path -if test "${WithGhc}" != "" && test "$HostPlatform" = "i386-unknown-mingw32" -then - if test "${OSTYPE}" = "msys" - then - WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"` - else - # Canonicalise to :/path/to/ghc - WithGhc=`cygpath -m ${WithGhc}` - fi - echo "Canonicalised to: ${WithGhc}" -fi -AC_SUBST([WithGhc]) +AC_SUBST(SOLARIS_BROKEN_SHLD) AC_ARG_WITH(hc, [AC_HELP_STRING([--with-hc=ARG], @@ -678,197 +355,127 @@ AC_ARG_WITH(hc, ) AC_SUBST(WithHc) -AC_ARG_ENABLE(bootstrap-with-devel-snapshot, -[AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot], - [Allow bootstrapping using a development snapshot of GHC. This is not guaranteed to work.])], - EnableBootstrapWithDevelSnaphost=YES, - EnableBootstrapWithDevelSnaphost=NO -) - -if test "$WithGhc" != ""; then - FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl - - if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then - AC_MSG_ERROR([Cannot determine the version of $WithGhc. Is it really GHC?]) - fi +# This uses GHC, so put it after the "GHC is required" check above: +FP_INTREE_GHC_PWD +FP_FIND_ROOT - AC_SUBST(GhcVersion)dnl - AC_SUBST(GhcMajVersion)dnl - AC_SUBST(GhcMinVersion)dnl - AC_SUBST(GhcPatchLevel)dnl - GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'` - GhcCanonVersion="$GhcMajVersion$GhcMinVersion2" - if test $GhcCanonVersion -ge 607; then ghc_ge_607=YES; else ghc_ge_607=NO; fi - if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi - AC_SUBST(ghc_ge_607)dnl - AC_SUBST(ghc_ge_609)dnl +if test "$HostOS" = "mingw32" +then + test -d inplace || mkdir inplace + + CC="$hardtop/inplace/mingw/bin/gcc.exe" + LD="$hardtop/inplace/mingw/bin/ld.exe" + NM="$hardtop/inplace/mingw/bin/nm.exe" + fp_prog_ar_raw="$hardtop/inplace/mingw/bin/ar.exe" + + # NB. If you update the tarbballs 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 + if ! test -e inplace/mingw/bin/gcc.exe + then + AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.]) + fi + AC_MSG_NOTICE([In-tree mingw tree created]) + fi + if ! test -d inplace/perl || + test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz + then + AC_MSG_NOTICE([Making in-tree perl tree]) + rm -rf inplace/perl + mkdir inplace + mkdir inplace/perl + ( + cd inplace/perl && + tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz + ) + AC_MSG_NOTICE([In-tree perl tree created]) + fi fi -AC_PATH_PROGS(NHC,nhc nhc98) -AC_PATH_PROG(HBC,hbc) - dnl ** Which gcc to use? dnl -------------------------------------------------------------- -AC_ARG_WITH(gcc, -[AC_HELP_STRING([--with-gcc=ARG], - [Use ARG as the path to GCC [default=autodetect]])], -[WhatGccIsCalled="$withval" - if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ - test "${OSTYPE}" != "msys" && \ - test "${withval}" != "" - then - # Canonicalise to :/path/to/gcc - withval=`cygpath -m ${withval}` - fi; - CC="$withval" - export CC - ], -[WhatGccIsCalled="gcc"] -) +FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc]) +export CC +WhatGccIsCalled="$CC" AC_SUBST(WhatGccIsCalled) dnl ** Which ld to use? dnl -------------------------------------------------------------- -AC_ARG_WITH(ld, -[AC_HELP_STRING([--with-ld=ARG], - [Use ARG as the path to LD [default=autodetect]])], -[if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ - test "${OSTYPE}" != "msys" && \ - test "${withval}" != "" - then - # Canonicalise to :/path/to/ld - withval=`cygpath -m ${withval}` - fi; - LD=$withval - FP_PROG_LD([$LD]) - ], - [FP_PROG_LD()] -) - -dnl ** Build shared and/or static libs? -dnl -------------------------------------------------------------- -AC_ARG_ENABLE(shared, -[AC_HELP_STRING([--enable-shared], -[Build shared libraries, if available (EXPERIMENTAL, non-working). [default=no]])], -[ if test x"$enableval" = x"yes"; then - AC_MSG_WARN([--enable-shared is experimental and not fully supported at this time]) - BuildSharedLibs=YES - else - BuildSharedLibs=NO - fi -], -[BuildSharedLibs=NO] -) -AC_SUBST(BuildSharedLibs) - -# ToDo later: -# AC_ARG_ENABLE(static, -# [AC_HELP_STRING([--enable-static], -# [Build static libraries. [default=yes]])], -# [ if test x"$enableval" = x"yes"; then -# BuildStaticLibs=YES -# else -# BuildStaticLibs=NO -# fi -# ], -# [BuildStaticLibs=YES] -# ) -# AC_SUBST(BuildStaticLibs) +FP_ARG_WITH_PATH_GNU_PROG([LD], [ld]) +LdCmd="$LD" +AC_SUBST([LdCmd]) -dnl ** Booting from .hc files? +dnl ** Which nm to use? 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) +FP_ARG_WITH_PATH_GNU_PROG([NM], [nm]) +NmCmd="$NM" +AC_SUBST([NmCmd]) -dnl ** Booting from unregisterised .hc files? -dnl -------------------------------------------------------------- -AC_ARG_ENABLE(hc-boot-unregisterised, -[AC_HELP_STRING([--enable-hc-boot-unregisterised], -[ With --enable-hc-boot, treat the intermediate .hc files as - unregisterised rather than registerised code. - (This option is mostly of interest to porters.) [default=no]])], -[ if test x"$enableval" = x"yes"; then - BootingFromUnregisterisedHc=YES - else - BootingFromUnregisterisedHc=NO - fi -], -[BootingFromUnregisterisedHc=NO] -) -AC_SUBST(BootingFromUnregisterisedHc) - -if test "$BootingFromHc" = "NO"; then -if test "$BootingFromUnregisterisedHc" = "YES"; then -AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.]) -fi; -fi; - -dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on -if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then - if test "$WithGhc" = ""; then - AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.]) - fi - FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.6], - [AC_MSG_ERROR([GHC version 6.6 or later is required to compile GHC.])])dnl - - if test `expr $GhcMinVersion % 2` = "1"; then - echo $EnableBootstrapWithDevelSnaphost - 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; - -# This uses GHC, so put it after the "GHC is required" check above: -FP_FIND_ROOT - -dnl ** Enable the construction of Win32 DLLs? -dnl -------------------------------------------------------------- -dnl -dnl [ The ability to build the RTS and libraries as separate DLLs used -dnl to be supported, but isn't currently (updates to the RTS, compiler -dnl and build system would be required to bring it back again.) -dnl Hence, exposing it as an option is false advertisement, so better -dnl disable it to avoid confusion (but leave it commented-out rather -dnl than removed in order to remind ourselves to bring back the -dnl feature at some stage.) ] -dnl -dnl AC_ARG_ENABLE(win32-dlls, -dnl [ --enable-win32-dlls -dnl If on a Win32 platform running mingw32/cygwin, enable the -dnl construction of DLLs containing ghc-compiled code. -dnl ], -dnl [ -dnl case $HostOS_CPP in -dnl cygwin32) ;; -dnl mingw32) ;; -dnl *) echo "Unrecognised win32 platform: $HostPlatform" -dnl exit 1 -dnl ;; -dnl esac -dnl EnableWin32DLLs=YES -dnl ], -dnl [EnableWin32DLLs=NO] -dnl ) -dnl AC_SUBST(EnableWin32DLLs) -dnl if test x"$EnableWin32DLLs" = "xYES" ; then -dnl AC_DEFINE(HAVE_WIN32_DLL_SUPPORT) -dnl fi +SplitObjsBroken=NO +if test "$TargetOS_CPP" = "darwin" +then + AC_MSG_CHECKING(XCode version) + XCodeVersion=`xcodebuild -version | grep Xcode | sed "s/Xcode //"` + # Old XCode versions don't actually give the XCode version + if test "$XCodeVersion" = "" + then + AC_MSG_RESULT(not found (too old?)) + SplitObjsBroken=YES + else + AC_MSG_RESULT($XCodeVersion) + XCodeVersion1=`echo "$XCodeVersion" | sed 's/\..*//'` +changequote(, )dnl + XCodeVersion2=`echo "$XCodeVersion" | sed 's/[^.]*\.\([^.]*\).*/\1/'` +changequote([, ])dnl + AC_MSG_NOTICE(XCode version component 1: $XCodeVersion1) + AC_MSG_NOTICE(XCode version component 2: $XCodeVersion2) + # 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 +fi +AC_SUBST([SplitObjsBroken]) dnl ** Mac OS X: explicit deployment target dnl -------------------------------------------------------------- @@ -909,26 +516,22 @@ AC_SUBST([GhcLibsWithUnix]) dnl ** does #! work? AC_SYS_INTERPRETER() -dnl ** look for `perl', but only in /bin on Windows +dnl ** look for `perl' case $HostOS_CPP in cygwin32|mingw32) - AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin) - if test -z "$PerlCmd"; then - echo "You must install the version of Perl shipped with GHC" - echo "(or a compatible one) in /bin." - exit 1 - fi - ;; + PerlCmd=$hardtop/inplace/perl/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 - else - FPTOOLS_CHECK_PERL_VERSION - fi - ;; + AC_PATH_PROG(PerlCmd,perl) + if test -z "$PerlCmd" + then + echo "You must install perl before you can continue" + echo "Perhaps it is already installed, but not in your PATH?" + exit 1 + else + FPTOOLS_CHECK_PERL_VERSION + fi + ;; esac dnl ** does #! path/to/perl work? (sometimes it's too long...) @@ -941,31 +544,35 @@ dnl ** look for GCC and find out which version dnl Figure out which C compiler to use. Gcc is preferred. dnl If gcc, make sure it's at least 2.1 dnl -FP_HAVE_GCC -FP_MINGW_GCC +FP_GCC_VERSION + +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]) + FP_GCC_EXTRA_FLAGS dnl ** figure out how to invoke cpp directly (gcc -E is no good) AC_PROG_CPP -dnl ** Without optimization some INLINE trickery fails for GHCi -SRC_CC_OPTS="-O" - -SRC_CC_OPTS="$SRC_CC_OPTS $CFLAGS" -SRC_LD_OPTS="$SRC_LD_OPTS $LDFLAGS" - -AC_SUBST(SRC_CC_OPTS) -AC_SUBST(SRC_LD_OPTS) +AC_SUBST(CONF_CC_OPTS_STAGE0) +AC_SUBST(CONF_CC_OPTS_STAGE1) +AC_SUBST(CONF_CC_OPTS_STAGE2) +AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE0) +AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE1) +AC_SUBST(CONF_GCC_LINKER_OPTS_STAGE2) +AC_SUBST(CONF_LD_LINKER_OPTS_STAGE0) +AC_SUBST(CONF_LD_LINKER_OPTS_STAGE1) +AC_SUBST(CONF_LD_LINKER_OPTS_STAGE2) +AC_SUBST(CONF_CPP_OPTS_STAGE0) +AC_SUBST(CONF_CPP_OPTS_STAGE1) +AC_SUBST(CONF_CPP_OPTS_STAGE2) dnl ** figure out how to do context diffs FP_PROG_CONTEXT_DIFF -dnl ** Find find command (for Win32's benefit) -FP_PROG_FIND - -dnl ** Find sort command (for the benefit of Win32 environs) -FP_PROG_SORT - dnl Let's make sure install-sh is executable here. If we got it from dnl a darcs repo, it might not be (see bug #978). chmod +x install-sh @@ -976,15 +583,15 @@ 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 -FP_PROG_AR_SUPPORTS_INPUT dnl ** Check to see whether ln -s works AC_PROG_LN_S dnl ** Find the path to sed -AC_PATH_PROG(SedCmd,sed) +AC_PATH_PROGS(SedCmd,gsed sed,sed) dnl ** check for time command @@ -992,12 +599,22 @@ AC_PATH_PROG(TimeCmd,time) dnl ** check for tar dnl if GNU tar is named gtar, look for it first. -AC_PATH_PROGS(TarCmd,gtar tar,tar) +AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar) dnl ** check for patch dnl if GNU patch is named gpatch, look for it first AC_PATH_PROGS(PatchCmd,gpatch patch, patch) +dnl ** check for dtrace (currently only implemented for Mac OS X) +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 + fi +fi +AC_SUBST(HaveDtrace) + AC_PATH_PROG(HSCOLOUR,HsColour) # HsColour is passed to Cabal, so we need a native path if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ @@ -1010,12 +627,9 @@ fi dnl ** check for DocBook toolchain FP_CHECK_DOCBOOK_DTD -FP_DIR_DOCBOOK_XSL([/usr/share/xml/docbook/stylesheet/nwalsh/current /usr/share/xml/docbook/stylesheet/nwalsh /usr/share/xml/docbook/xsl-stylesheets* /usr/share/sgml/docbook/docbook-xsl-stylesheets* /usr/share/sgml/docbook/xsl-stylesheets* /opt/kde?/share/apps/ksgmltools2/docbook/xsl /usr/share/docbook-xsl /usr/share/sgml/docbkxsl /usr/local/share/xsl/docbook /sw/share/xml/xsl/docbook-xsl /opt/local/share/xsl/docbook-xsl]) - +FP_DOCBOOK_XSL FP_PROG_DBLATEX -FP_PROG_HSTAGS - dnl ** check for ghc-pkg command FP_PROG_GHC_PKG @@ -1031,9 +645,6 @@ if test "$BootingFromHc" = "NO"; then FPTOOLS_ALEX fi; -dnl Check we have an acceptable version of windres -FPTOOLS_WINDRES - dnl -------------------------------------------------- dnl ### program checking section ends here ### dnl -------------------------------------------------- @@ -1050,7 +661,7 @@ dnl off_t, because it will affect the result of that test. AC_SYS_LARGEFILE dnl ** check for specific header (.h) files that we are interested in -AC_CHECK_HEADERS([bfd.h ctype.h dirent.h dlfcn.h errno.h fcntl.h grp.h limits.h locale.h nlist.h pthread.h pwd.h signal.h sys/mman.h sys/resource.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/utsname.h sys/wait.h termios.h time.h utime.h windows.h winsock.h sched.h]) +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]) dnl ** check if it is safe to include both and AC_HEADER_TIME @@ -1128,7 +739,7 @@ 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]) +AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale]) AC_TRY_RUN([ #include @@ -1149,36 +760,6 @@ AC_CHECK_DECLS([ctime_r], , , #define _POSIX_C_SOURCE 199506L #include ]) -dnl ** For ghc/rts/gmp: -AC_CHECK_FUNCS([getpagesize]) - -dnl ** check whether this machine has gmp3 installed -AC_CHECK_LIB(gmp, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp, - AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp3, - HaveLibGmp=NO; LibGmp=not-installed)) - if test $HaveLibGmp = YES; then - AC_DEFINE([HAVE_LIB_GMP], [1], [Define to 1 if GMP library is installed.]) - fi; -AC_SUBST(HaveLibGmp) -AC_SUBST(LibGmp) - -dnl ** (Mac OS X only: check for GMP.framework) -HaveFrameworkGMP=NO -case $HostPlatform in -*-apple-darwin) - AC_MSG_CHECKING([for GMP.framework]) - save_libs="$LIBS" - LIBS="-framework GMP" - AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,) - if test $HaveFrameworkGMP = YES; then - AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).]) - fi; - LIBS="$save_libs" - AC_MSG_RESULT([$HaveFrameworkGMP]) - ;; -esac -AC_SUBST(HaveFrameworkGMP) - dnl ** check for mingwex library AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO) AC_SUBST(HaveLibMingwEx) @@ -1187,23 +768,21 @@ if test $HaveLibMingwEx = YES ; then AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.]) fi -if test "$HaveLibGmp" = "NO"; then -if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then -AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).]) -fi; -fi; +dnl ** check for math library +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) +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 liberty installed (used for debugging) dnl the order of these tests matters: bfd needs liberty AC_CHECK_LIB(iberty, xmalloc) -AC_CHECK_LIB(bfd, bfd_init) - -dnl ** check for math library -AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno]) -if test x"$fp_libm_not_needed" = xdunno; then - AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=]) -fi -AC_SUBST([LIBM]) +AC_CHECK_LIB(bfd, bfd_uncompress_section_contents) dnl ################################################################ dnl Check for libraries @@ -1241,6 +820,7 @@ FP_LEADING_UNDERSCORE dnl ** check for ld, whether it has an -x option, and if it is GNU ld FP_PROG_LD_X FP_PROG_LD_IS_GNU +FP_PROG_LD_BUILD_ID dnl ** check for Apple-style dead-stripping support dnl (.subsections-via-symbols assembler directive) @@ -1258,6 +838,11 @@ AC_COMPILE_IFELSE( dnl *** check for GNU non-executable stack note support (ELF only) dnl (.section .note.GNU-stack,"",@progbits) +dnl This test doesn't work with "gcc -g" in gcc 4.4 (GHC trac #3889: +dnl Error: can't resolve `.note.GNU-stack' {.note.GNU-stack section} - `.Ltext0' {.text section} +dnl so we empty CFLAGS while running this test +CFLAGS2="$CFLAGS" +CFLAGS= AC_MSG_CHECKING(for GNU non-executable stack support) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])], @@ -1266,6 +851,9 @@ AC_COMPILE_IFELSE( [Define to 1 if GNU non-executable stack notes are supported.]) ], [AC_MSG_RESULT(no)]) +CFLAGS="$CFLAGS2" + +FP_VISIBILITY_HIDDEN dnl ** check for librt AC_CHECK_LIB(rt, clock_gettime) @@ -1286,6 +874,10 @@ AC_TRY_LINK_FUNC(printf\$LDBLStub, [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).]) ]) +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 @@ -1304,6 +896,8 @@ 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 @@ -1311,7 +905,7 @@ else fi AC_SUBST(HavePapi) -if test "$DIR_DOCBOOK_XSL" = "" || +if test "$HAVE_DOCBOOK_XSL" = "NO" || test "$XsltprocCmd" = "" then BUILD_DOCBOOK_HTML=NO @@ -1331,7 +925,17 @@ fi AC_SUBST(BUILD_DOCBOOK_PS) AC_SUBST(BUILD_DOCBOOK_PDF) -AC_CONFIG_FILES([mk/config.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml]) +LIBRARY_VERSION(base) +LIBRARY_VERSION(Cabal) +LIBRARY_VERSION(ghc-prim) +LIBRARY_ghc_VERSION="$ProjectVersion" +AC_SUBST(LIBRARY_ghc_VERSION) + +if grep ' ' compiler/ghc.cabal.in 2>&1 >/dev/null; then + AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them]) +fi + +AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal 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 @@ -1381,10 +985,12 @@ echo ["\ which is version : $GccVersion ld : $LdCmd - Happy : $HappyCmd - Alex : $AlexCmd + Happy : $HappyCmd ($HappyVersion) + Alex : $AlexCmd ($AlexVersion) Python : $PythonCmd - Perl : $PerlCmd"] + Perl : $PerlCmd + dblatex : $DblatexCmd + xsltproc : $XsltprocCmd"] if test "$HSCOLOUR" = ""; then echo [" @@ -1396,11 +1002,10 @@ echo ["\ "] fi -echo "Building DocBook HTML documentation: $BUILD_DOCBOOK_HTML" -echo "Building DocBook PS documentation: $BUILD_DOCBOOK_PS" -echo "Building DocBook PDF documentation: $BUILD_DOCBOOK_PDF" - -echo ["Building shared libraries : $BuildSharedLibs"] +echo ["\ + Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML + Building DocBook PS documentation : $BUILD_DOCBOOK_PS + Building DocBook PDF documentation : $BUILD_DOCBOOK_PDF"] echo ["---------------------------------------------------------------------- "]