X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=configure.in;h=e19c938e6be86f1f4114a008caf90b2e77e0d014;hp=ed320f1cc887bae989f00a939e7c4949dbfe0b1e;hb=135045b28ff8a8d9b0b5f5cce0373387f541f600;hpb=55fc808cfc260c94cb01ce05805ec3f489e59eb4 diff --git a/configure.in b/configure.in index ed320f1..e19c938 100644 --- a/configure.in +++ b/configure.in @@ -16,6 +16,9 @@ dnl # 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 @@ -35,17 +38,6 @@ if test x"$srcdir" != 'x.' ; then 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" -AC_SUBST(hardtop) - dnl-------------------------------------------------------------------- dnl * Choose host(/target/build) platform dnl-------------------------------------------------------------------- @@ -75,7 +67,7 @@ exeext='' # 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 @@ -84,7 +76,7 @@ alpha-dec-osf[[12]]*) 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 @@ -93,7 +85,7 @@ alpha-dec-osf[[34]]*) HostVendor_CPP='dec' HostOS_CPP='osf3' ;; -alpha-unknown-linux) +alpha*-unknown-linux*) HostPlatform=alpha-unknown-linux TargetPlatform=alpha-unknown-linux BuildPlatform=alpha-unknown-linux @@ -102,7 +94,7 @@ 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 @@ -202,12 +194,15 @@ i[[3456]]86-*-mingw32*) HostVendor_CPP='unknown' HostOS_CPP='mingw32' exeext='.exe' - # We assume you're using mingw32 via the gcc that comes - # with cygwin, and not the native port, so let's augment - # the gcc command-line used here with -mno-cygwin -mwin32 - # to arrange for good things to happen. - CFLAGS="-mno-cygwin -mwin32 $CFLAGS" - CPPFLAGS="-mno-cygwin -mwin32 $CPPFLAGS" + ;; +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' @@ -230,6 +225,24 @@ i[[3456]]86-next-nextstep3) 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-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 @@ -272,15 +285,15 @@ powerpc-ibm-aix*) 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 @@ -343,6 +356,36 @@ dnl AC_SUBST(TargetVendor_CPP) AC_SUBST(exeext) 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) + # 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} + ;; +esac +AC_SUBST(hardtop) +AC_SUBST(hardtop_plat) + +AC_MSG_RESULT(${hardtop}) + +dnl -------------------------------------------------------------- dnl * Project specific configuration options dnl -------------------------------------------------------------- dnl What follows is a bunch of options that can either be configured @@ -352,17 +395,19 @@ dnl use either is considered a Feature. 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= 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) @@ -392,7 +437,12 @@ AC_ARG_WITH(gcc, [ --with-gcc= Use a different command instead of 'gcc' for the GNU C compiler. ], -[WhatGccIsCalled="$withval"], +[WhatGccIsCalled="$withval" + if test "x$HostPlatform" = "xi386-unknown-mingw32"; then + # Canonicalise to :/path/to/gcc + withval=`cygpath -w ${withval} | sed -e 's@\\\\@/@g' ` + fi; + CC="$withval"], [WhatGccIsCalled="gcc"] ) AC_SUBST(WhatGccIsCalled) @@ -409,6 +459,40 @@ AC_ARG_ENABLE(hc-boot, ) 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 ** 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_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 -------------------------------------------------------------- @@ -434,35 +518,38 @@ if test x"$EnableWin32DLLs" = "xYES" ; then AC_DEFINE(HAVE_WIN32_DLL_SUPPORT) fi +dnl ** Enable the building of the ObjectIO? +dnl -------------------------------------------------------------- +AC_ARG_ENABLE(objectio, +[ --enable-objectio + Build ObjectIO, a portable GUI library for Haskell. +], +[GhcLibsWithObjectIO=YES], +[GhcLibsWithObjectIO=NO] +) +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.) + Build HOpenGL, a Haskell binding for OpenGL/GLUT. ], [GhcLibsWithHOpenGL=YES], [GhcLibsWithHOpenGL=NO] ) 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= - 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= - 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 @@ -479,12 +566,12 @@ AC_SYS_INTERPRETER() dnl ** look for `perl', but only in /bin on Windows 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 + 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 ;; *) AC_PATH_PROG(PerlCmd,perl) @@ -501,6 +588,8 @@ esac 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. @@ -508,30 +597,37 @@ dnl If gcc, make sure it's at least 2.1 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 -case $HostOS_CPP in -mingw32) - CPP="$CPP -mno-cygwin -mwin32" - ;; -esac + +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 on the suitability of the 'yacc' returned.) FPTOOLS_PROG_YACCY -dnl ** Find lex command (lex or flex) and library (-ll or -lfl) -dnl ( not that we care about the latter, see mk/config.mk.in ) -AC_PROG_LEX - +dnl ** Find lex command (lex or flex) - *doesn't* use autoconf's +dnl AC_PROG_LEX, since it doesn't actually check whether 'lex' +dnl exists if 'flex' doesn't. +AC_PROG_LEX_STRICT dnl ** figure out how to do a BSD-ish install AC_PROG_INSTALL @@ -542,7 +638,6 @@ AC_DEFINE(HAVE_BIN_SH) dnl ** how to invoke `ar' and `ranlib' FPTOOLS_PROG_AR_AND_RANLIB - dnl ** Check to see whether ln -s works AC_PROG_LN_S @@ -554,7 +649,6 @@ AC_PATH_PROG(SedCmd,sed) 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) @@ -565,10 +659,24 @@ AC_PATH_PROGS(CompressCmd,gzip compress,gzip) 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` @@ -581,12 +689,50 @@ fi 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= + 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. +], +[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 -------------------------------------------------- @@ -598,11 +744,16 @@ dnl ### checking the state of the local header files and syscalls ### 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 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 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 @@ -629,10 +780,15 @@ dnl dynamic loading include files 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_SUBST(HavePosixRegex) dnl ** how do we get a timezone name, and UTC offset ? AC_STRUCT_TIMEZONE @@ -650,6 +806,10 @@ AC_STRUCT_ST_BLKSIZE 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) @@ -712,6 +872,20 @@ dnl Int32 is a HACK for non-ISO C compilers 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) +FPTOOLS_CHECK_HTYPE(rlim_t) dnl ** Map OpenGL data types to Haskell types if test $GhcLibsWithHOpenGL = YES ; then @@ -806,18 +980,56 @@ AC_CHECK_FUNCS(vsnprintf _vsnprintf) 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 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 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_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 ** (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) + +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 @@ -864,20 +1076,163 @@ dnl ** check for math library FPTOOLS_CHECK_LIBM() AC_SUBST(LIBM) +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 ################################################################ -AC_CHECK_LIB(dl, dlopen, - [HaveLibDL=YES - AC_DEFINE(HAVE_LIBDL) - LIBS="$LIBS -ldl"], - [HaveLibDL=NO]) -AC_CHECK_FUNCS(dlopen) -AC_SUBST(HaveLibDL) +dnl ** check for libdl & RTLD_NEXT + +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 + #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 + #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 + #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 + #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(<, >)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 -------------------------------------------------- @@ -909,6 +1264,9 @@ dnl -------------------------------------------------- dnl ** can we get alloca? AC_FUNC_ALLOCA +dnl ** Working vfork? +AC_FUNC_VFORK + dnl ** determine whether or not const works AC_C_CONST @@ -917,20 +1275,52 @@ AC_C_PROTOTYPES 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.)") -) dnl ** check for leading underscores in symbol names FPTOOLS_UNDERSCORE -dnl ** how is the end of text section signalled? -FPTOOLS_END_TEXT_SECTION +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_MSG_CHECKING([for SIGPOLL]) +AC_EGREP_CPP(we_have_sigpoll, +[#include +#ifdef SIGPOLL +we_have_sigpoll +#endif +], AC_DEFINE(HAVE_SIGPOLL) haveSIGPOLL=yes, haveSIGPOLL=no) +AC_MSG_RESULT([$haveSIGPOLL]) -dnl ** how is the end of data section signalled? -FPTOOLS_END_DATA_SECTION +AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX]) +AC_EGREP_CPP(we_have_that_sysconf_thing, +[ +#include +#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])]) -dnl ** code before data? -FPTOOLS_CODE_BEFORE_DATA +AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX]) +AC_EGREP_CPP(we_have_that_sysconf_thing, +[ +#include +#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 )