# First off, a distrib sanity check..
AC_INIT(mk/config.mk.in)
+dnl * We require autoconf version 2.53 due to the use of AC_SYS_LARGEFILE
+AC_PREREQ(2.52)
+
dnl * Declare subdirectories that have a private configure script
dnl
dnl After the toplevel configuration is complete, the script will recurse into
exit 1
fi
-#
-# Remove common automounter nonsense + convert from UNC to DOS style paths
-# (UNC awareness isn't quite there yet for cygwin32-beta18 and consituent tools.)
-#
-hardtop=`pwd`
-hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|' | sed 's|^/grasp_tmp|/local/grasp_tmp|' | sed 's|^//\(.\)/|\1:/|' `
-
-echo ''
-echo "*** The top of your build tree is: $hardtop"
-# subst of hardtop is done below after we've computed hardtop_plat.
-
dnl--------------------------------------------------------------------
dnl * Choose host(/target/build) platform
dnl--------------------------------------------------------------------
HostVendor_CPP='unknown'
HostOS_CPP='openbsd'
;;
+m68k-apple-netbsd*)
+ HostPlatform=m68k-apple-netbsd
+ TargetPlatform=m68k-apple-netbsd
+ BuildPlatform=m68k-apple-netbsd
+ HostPlatform_CPP='m68k_apple_netbsd'
+ HostArch_CPP='m68k'
+ HostVendor_CPP='apple'
+ HostOS_CPP='netbsd'
+ ;;
m68k-sun-sunos4*)
HostPlatform=m68k-sun-sunos4
TargetPlatform=m68k-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).
+dnl --------------------------------------------------------------
+dnl * Calculate absolute path to build tree
+dnl --------------------------------------------------------------
+
+AC_MSG_CHECKING(for path to top of build tree)
+
+hardtop=`pwd`
+
+dnl Remove common automounter nonsense
+dnl
+hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|' | sed 's|^//\(.\)/|\1:/|' `
+
+dnl Find 'hardtop_plat', the native format for 'hardtop' (i.e., right kind of \dnl slashes on a Win32 box, but with b-slashes being escaped).
+dnl
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' `
+ # convert $hardtop to a path that mingw will understand too
+ cyghardtop=${hardtop}
+ hardtop=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@/@g'`
+ hardtop_plat=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@\\\\\\\\@g'`
;;
*)
hardtop_plat=${hardtop}
AC_SUBST(hardtop)
AC_SUBST(hardtop_plat)
+AC_MSG_RESULT(${hardtop})
+
dnl --------------------------------------------------------------
dnl * Project specific configuration options
dnl --------------------------------------------------------------
Use a different command instead of 'gcc' for the GNU C compiler.
],
[WhatGccIsCalled="$withval"
+ if test "x$HostPlatform" = "xi386-unknown-mingw32"; then
+ # Canonicalise to <drive>:/path/to/gcc
+ withval=`cygpath -w ${withval} | sed -e 's@\\\\@/@g' `
+ fi;
CC="$withval"],
[WhatGccIsCalled="gcc"]
)
fi;
fi;
+dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
+if test "$BootingFromHc" = "NO" -a "$WithGhc" = "" -a -d "$srcdir/ghc"; then
+AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
+fi;
dnl ** Enable multi-thread friendly RTS?
dnl --------------------------------------------------------------
)
AC_SUBST(GhcLibsWithHOpenGL)
-dnl ** Use a specific version of the GLUT API
+dnl ** .NET interop support?
dnl --------------------------------------------------------------
-AC_ARG_WITH(glut-api,
-[ --with-glut-api=<version>
- Use a specific version of the GLUT API when building HOpenGL.
-])
-test -n "$with_glut_api" && CPPFLAGS="$CPPFLAGS -DGLUT_API_VERSION=$with_glut_api"
-
-
-dnl ** Use a specific version of the GLUT API
-dnl --------------------------------------------------------------
-AC_ARG_WITH(glut-xlib,
-[ --with-glut-xlib=<version>
- Use a specific version of the GLUT Xlib implementation when building HOpenGL.
-])
-test -n "$with_glut_xlib" && CPPFLAGS="$CPPFLAGS -DGLUT_XLIB_IMPLEMENTATION=$with_glut_xlib"
-
-
-
+AC_ARG_ENABLE(dotnet,
+[ --enable-dotnet
+ Build .NET interop layer.
+],
+[DotnetSupport=YES; AC_DEFINE(WANT_DOTNET_SUPPORT)],
+[DotnetSupport=NO]
+)
+AC_SUBST(DotnetSupport)
dnl --------------------------------------------------------------
dnl End of configure script option section
dnl
AC_PROG_CC
FPTOOLS_HAVE_GCC
+FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR
dnl ** figure out how to invoke cpp directly (gcc -E is no good)
AC_PROG_CPP
AC_SUBST(CompressCmd)
AC_SUBST(CompressSuffix)
+dnl ** check for ghc-pkg command
+changequote(, )dnl
+ghc_pkg_guess=`echo $WithGhc | sed 's@ghc\([^/\\]*\)$@ghc-pkg\1@'`
+changequote([, ])dnl
+if $ghc_pkg_guess -l >/dev/null 2>/dev/null; then
+ GhcPkgCmd=$ghc_pkg_guess
+ AC_MSG_NOTICE([using $ghc_pkg_guess for ghc-pkg])
+else
+ AC_PATH_PROG(GhcPkgCmd,ghc-pkg)
+fi
+
+AC_ARG_WITH(greencard,
+[ --with-greencard=<greencard compiler>
+ Use a command different from 'green-card' to compile GreenCard files
+],
+[
+GreencardCmd=$withval;
+FPTOOLS_GREENCARD(3.00)
+]
+)
+
AC_ARG_ENABLE(src-tree-happy,
[ --enable-src-tree-happy
Build and use source tree (fptools/happy) version of happy.
dnl ** check for full ANSI header (.h) files
AC_HEADER_STDC
+dnl ** Enable large file support. NB. do this before testing the type of
+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(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 utime.h values.h vfork.h bfd.h winsock.h pthread.h sys/uio.h)
-AC_CHECK_HEADER(unistd.h,AC_CHECK_FUNC(lchown))
+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(unistd.h,[AC_CHECK_FUNCS(lchown)])
-AC_CHECK_HEADER(readline/readline.h, HaveReadlineReadlineH=YES, HaveReadlineReadlineH=NO)
-AC_CHECK_HEADER(readline/history.h, HaveReadlineHistoryH=YES, HaveReadlineHistoryH=NO)
+AC_CHECK_HEADER(readline/readline.h, [HaveReadlineReadlineH=YES], [HaveReadlineReadlineH=NO])
+AC_CHECK_HEADER(readline/history.h, [HaveReadlineHistoryH=YES], [HaveReadlineHistoryH=NO])
if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then
HaveReadlineHeaders=YES
AC_CHECK_HEADERS(dlfcn.h dl.h)
dnl ** check for farcalloc (in bcc)
-AC_CHECK_HEADER(alloc.h,AC_CHECK_FUNCS(farcalloc))
+AC_CHECK_HEADER(alloc.h,[AC_CHECK_FUNCS(farcalloc)])
dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix)
-AC_CHECK_HEADER(malloc.h,AC_CHECK_FUNCS(valloc))
+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_CHECK_HEADER(regex.h,[AC_CHECK_FUNC(regcomp, [HavePosixRegex=YES])])
AC_SUBST(HavePosixRegex)
dnl ** how do we get a timezone name, and UTC offset ?
FPTOOLS_CHECK_HTYPE(blkcnt_t)
FPTOOLS_CHECK_HTYPE(nlink_t)
FPTOOLS_CHECK_HTYPE(ssize_t)
+FPTOOLS_CHECK_HTYPE(rlim_t)
dnl ** Map OpenGL data types to Haskell types
if test $GhcLibsWithHOpenGL = YES ; then
AC_CHECK_FUNCS(snprintf _snprintf )
AC_CHECK_FUNCS(popen _popen )
AC_CHECK_FUNCS(pclose _pclose )
+AC_CHECK_FUNCS(setenv unsetenv)
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 lstat symlink sysconf timelocal times vadvise vfork localtime_r gmtime_r readdir_r)
+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 getgrgid_r getgrnam_r getpwuid_r getpwnam_r)
+
+dnl ** Solaris2 needs additionl flag for getpw*_r()
+case "$TargetPlatform" in
+ *-solaris2*)
+ unix_SRC_HSC2HS_OPTS="-D_POSIX_PTHREAD_SEMANTICS"
+ AC_SUBST(unix_SRC_HSC2HS_OPTS)
+ ;;
+esac
dnl ** check whether this machine has gmp3 installed
AC_CHECK_LIB(gmp, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
AC_SUBST(HaveLibGmp)
AC_SUBST(LibGmp)
+dnl ** (Mac OS X only: check for HaskellSupport.framework)
+HaveFrameworkHaskellSupport=NO
+if test $HostPlatform = "powerpc-apple-darwin"; then
+ AC_MSG_CHECKING([for HaskellSupport.framework])
+ save_libs="$LIBS"
+ LIBS="-framework HaskellSupport"
+ AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkHaskellSupport=YES,)
+ if test $HaveFrameworkHaskellSupport = YES; then
+ AC_DEFINE(HAVE_FRAMEWORK_HASKELLSUPPORT)
+ fi;
+ LIBS="$save_libs"
+ AC_MSG_RESULT([$HaveFrameworkHaskellSupport])
+fi;
+AC_SUBST(HaveFrameworkHaskellSupport)
+
dnl ** check for mingwex library
AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
AC_SUBST(HaveLibMingwEx)
FPTOOLS_CHECK_LIBM()
AC_SUBST(LIBM)
-case $HostOS_CPP in
-cygwin32) ;;
-mingw32) ;;
-*) AC_PATH_XTRA() ;;
-esac
+dnl ** check for X Window System
+AC_PATH_XTRA()
+dnl ** check for OpenGL/GLUT/GLX include paths and libraries
+if test $GhcLibsWithHOpenGL = YES ; then
FPTOOLS_HAVE_OPENGL
+fi
dnl ################################################################
dnl Check for libraries
dnl ** check for libdl & RTLD_NEXT
-AC_CHECK_LIB(dl, dlopen,
- [HaveLibDL=YES
- AC_DEFINE(HAVE_LIBDL)
- LIBS="$LIBS -ldl"],
- [HaveLibDL=NO])
-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)
+dnl (Mac OS X only) ... but don't check if we already have the
+dnl HaskellSupport.framework
+
+if test $HaveFrameworkHaskellSupport = YES; then
+ HaveLibDL=NO
+ HaveRtldNext=NO
+ HaveRtldLocal=YES
+ AC_DEFINE(HAVE_RTLDLOCAL)
+ HaveRtldGlobal=YES
+ AC_DEFINE(HAVE_RTLDGLOBAL)
+ HaveRtldNow=YES
+ AC_DEFINE(HAVE_RTLDNOW)
+ AC_SUBST(HaveLibDL)
+ AC_SUBST(HaveRtldNext)
+ AC_SUBST(HaveRtldLocal)
+ AC_SUBST(HaveRtldGlobal)
+ AC_SUBST(HaveRtldNow)
+else
+ AC_CHECK_LIB(dl, dlopen,
+ [HaveLibDL=YES
+ AC_DEFINE(HAVE_LIBDL)
+ LIBS="$LIBS -ldl"],
+ [HaveLibDL=NO])
+ 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)
+fi
FPTOOLS_CHECK_LIB_NOWARN(m, atan)
+dnl ---------- usleep ----------
+dnl --- stolen from guile configure ---
+dnl --- FIXME: /usr/include/unistd.h can't be right?
+
+### On some systems usleep has no return value. If it does have one,
+### we'd like to return it; otherwise, we'll fake it.
+AC_CACHE_CHECK([return type of usleep], cv_func_usleep_return_type,
+ [AC_EGREP_HEADER(changequote(<, >)<void[ ]+usleep>changequote([, ]),
+ /usr/include/unistd.h,
+ [cv_func_usleep_return_type=void],
+ [cv_func_usleep_return_type=int])])
+case "$cv_func_usleep_return_type" in
+ "void" )
+ AC_DEFINE(USLEEP_RETURNS_VOID, 1,
+ [Define if the system headers declare usleep to return void.])
+ ;;
+esac
+
+dnl --------------------------------------------------
+dnl * test for in_addr_t
+dnl --------------------------------------------------
+AC_MSG_CHECKING(for in_addr_t in netinet/in.h)
+AC_EGREP_HEADER(in_addr_t, netinet/in.h,
+ [ AC_DEFINE(HAVE_IN_ADDR_T) AC_MSG_RESULT(yes) ],
+ AC_MSG_RESULT(no))
+
+dnl --------------------------------------------------
+dnl * test for Linux sendfile(2)
+dnl --------------------------------------------------
+AC_MSG_CHECKING(for sendfile in sys/sendfile.h)
+AC_EGREP_HEADER(sendfile, sys/sendfile.h,
+ [ AC_DEFINE(HAVE_LINUX_SENDFILE) AC_MSG_RESULT(yes) ],
+ AC_MSG_RESULT(no))
+
+dnl --------------------------------------------------
+dnl * test for BSD sendfile(2)
+dnl --------------------------------------------------
+AC_MSG_CHECKING(for sendfile in sys/socket.h)
+AC_EGREP_HEADER(sendfile, sys/socket.h,
+ [ AC_DEFINE(HAVE_BSD_SENDFILE) AC_MSG_RESULT(yes) ],
+ AC_MSG_RESULT(no))
+
dnl --------------------------------------------------
dnl * test for GTK+
dnl --------------------------------------------------
dnl ** are we big endian?
AC_C_BIGENDIAN
-# Allay users' general fear of warnings of any kind.
-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
FPTOOLS_UNDERSCORE
-dnl ** how is the end of text section signalled?
-FPTOOLS_END_TEXT_SECTION
-
-dnl ** how is the end of data section signalled?
-FPTOOLS_END_DATA_SECTION
-
-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
#endif
], AC_DEFINE(HAVE_SIGPOLL) haveSIGPOLL=yes, haveSIGPOLL=no)
AC_MSG_RESULT([$haveSIGPOLL])
+
+AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
+AC_EGREP_CPP(we_have_that_sysconf_thing,
+[
+#include <unistd.h>
+#ifdef _SC_GETGR_R_SIZE_MAX
+we_have_that_sysconf_thing
+#endif
+],
+[AC_MSG_RESULT([yes])
+AC_DEFINE(HAVE_SC_GETGR_R_SIZE_MAX)],
+[AC_MSG_RESULT([no])])
+
+AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
+AC_EGREP_CPP(we_have_that_sysconf_thing,
+[
+#include <unistd.h>
+#ifdef _SC_GETPW_R_SIZE_MAX
+we_have_that_sysconf_thing
+#endif
+],
+[AC_MSG_RESULT([yes])
+AC_DEFINE(HAVE_SC_GETPW_R_SIZE_MAX)],
+[AC_MSG_RESULT([no])])
+
AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )