echo ''
echo "*** The top of your build tree is: $hardtop"
-AC_SUBST(hardtop)
+# subst of hardtop is done below after we've computed hardtop_plat.
dnl--------------------------------------------------------------------
dnl * Choose host(/target/build) platform
# We also record the architecture, vendor, and operating system (OS)
# separately.
case $HostPlatform in
-alpha-dec-osf[[12]]*)
+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
HostVendor_CPP='dec'
HostOS_CPP='osf1'
;;
-alpha-dec-osf[[34]]*)
+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
HostVendor_CPP='dec'
HostOS_CPP='osf3'
;;
-alpha-unknown-linux)
+alpha*-unknown-linux)
HostPlatform=alpha-unknown-linux
TargetPlatform=alpha-unknown-linux
BuildPlatform=alpha-unknown-linux
HostVendor_CPP='unknown'
HostOS_CPP='linux'
;;
-alpha-unknown-freebsd*)
+alpha*-unknown-freebsd*)
HostPlatform=alpha-unknown-freebsd
TargetPlatform=alpha-unknown-freebsd
BuildPlatform=alpha-unknown-freebsd
HostOS_CPP='mingw32'
exeext='.exe'
;;
+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'
+ ;;
m68k-next-nextstep2)
HostPlatform_CPP='m68k_next_nextstep2'
HostArch_CPP='m68k'
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-sun-sunos4*)
HostPlatform=m68k-sun-sunos4
TargetPlatform=m68k-sun-sunos4 #hack
HostVendor_CPP='ibm'
HostOS_CPP='aix'
;;
-powerpc-apple-macosx*)
- HostPlatform=powerpc-apple-macosx
- TargetPlatform=powerpc-apple-macosx #hack
- BuildPlatform=powerpc-apple-macosx #hack
- HostPlatform_CPP='powerpc_apple_macosx'
- HostArch_CPP='powerpc'
- HostVendor_CPP='apple'
- HostOS_CPP='macosx'
- ;;
+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'
+ ;;
sparc-sun-sunos4*)
HostPlatform=sparc-sun-sunos4
TargetPlatform=sparc-sun-sunos4 #hack
AC_SUBST(exeext)
+#
+# The native format for 'hardtop' (i.e., right kind of slashes on a Win32 box).
+# (but with b-slashes being escaped).
+case $HostPlatform in
+ i386-unknown-mingw32 | i386-unknown-cygwin32)
+ # get rid off /cygdrive/ prefix
+ hardtop=`echo ${hardtop} | sed -e 's%^/cygdrive/\(.\)/%\1:/%' `
+ hardtop_plat=`cygpath -w ${hardtop} | sed -e 's@\\\\@\\\\\\\\@g' `
+ ;;
+ *)
+ hardtop_plat=${hardtop}
+ ;;
+esac
+AC_SUBST(hardtop)
+AC_SUBST(hardtop_plat)
+
dnl --------------------------------------------------------------
dnl * Project specific configuration options
dnl --------------------------------------------------------------
dnl ** What command to use to compile compiler sources ?
dnl --------------------------------------------------------------
-if test "$GHC" = ""; then
- AC_PATH_PROG(GHC,ghc)
-fi
AC_ARG_WITH(ghc,
[ --with-ghc=<haskell compiler>
Use a command different from 'ghc' to compile GHC-specific Haskell code
(including GHC itself).
],
-[WithGhc="$withval"],
-[WithGhc=$GHC]
+[ WithGhc="$withval" ],
+[
+ if test "$GHC" = ""; then
+ AC_PATH_PROG(GHC,ghc)
+ fi
+ WithGhc=$GHC
+]
)
AC_SUBST(WithGhc)
[ --with-gcc=<gcc command>
Use a different command instead of 'gcc' for the GNU C compiler.
],
-[WhatGccIsCalled="$withval"],
+[WhatGccIsCalled="$withval"
+ CC="$withval"],
[WhatGccIsCalled="gcc"]
)
AC_SUBST(WhatGccIsCalled)
)
AC_SUBST(BootingFromHc)
+dnl ** Booting from unregisterised .hc files?
+dnl --------------------------------------------------------------
+AC_ARG_ENABLE(hc-boot-unregisterised,
+[ --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.)
+],
+[BootingFromUnregisterisedHc=YES],
+[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 ** Enable multi-thread friendly RTS?
+dnl --------------------------------------------------------------
+AC_ARG_ENABLE(threaded-rts,
+[ --enable-threaded-rts
+ Support better interop with OS threads.
+],
+[ThreadedRts=YES],
+[ThreadedRts=NO]
+)
+AC_SUBST(ThreadedRts)
dnl ** Enable the construction of Win32 DLLs?
dnl --------------------------------------------------------------
AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
fi
-dnl ** Building a Win32-friendlier compiler?
+dnl ** Enable the building of the ObjectIO?
dnl --------------------------------------------------------------
-AC_ARG_ENABLE(minimal-unix-deps,
-[ --enable-minimal-unix-deps
- Build a compiler that minimizes dependencies on Unix-like tools
- under Win32, allowing the user to operate the compiler without
- having to install Cygwin toolchain (say). (You still need
- that toolchain to build GHC from sources though).
+AC_ARG_ENABLE(objectio,
+[ --enable-objectio
+ Build ObjectIO, a portable GUI library for Haskell.
+ (This option is only relevant when libraries are built.)
],
-[MinimalUnixDeps=YES],
-[MinimalUnixDeps=NO]
+[GhcLibsWithObjectIO=YES],
+[GhcLibsWithObjectIO=NO]
)
-AC_SUBST(MinimalUnixDeps)
+AC_SUBST(GhcLibsWithObjectIO)
dnl ** Enable the building of the OpenGL/GLUT binding in hslibs?
dnl --------------------------------------------------------------
AC_ARG_ENABLE(hopengl,
[ --enable-hopengl
Build HOpenGL, a Haskell binding for OpenGL/GLUT, too.
- (This option is only relevant when hslibs are built.)
+ (NOTE: Work in progress, currently only GLUT is supported!)
],
[GhcLibsWithHOpenGL=YES],
[GhcLibsWithHOpenGL=NO]
dnl ** does #! path/to/perl work? (sometimes it's too long...)
FPTOOLS_SHEBANG_PERL
+dnl ** check for Python
+AC_PATH_PROG(PythonCmd,python)
dnl ** look for GCC and find out which version
dnl Figure out which C compiler to use. Gcc is preferred.
AC_PROG_CC
FPTOOLS_HAVE_GCC
-dnl ** does the C compiler support option -mwin32 ?
-FPTOOLS_CC_MWIN32
-
dnl ** figure out how to invoke cpp directly (gcc -E is no good)
AC_PROG_CPP
-case $HostOS_CPP in
-cygwin32|mingw32)
- STD_CC_OPTS="-O -mno-cygwin $CC_MWIN32_FLAG"
- CPP="$CPP $STD_CC_OPTS"
- CFLAGS="$STD_CC_OPTS $CFLAGS"
- CPPFLAGS="$STD_CC_OPTS $CPPFLAGS"
- ;;
-*)
- STD_CC_OPTS=""
- ;;
-esac
-SRC_CC_OPTS="-O $STD_CC_OPTS"
-AC_SUBST(SRC_CC_OPTS)
+dnl ** Without optimization some INLINE trickery fails for GHCi
+SRC_CC_OPTS="-O"
+dnl ** Try to add -mno-cygwin to the C compiler options for mingw32 targets
+if test x"$TargetOS_CPP" = x"mingw32"; then
+ FPTOOLS_CC_FLAG(-mno-cygwin,CC_SUPPORTS_MNO_CYGWIN)
+ SRC_CC_OPTS="$CC_SUPPORTS_MNO_CYGWIN $SRC_CC_OPTS"
+ CPPFLAGS="$CC_SUPPORTS_MNO_CYGWIN $CPPFLAGS"
+fi
+AC_SUBST(SRC_CC_OPTS)
dnl ** figure out how to do context diffs
FPTOOLS_PROG_DIFF
dnl ** Find find command (for Win32's benefit)
-AC_PATH_PROG(FindCmd, find)
+FPTOOLS_FIND_FIND
dnl ** look for a decent parser generator (bison preferred)
dnl (FPTOOLS_PROG_YACCY is AC_PROG_YACC, but with some extra testing
dnl ** how to invoke `ar' and `ranlib'
FPTOOLS_PROG_AR_AND_RANLIB
-
dnl ** Check to see whether ln -s works
AC_PROG_LN_S
dnl ** check for time command
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)
dnl ** check for jade/openjade & determine a working catalog
AC_PATH_PROGS(JadeCmd,openjade jade,jade)
FPTOOLS_DOCBOOK_CATALOG(Catalog, $JadeCmd, docs/fptools-both.dsl,
- /etc/sgml/catalog /etc/sgml.catalog /usr/share/sgml/CATALOG.docbkdsl $hardtop/glafp-utils/docbook/CATALOG*)
+ /etc/sgml/catalog /etc/sgml.catalog /usr/share/sgml/CATALOG.docbkdsl /usr/local/share/sgml/catalog glafp-utils/docbook/CATALOG*)
if test -z "$Catalog"; then
AC_MSG_RESULT([Warning: You will not be able to build the documentation.])
fi
+case $Catalog in
+ yes) # assume it is provided by other means (e.g., SGML_CATALOG_FILES env var).
+ Catalog=
+ ;;
+ glafp*)
+ case $HostOS_CPP in
+ mingw32)
+ Catalog=`cygpath -w $hardtop/$Catalog`
+ ;;
+ *) Catalog=$hardtop/$Catalog
+ ;;
+ esac
+ ;;
+esac
AC_SUBST(Catalog)
compress_nm=`basename $CompressCmd`
AC_SUBST(CompressCmd)
AC_SUBST(CompressSuffix)
+AC_ARG_ENABLE(src-tree-happy,
+[ --enable-src-tree-happy
+ Build and use source tree (fptools/happy) version of happy.
+],
+[UseSrcTreeHappy=YES],
+[UseSrcTreeHappy=NO]
+)
dnl ** check for installed happy binary + version
dnl (don't do it if we're booting from .hc files though.)
if test "$BootingFromHc" = "NO"; then
FPTOOLS_HAPPY
fi;
+AC_ARG_ENABLE(src-tree-haddock,
+[ --enable-src-tree-haddock
+ Build and use source tree (fptools/haddock) version of haddock.
+],
+[UseSrcTreeHaddock=YES],
+[UseSrcTreeHaddock=NO]
+)
+dnl ** check for installed haddock
+FPTOOLS_HADDOCK
+
dnl --------------------------------------------------
dnl ### program checking section ends here ###
dnl --------------------------------------------------
AC_HEADER_STDC
dnl ** check for specific header (.h) files that we are interested in
-AC_CHECK_HEADERS(Files.h arpa/inet.h assert.h console.h ctype.h dirent.h errno.h fcntl.h float.h ftw.h grp.h ieee754.h inttypes.h malloc.h memory.h nlist.h pascal.h pwd.h sgtty.h siginfo.h signal.h stat.h stdint.h stdlib.h stdarg.h string.h sys/fault.h sys/file.h sys/ioctl.h sys/limits.h sys/mman.h sys/param.h sys/procfs.h sys/resource.h sys/signal.h sys/socket.h netdb.h netinet/in.h netinet/tcp.h sys/stat.h sys/syscall.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/types.h sys/un.h sys/utsname.h sys/vadvise.h sys/wait.h termio.h termios.h time.h types.h unistd.h utime.h values.h vfork.h bfd.h winsock.h)
+AC_CHECK_HEADERS(Files.h arpa/inet.h assert.h console.h ctype.h dirent.h errno.h fcntl.h float.h ftw.h grp.h ieee754.h inttypes.h limits.h malloc.h memory.h nlist.h pascal.h pwd.h sgtty.h siginfo.h signal.h stat.h stdint.h stdlib.h stddef.h stdarg.h string.h sys/fault.h sys/file.h sys/ioctl.h sys/limits.h sys/mman.h sys/param.h sys/procfs.h sys/resource.h sys/signal.h sys/socket.h netdb.h netinet/in.h netinet/tcp.h sys/stat.h sys/syscall.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/types.h sys/un.h sys/utsname.h sys/vadvise.h sys/wait.h termio.h termios.h time.h types.h unistd.h utime.h values.h vfork.h bfd.h winsock.h pthread.h sys/uio.h)
AC_CHECK_HEADER(readline/readline.h, HaveReadlineReadlineH=YES, HaveReadlineReadlineH=NO)
AC_CHECK_HEADER(readline/history.h, HaveReadlineHistoryH=YES, HaveReadlineHistoryH=NO)
dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix)
AC_CHECK_HEADER(malloc.h,AC_CHECK_FUNCS(valloc))
+dnl ** check for POSIX regex
+HavePosixRegex=NO
+AC_CHECK_HEADER(regex.h,AC_CHECK_FUNC(regcomp, HavePosixRegex=YES))
+AC_SUBST(HavePosixRegex)
+
dnl ** how do we get a timezone name, and UTC offset ?
AC_STRUCT_TIMEZONE
dnl ** do we have long longs?
FPTOOLS_C_LONG_LONG
+dnl ** check what fields struct msghdr contains
+FPTOOLS_MSGHDR_MSG_ACCRIGHTS
+FPTOOLS_MSGHDR_MSG_CONTROL
+
dnl ** what are the sizes of various types
dnl (these must come before GHC_CHECK_ALIGNMENT)
AC_CHECK_SIZEOF(char, 1)
FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32)
FPTOOLS_CHECK_HTYPE(clock_t)
FPTOOLS_CHECK_HTYPE(time_t)
+FPTOOLS_CHECK_HTYPE(dev_t, Word32)
+FPTOOLS_CHECK_HTYPE(ino_t)
+FPTOOLS_CHECK_HTYPE(mode_t)
+FPTOOLS_CHECK_HTYPE(off_t)
+FPTOOLS_CHECK_HTYPE(pid_t)
+FPTOOLS_CHECK_HTYPE(gid_t)
+FPTOOLS_CHECK_HTYPE(uid_t)
+FPTOOLS_CHECK_HTYPE(cc_t)
+FPTOOLS_CHECK_HTYPE(speed_t)
+FPTOOLS_CHECK_HTYPE(tcflag_t)
+FPTOOLS_CHECK_HTYPE(blkcnt_t)
+FPTOOLS_CHECK_HTYPE(nlink_t)
+FPTOOLS_CHECK_HTYPE(ssize_t)
dnl ** Map OpenGL data types to Haskell types
if test $GhcLibsWithHOpenGL = YES ; then
dnl ** check for specific library functions that we are interested in
-AC_CHECK_FUNCS(access ftime getclock getpagesize getrusage gettimeofday mktime mprotect readlink setitimer stat symlink sysconf timelocal times vadvise vfork)
+AC_CHECK_FUNCS(access ftime getclock getpagesize getrusage gettimeofday mktime mprotect readlink setitimer stat lstat symlink sysconf timelocal times vadvise vfork localtime_r gmtime_r readdir_r)
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))
+ HaveLibGmp=NO; LibGmp=not-installed))
AC_SUBST(HaveLibGmp)
AC_SUBST(LibGmp)
+dnl ** check for mingwex library
+AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
+AC_SUBST(HaveLibMingwEx)
+
+if test $HaveLibMingwEx = YES ; then
+ AC_DEFINE(HAVE_MINGWEX)
+fi
+
+if test "$HaveLibGmp" = "NO"; then
+if test "$HostArch_CPP" = "ia64"; then
+AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64).])
+fi;
+fi;
+
dnl ** check whether this machine has GNU regex in libc.
FPTOOLS_REGEX_IN_LIBC
*) AC_PATH_XTRA() ;;
esac
+FPTOOLS_HAVE_OPENGL
+
dnl ################################################################
dnl Check for libraries
dnl ################################################################
+dnl ** check for libdl & RTLD_NEXT
+
AC_CHECK_LIB(dl, dlopen,
[HaveLibDL=YES
AC_DEFINE(HAVE_LIBDL)
AC_CHECK_FUNCS(dlopen)
AC_SUBST(HaveLibDL)
+dnl ** sometimes RTLD_NEXT is hidden in #ifdefs we really don't wan to set
+AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
+AC_EGREP_CPP(yes,
+[
+ #include <dlfcn.h>
+ #ifdef RTLD_NEXT
+ yes
+ #endif
+], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RTLDNEXT)
+ HaveRtldNext=YES
+], [
+ AC_MSG_RESULT(no)
+ HaveRtldNext=NO
+ ])
+AC_SUBST(HaveRtldNext)
+
+dnl ** RTLD_LOCAL isn't available on cygwin or openbsd
+AC_MSG_CHECKING(for RTLD_LOCAL from dlfcn.h)
+AC_EGREP_CPP(yes,
+[
+ #include <dlfcn.h>
+ #ifdef RTLD_LOCAL
+ yes
+ #endif
+], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RTLDLOCAL)
+ HaveRtldLocal=YES
+], [
+ AC_MSG_RESULT(no)
+ HaveRtldLocal=NO
+ ])
+AC_SUBST(HaveRtldLocal)
+
+dnl ** RTLD_GLOBAL isn't available on openbsd
+AC_MSG_CHECKING(for RTLD_GLOBAL from dlfcn.h)
+AC_EGREP_CPP(yes,
+[
+ #include <dlfcn.h>
+ #ifdef RTLD_GLOBAL
+ yes
+ #endif
+], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RTLDGLOBAL)
+ HaveRtldGlobal=YES
+], [
+ AC_MSG_RESULT(no)
+ HaveRtldGlobal=NO
+ ])
+AC_SUBST(HaveRtldGlobal)
+
+dnl ** RTLD_NOW isn't available on openbsd
+AC_MSG_CHECKING(for RTLD_NOW from dlfcn.h)
+AC_EGREP_CPP(yes,
+[
+ #include <dlfcn.h>
+ #ifdef RTLD_NOW
+ yes
+ #endif
+], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RTLDNOW)
+ HaveRtldNow=YES
+], [
+ AC_MSG_RESULT(no)
+ HaveRtldNow=NO
+ ])
+AC_SUBST(HaveRtldNow)
+
FPTOOLS_CHECK_LIB_NOWARN(m, atan)
dnl --------------------------------------------------
dnl ** are we big endian?
AC_C_BIGENDIAN
# Allay users' general fear of warnings of any kind.
-errprint((fptools configure script wizard sez: "don't worry, the above warning is harmless (to us.)")
+errprint(fptools configure script wizard sez: autoconf-2.50 or later should produce no warnings
+)
+errprint(if you are using 2.13 or earlier, you may get a (harmless) warning message.
)
dnl ** check for leading underscores in symbol names
dnl ** code before data?
FPTOOLS_CODE_BEFORE_DATA
+dnl ** check for ld, and whether ld has -x option
+AC_PATH_PROG(LdCmdRaw, ld)
+case $HostOS_CPP in
+ mingw32) LdCmd=`cygpath -w ${LdCmdRaw} | sed -e 's@\\\\@/@g' `
+ ;;
+ *) LdCmd=${LdCmdRaw}
+ ;;
+esac
+AC_SUBST(LdCmd)
+FPTOOLS_LD_X
AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )