# First off, a distrib sanity check..
AC_INIT(mk/config.mk.in)
+dnl * Declare subdirectories that have a private configure script
+dnl
+dnl After the toplevel configuration is complete, the script will recurse into
+dnl these subdirectories (the use of cache values makes repeated checks cheap)
+dnl (We probably have to add hslibs/{OpenGL,GLUT} here later...)
+AC_CONFIG_SUBDIRS(ghc)
+
# -------------------------------------------------------------------------
# Prepare to generate the following header files
#
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'
+ ;;
hppa1.1-hp-hpux*)
HostPlatform=hppa1.1-hp-hpux # canonicalise for our purposes (hack)
TargetPlatform=hppa1.1-hp-hpux
HostVendor_CPP='unknown'
HostOS_CPP='linux'
;;
-i[[3456]]86-*-freebsd3*) # FreeBSD 3.0+ uses ELF
- HostPlatform=i386-unknown-freebsd3 # hack again
- TargetPlatform=i386-unknown-freebsd3
- BuildPlatform=i386-unknown-freebsd3
- HostPlatform_CPP='i386_unknown_freebsd3'
+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='freebsd3'
+ HostOS_CPP='freebsd'
;;
i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out
HostPlatform=i386-unknown-freebsd2 # hack again
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
HostVendor_CPP='unknown'
HostOS_CPP='solaris2'
;;
-i[[3456]]86-*-cygwin32*)
+i[[3456]]86-*-cygwin*)
HostPlatform=i386-unknown-cygwin32 # hack again
TargetPlatform=i386-unknown-cygwin32
BuildPlatform=i386-unknown-cygwin32
dnl ** What command to use to compile compiler sources ?
dnl --------------------------------------------------------------
-AC_ARG_WITH(ghc-hc,
-[ --with-ghc-hc=<haskell compiler>
- Use a command different from 'ghc-2.10' to compile up the GHC compiler sources.
- (no claims currently made that this will work with a compiler other than a
- recent version of GHC, but you could always try...)
+if test "$GHC" = ""; then
+ AC_PATH_PROG(GHC,ghc)
+fi
+
+AC_ARG_WITH(hc,
+[ --with-hc=<haskell compiler>
+ Use a command different from 'ghc' to compile generic Haskell code.
],
-[WithGhcHc="$withval"],
-[WithGhcHc="ghc"]
+[WithHc="$withval"],
+[WithHc=$GHC]
)
-AC_SUBST(WithGhcHc)
+AC_SUBST(WithHc)
+
+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]
+)
+AC_SUBST(WithGhc)
+
+if test "$WithGhc" != ""; then
+ FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
+ AC_SUBST(GhcVersion)dnl
+ AC_SUBST(GhcMajVersion)dnl
+ AC_SUBST(GhcMinVersion)dnl
+ AC_SUBST(GhcPatchLevel)dnl
+fi
+
+AC_PATH_PROGS(NHC,nhc nhc98)
+AC_PATH_PROG(HBC,hbc)
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
fi
+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.)
+],
+[GhcLibsWithHOpenGL=YES],
+[GhcLibsWithHOpenGL=NO]
+)
+AC_SUBST(GhcLibsWithHOpenGL)
+
+dnl ** Use a specific version of the GLUT API
+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"
+
+
dnl --------------------------------------------------------------
dnl End of configure script option section
dnl --------------------------------------------------------------
dnl ** does #! work?
AC_SYS_INTERPRETER()
-dnl ** look for `perl', but watch out for version 4.035
-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
+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_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...)
FPTOOLS_SHEBANG_PERL
dnl ** figure out how to invoke cpp directly (gcc -E is no good)
AC_PROG_CPP
-FPTOOLS_PROG_GNUCPP
dnl ** figure out how to do context diffs
FPTOOLS_PROG_DIFF
+dnl ** Find find command (for Win32's benefit)
+AC_PATH_PROG(FindCmd, find)
dnl ** look for a decent parser generator (bison preferred)
dnl (FPTOOLS_PROG_YACCY is AC_PROG_YACC, but with some extra testing
dnl ** check for gzip/compress
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 /usr/share/sgml/CATALOG.docbkdsl $hardtop/glafp-utils/docbook/CATALOG*)
+if test -z "$Catalog"; then
+ AC_MSG_RESULT([Warning: You will not be able to build the documentation.])
+fi
+AC_SUBST(Catalog)
+
compress_nm=`basename $CompressCmd`
if test x"$compress_nm" = xgzip; then
CompressCmd="$CompressCmd -d"
AC_HEADER_STDC
dnl ** check for specific header (.h) files that we are interested in
-AC_CHECK_HEADERS(Files.h assert.h console.h ctype.h dirent.h errno.h fcntl.h float.h ftw.h grp.h ieee754.h malloc.h memory.h nlist.h pascal.h pwd.h sgtty.h siginfo.h signal.h stat.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 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/utsname.h sys/vadvise.h sys/wait.h termio.h termios.h time.h types.h unistd.h utime.h values.h vfork.h readline/readline.h bfd.h)
+AC_CHECK_HEADERS(Files.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 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/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_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_DEFINE(HAVE_READLINE_HEADERS,1)
+else
+ HaveReadlineHeaders=NO
+ AC_DEFINE(HAVE_READLINE_HEADERS,0)
+fi
+AC_SUBST(HaveReadlineHeaders)
dnl ** check for DOS include files
AC_CHECK_HEADERS(dos.h conio.h io.h std.h)
dnl ** check for Windows include files
AC_CHECK_HEADERS(windows.h)
+dnl ** check for OpenGL include files
+AC_CHECK_HEADERS(GL/gl.h)
+
dnl ** check if it is safe to include both <time.h> and <sys/time.h>
AC_HEADER_TIME
dnl ** does struct stat contain st_blksize?
AC_STRUCT_ST_BLKSIZE
+dnl ** do we have long longs?
+FPTOOLS_C_LONG_LONG
+
dnl ** what are the sizes of various types
dnl (these must come before GHC_CHECK_ALIGNMENT)
-AC_CHECK_SIZEOF(unsigned int,4)
-AC_CHECK_SIZEOF(float, 4)
-AC_CHECK_SIZEOF(double, 8)
-AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(void *, 4)
+AC_CHECK_SIZEOF(char, 1)
+AC_CHECK_SIZEOF(double, 8)
+AC_CHECK_SIZEOF(float, 4)
+AC_CHECK_SIZEOF(int, 4)
+AC_CHECK_SIZEOF(long, 4)
+if test "$fptools_cv_have_long_long" = yes; then
+AC_CHECK_SIZEOF(long long, 8)
+fi
+AC_CHECK_SIZEOF(short, 2)
+AC_CHECK_SIZEOF(unsigned char, 1)
+AC_CHECK_SIZEOF(unsigned int, 4)
+AC_CHECK_SIZEOF(unsigned long, 4)
+if test "$fptools_cv_have_long_long" = yes; then
+AC_CHECK_SIZEOF(unsigned long long, 8)
+fi
+AC_CHECK_SIZEOF(unsigned short, 2)
+AC_CHECK_SIZEOF(void *, 4)
dnl ** what are alignment constraints on various types
-FPTOOLS_CHECK_ALIGNMENT(unsigned int) dnl redundant but harmless
-FPTOOLS_CHECK_ALIGNMENT(long)
-FPTOOLS_CHECK_ALIGNMENT(float)
+FPTOOLS_CHECK_ALIGNMENT(char)
FPTOOLS_CHECK_ALIGNMENT(double)
-
-dnl ** do we have long longs?
-FPTOOLS_C_LONG_LONG
+FPTOOLS_CHECK_ALIGNMENT(float)
+FPTOOLS_CHECK_ALIGNMENT(int)
+FPTOOLS_CHECK_ALIGNMENT(long)
+if test "$fptools_cv_have_long_long" = yes; then
+FPTOOLS_CHECK_ALIGNMENT(long long)
+fi
+FPTOOLS_CHECK_ALIGNMENT(short)
+FPTOOLS_CHECK_ALIGNMENT(unsigned char)
+FPTOOLS_CHECK_ALIGNMENT(unsigned int)
+FPTOOLS_CHECK_ALIGNMENT(unsigned long)
+if test "$fptools_cv_have_long_long" = yes; then
+FPTOOLS_CHECK_ALIGNMENT(unsigned long long)
+fi
+FPTOOLS_CHECK_ALIGNMENT(unsigned short)
+FPTOOLS_CHECK_ALIGNMENT(void *)
+
+dnl ** map standard C types and ISO types to Haskell types
+FPTOOLS_CHECK_HTYPE(char)
+FPTOOLS_CHECK_HTYPE(signed char)
+FPTOOLS_CHECK_HTYPE(unsigned char)
+FPTOOLS_CHECK_HTYPE(short)
+FPTOOLS_CHECK_HTYPE(unsigned short)
+FPTOOLS_CHECK_HTYPE(int)
+FPTOOLS_CHECK_HTYPE(unsigned int)
+FPTOOLS_CHECK_HTYPE(long)
+FPTOOLS_CHECK_HTYPE(unsigned long)
+if test "$fptools_cv_have_long_long" = yes; then
+FPTOOLS_CHECK_HTYPE(long long)
+FPTOOLS_CHECK_HTYPE(unsigned long long)
+fi
+FPTOOLS_CHECK_HTYPE(float)
+FPTOOLS_CHECK_HTYPE(double)
+FPTOOLS_CHECK_HTYPE(ptrdiff_t)
+FPTOOLS_CHECK_HTYPE(size_t)
+FPTOOLS_CHECK_HTYPE(wchar_t)
+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)
+
+dnl ** Map OpenGL data types to Haskell types
+if test $GhcLibsWithHOpenGL = YES ; then
+FPTOOLS_CHECK_HTYPE(GLboolean)
+FPTOOLS_CHECK_HTYPE(GLbyte)
+FPTOOLS_CHECK_HTYPE(GLubyte)
+FPTOOLS_CHECK_HTYPE(GLshort)
+FPTOOLS_CHECK_HTYPE(GLushort)
+FPTOOLS_CHECK_HTYPE(GLint)
+FPTOOLS_CHECK_HTYPE(GLuint)
+FPTOOLS_CHECK_HTYPE(GLsizei)
+FPTOOLS_CHECK_HTYPE(GLenum)
+FPTOOLS_CHECK_HTYPE(GLbitfield)
+FPTOOLS_CHECK_HTYPE(GLfloat)
+FPTOOLS_CHECK_HTYPE(GLclampf)
+FPTOOLS_CHECK_HTYPE(GLdouble)
+FPTOOLS_CHECK_HTYPE(GLclampd)
+fi
dnl ** can we open files in binary mode?
FPTOOLS_O_BINARY
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)
-dnl ** check whether this machine has gmp2 installed
-AC_CHECK_LIB(gmp, mpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
- AC_CHECK_LIB(gmp2, mpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp2,
+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))
AC_SUBST(HaveLibGmp)
AC_SUBST(LibGmp)
+dnl ** check whether this machine has GNU regex in libc.
+FPTOOLS_REGEX_IN_LIBC
+
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 readline, for Hugs and hslibs' Readline
+dnl ncurses supersedes termcap and curses, but for compatibility,
+dnl we have to check for all...
+AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
+ AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
+ AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
+ HaveLibTermcap=NO; LibTermcap=not-installed)))
+
+if test $HaveLibTermcap = YES ; then
+ LIBS="-l$LibTermcap $LIBS"
+ AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
+fi
+
+if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
+ AC_DEFINE(HAVE_READLINE_LIBS,1)
+ LibsReadline="-lreadline -l$LibTermcap"
+else
+ AC_DEFINE(HAVE_READLINE_LIBS,0)
+ LibsReadline=
+fi
+AC_SUBST(LibsReadline)
+
dnl ################################################################
dnl Check for libraries
dnl ################################################################
FPTOOLS_CHECK_LIB_NOWARN(m, atan)
dnl --------------------------------------------------
+dnl * test for GTK+
+dnl --------------------------------------------------
+
+AC_PATH_PROGS(GTK_CONFIG, gtk-config gtk12-config)
+if test "$GTK_CONFIG" != ""; then
+ AC_CACHE_CHECK([for version of GTK+], fptools_cv_gtk_version, [
+ fptools_cv_gtk_version=`$GTK_CONFIG --version`
+ ])
+ GTK_VERSION=$fptools_cv_gtk_version
+else
+ GTK_VERSION=
+fi
+
+case $fptools_cv_gtk_version in
+ 1.[[23]].*) ;;
+ *) AC_MSG_WARN([GTK+ not usable; need at least version 1.2])
+ GTK_CONFIG=
+ ;;
+esac
+
+AC_SUBST(GTK_CONFIG)
+AC_SUBST(GTK_VERSION)
+
+dnl --------------------------------------------------
dnl * Miscellaneous feature tests
dnl --------------------------------------------------
errprint((fptools configure script wizard sez: "don't worry, the above warning is harmless (to us.)")
)
-dnl ** determine the return type of signal()
-AC_TYPE_SIGNAL
-
dnl ** check for leading underscores in symbol names
FPTOOLS_UNDERSCORE