-dnl $Id: aclocal.m4,v 1.99 2002/04/10 09:41:16 simonmar Exp $
+dnl $Id: aclocal.m4,v 1.113 2003/01/27 16:41:18 simonmar Exp $
dnl
dnl Extra autoconf macros for the Glasgow fptools
dnl
dnl
dnl Check for Happy and version. If we're building GHC, then we need
-dnl at least Happy version 1.9. If there's no installed Happy, we look
+dnl at least Happy version 1.13. If there's no installed Happy, we look
dnl for a happy source tree and point the build system at that instead.
dnl
AC_DEFUN(FPTOOLS_HAPPY,
changequote([, ])dnl
])
if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
- FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
- [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
+ FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
+ [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
fi
HappyVersion=$fptools_cv_happy_version;
AC_SUBST(HappyVersion)
+])
-# 1.9 and later is required, assume that we can use
-# the "-agc" options.
-HappyOpts="-agc"
-
-FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-gt,[1.11],
- [HappyOpts=-agcs])
-
-AC_SUBST(HappyOpts)
+dnl
+dnl Check for Haddock and version. If there's no installed Haddock, we look
+dnl for a haddock source tree and point the build system at that instead.
+dnl
+AC_DEFUN(FPTOOLS_HADDOCK,
+[
+if test -d $srcdir/haddock; then
+ SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
+fi
+if test x"$UseSrcTreeHaddock" = xYES; then
+ HaddockCmd=$SrcTreeHaddockCmd
+else
+ AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
+fi
+dnl Darn, I forgot to make Haddock print out its version number when
+dnl invoked with -v. We could try generating some HTML and grepping
+dnl through that to find the version number, but I think we'll make
+dnl do without it for now.
])
dnl
fptools_cv_have_gcc='no'
else
changequote(, )dnl
- is_gcc_v1="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 2000 \\\>= \1 \\\* 1000 + \2/g' `"
+ gcc_version_str="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1\.\2/g' `"
changequote([, ])dnl
fptools_cv_have_gcc='yes'
- if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
+ FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
fptools_cv_have_gcc='no'
echo ""
echo "your gcc version appears to be ..."
echo "gcc prior to 2.0 and have never worked with ghc."
echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
AC_MSG_ERROR([gcc 1.X has never been supported])
- fi
+ )
fi
])
HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
AC_SUBST(HaveGcc)
])
+dnl
+dnl Some OSs (Mandrake Linux, in particular) configure GCC with
+dnl -momit-leaf-frame-pointer on by default. If this is the case, we
+dnl need to turn it off for mangling to work. The test is currently a bit
+dnl crude, using only the version number of gcc.
+dnl
+AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
+[AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
+[
+ fptools_cv_gcc_needs_no_omit_lfptr='no'
+ FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
+ fptools_cv_gcc_needs_no_omit_lfptr='yes')
+])
+if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
+ AC_DEFINE(HAVE_GCC_MNO_OMIT_LFPTR)
+fi
+])
+
dnl Small feature test for perl version. Assumes PerlCmd
dnl contains path to perl binary
dnl
if grep "version 5" conftest.out >/dev/null 2>&1; then
:
else
- if grep "v5.6" conftest.out >/dev/null 2>&1; then
- :
- else
- if grep "version 6" conftest.out >/dev/null 2>&1; then
- :
- else
- echo "Your version of perl probably won't work."
- fi
- fi
+ if grep "v5.6" conftest.out >/dev/null 2>&1; then
+ :
+ else
+ if grep "v5.8" conftest.out >/dev/null 2>&1; then
+ :
+ else
+ if grep "version 6" conftest.out >/dev/null 2>&1; then
+ :
+ else
+ echo "Your version of perl probably won't work."
+ fi
+ fi
+ fi
fi
rm -fr conftest*
])
dnl
AC_DEFUN(FPTOOLS_CHECK_CCONST,
[
-eval "def_name=CCONST_$1"
eval "cv_name=ac_cv_cconst_$1"
AC_MSG_CHECKING(value of $1)
AC_CACHE_VAL($cv_name,
eval "$cv_name=-1")])dnl
eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
AC_MSG_RESULT($fptools_check_cconst_result)
-AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
+AC_DEFINE_UNQUOTED(CCONST_$1, $fptools_check_cconst_result)
unset fptools_check_cconst_result
])
fi
])
-dnl *** Which one comes first, .text or .data? ***
-dnl
-AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
-[AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
-[AC_TRY_RUN([
-int f() { return 1; }
-int i;
-int main() { return ((char*)&f > (char*)&i); }
-
-],
-fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
-if test "$fptools_cv_code_bef_data" = yes; then
- AC_DEFINE(CODE_BEFORE_DATA)
-fi
-])
-
dnl *** Helper function **
dnl
AC_DEFUN(FPTOOLS_IN_SCOPE,
[AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
])
-dnl *** What's the end-of-text-section marker called? ***
-dnl
-AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
-[AC_CACHE_CHECK([for end of text section marker],
- [fptools_cv_end_of_text],
- [fptools_cv_end_of_text=""
- not_done=1
- for i in data_start _data_start etext _etext __etext; do
- FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
- if test "$fptools_end_of_text" = yes; then
- fptools_cv_end_of_text=$i
- not_done=0
- break
- fi
- done
- if test "$not_done" = 1; then
- FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
- if test "$fptools_end_of_text" = yes; then
- fptools_cv_end_of_text="etext"
- fi
- fi])
- if test -n "$fptools_cv_end_of_text"; then
- AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
- else
- AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
- fi
- AC_CACHE_CHECK([for end of text section marker declaration],
- [fptools_cv_end_of_text_decl],
- [fptools_cv_end_of_text_decl=""
- not_done=1
- for i in data_start _data_start etext _etext __etext; do
- FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
- if test "$fptools_end_of_text_decl" = yes; then
- fptools_cv_end_of_text_decl=$i
- not_done=0
- break
- fi
- done
- if test "$not_done" = 1; then
- FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
- if test "$fptools_end_of_text_decl" = yes; then
- fptools_cv_end_of_text_decl="etext asm(\"etext\")"
- fi
- fi])
- if test -n "$fptools_cv_end_of_text_decl"; then
- AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
- else
- AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
- fi
-])
-
-dnl *** What's the end-of-data-section marker called? ***
-dnl
-AC_DEFUN([FPTOOLS_END_DATA_SECTION],
-[AC_CACHE_CHECK([for end of data section marker],
- [fptools_cv_end_of_data],
- [fptools_cv_end_of_data=""
- not_done=1
- for i in end _end __end; do
- FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
- if test "$fptools_end_of_data" = yes; then
- fptools_cv_end_of_data=$i
- not_done=0
- break
- fi
- done
- if test "$not_done" = 1; then
- FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
- if test "$fptools_end_of_data" = yes; then
- fptools_cv_end_of_data="end"
- fi
- fi])
- if test -n "$fptools_cv_end_of_data"; then
- AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
- else
- AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
- fi
- AC_CACHE_CHECK([for end of data section marker declaration],
- [fptools_cv_end_of_data_decl],
- [fptools_cv_end_of_data_decl=""
- not_done=1
- for i in end _end __end; do
- FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
- if test "$fptools_end_of_data_decl" = yes; then
- fptools_cv_end_of_data_decl=$i
- not_done=0
- break
- fi
- done
- if test "$not_done" = 1; then
- FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
- if test "$fptools_end_of_data_decl" = yes; then
- fptools_cv_end_of_data_decl="end asm(\"end\")"
- fi
- fi])
- if test -n "$fptools_cv_end_of_data_decl"; then
- AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
- else
- AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
- fi
-])
-
dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
])
dnl ######################################################################
-dnl NOTE: Because of portability issues between different autoconf
-dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
-dnl Furthermore, caching has been completely rewritten.
+dnl Some notes about the heavily changed OpenGL test below:
+dnl * Caching has been completely rewritten, but is still no perfect yet.
+dnl * Version detection for GL and GLU has been added.
dnl ######################################################################
dnl ########################### -*- Mode: M4 -*- #######################
dnl @synopsis FPTOOLS_HAVE_OPENGL
dnl
dnl Search for OpenGL. We search first for Mesa (a GPL'ed version of
-dnl OpenGL) before a vendor's version of OpenGL, unless we were
-dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
+dnl OpenGL) before a vendor's version of OpenGL if we were specifically
+dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
dnl
dnl The four "standard" OpenGL libraries are searched for: "-lGL",
dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
AC_REQUIRE([AC_PATH_XTRA])
AC_REQUIRE([FPTOOLS_CHECK_LIBM])
-dnl Check for Mesa first, unless we were asked not to.
-dnl AC_HELP_STRING([--with-Mesa],
-dnl [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
-dnl with_Mesa_help_string)
-dnl AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
- AC_ARG_ENABLE(Mesa, [ --with-Mesa Prefer the Mesa library over a vendors native OpenGL library (default=no)], use_Mesa=$enableval, use_Mesa=no)
+dnl Check for Mesa first if we were asked to.
+ AC_ARG_ENABLE(Mesa,
+[ --enable-mesa
+ Prefer Mesa over a vendor's native OpenGL library (default=no)
+],
+ use_Mesa=$enableval,
+ use_Mesa=no)
if test x"$use_Mesa" = xyes; then
GL_search_list="MesaGL GL opengl32"
AC_LANG_C
dnl If we are running under X11 then add in the appropriate libraries.
- if ! test x"$no_x" = xyes; then
+ if test x"$no_x" != xyes; then
dnl Add everything we need to compile and link X programs to GL_CFLAGS
dnl and GL_X_LIBS.
- GL_CFLAGS="$X_CFLAGS"
+ GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
fi
GL_save_CPPFLAGS="$CPPFLAGS"
GL_save_LIBS="$LIBS"
LIBS="$GL_X_LIBS"
- FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
- FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
- FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no)
- FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut glut32, have_glut=yes, have_glut=no)
+ dnl Including <GL/glut.h> instead of plain <GL/gl.h> avoids problems on
+ dnl platforms like WinDoze where special headers like <windows.h> or
+ dnl some macro trickery would be needed
+ FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glEnd, $GL_search_list, have_GL=yes, have_GL=no)
+
+ dnl TODO: The tests for GL features should better be cascaded and the
+ dnl results should be cached. A new macro would be helpful here.
+
+ AC_MSG_CHECKING(glTexSubImage1D)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [glTexSubImage1D(GL_TEXTURE_1D,0,0,2,GL_INTENSITY,GL_BYTE,(void*)0)],
+ fptools_gl_texsubimage1d=yes,
+ fptools_gl_texsubimage1d=no);
+ AC_MSG_RESULT($fptools_gl_texsubimage1d)
+
+ AC_MSG_CHECKING(glDrawRangeElements)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [glDrawRangeElements(GL_QUADS,0,0,0,GL_UNSIGNED_BYTE,(void*)0)],
+ fptools_gl_drawrangeelements=yes,
+ fptools_gl_drawrangeelements=no);
+ AC_MSG_RESULT($fptools_gl_drawrangeelements)
+
+ AC_MSG_CHECKING(glActiveTexture)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [glActiveTexture(GL_TEXTURE1)],
+ fptools_gl_activetexture=yes,
+ fptools_gl_activetexture=no);
+ AC_MSG_RESULT($fptools_gl_activetexture)
+
+ AC_MSG_CHECKING(glMultiDrawArrays)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [glMultiDrawArrays(GL_TRIANGLES, (GLint*)0, (GLsizei*)0, 0)],
+ fptools_gl_multidrawarrays=yes,
+ fptools_gl_multidrawarrays=no);
+ AC_MSG_RESULT($fptools_gl_multidrawarrays)
+
+ if test x"$fptools_gl_texsubimage1d" != xyes; then
+ fptools_gl_version=1.0
+ else
+ if test x"$fptools_gl_drawrangeelements" != xyes; then
+ fptools_gl_version=1.1
+ else
+ if test x"$fptools_gl_activetexture" != xyes; then
+ fptools_gl_version=1.2
+ else
+ if test x"$fptools_gl_multidrawarrays" != xyes; then
+ fptools_gl_version=1.3
+ else
+ fptools_gl_version=1.4
+ fi
+ fi
+ fi
+ fi
+ echo "It looks like GL version ${fptools_gl_version}"
+
+ dnl TODO: Cache the results of the tests for the imaging subset.
+
+ AC_MSG_CHECKING(EXT_blend_color)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [glBlendColorEXT((GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0,(GLclampf)0.0)],
+ hopengl_EXT_blend_color=yes,
+ hopengl_EXT_blend_color=no);
+ AC_MSG_RESULT($hopengl_EXT_blend_color)
+
+ AC_MSG_CHECKING(EXT_blend_minmax)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [glBlendEquationEXT(GL_FUNC_ADD_EXT)],
+ hopengl_EXT_blend_minmax=yes,
+ hopengl_EXT_blend_minmax=no);
+ AC_MSG_RESULT($hopengl_EXT_blend_minmax)
+
+ AC_MSG_CHECKING(EXT_blend_subtract)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [glBlendEquationEXT(GL_FUNC_SUBTRACT_EXT)],
+ hopengl_EXT_blend_subtract=yes,
+ hopengl_EXT_blend_subtract=no);
+ AC_MSG_RESULT($hopengl_EXT_blend_subtract)
+
+ FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>], gluNewQuadric, $GLU_search_list, have_GLU=yes, have_GLU=no)
+
+ dnl TODO: Cascade and cache...
+
+ AC_MSG_CHECKING(gluGetString)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [gluGetString(GLU_EXTENSIONS)],
+ fptools_glu_getstring=yes,
+ fptools_glu_getstring=no);
+ AC_MSG_RESULT($fptools_glu_getstring)
+
+ AC_MSG_CHECKING(gluTessEndPolygon)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [gluTessEndPolygon((GLUtesselator*)0)],
+ fptools_glu_tessendpolygon=yes,
+ fptools_glu_tessendpolygon=no);
+ AC_MSG_RESULT($fptools_glu_tessendpolygon)
+
+ AC_MSG_CHECKING(gluUnProject4)
+ AC_TRY_LINK([#include <GL/glut.h>],
+ [gluUnProject4(0.0,0.0,0.0,0.0,(GLdouble*)0,(GLdouble*)0,(GLint*)0,0.0,0.0,(GLdouble*)0,(GLdouble*)0,(GLdouble*)0,(GLdouble*)0)],
+ fptools_glu_unproject4=yes,
+ fptools_glu_unproject4=no);
+ AC_MSG_RESULT($fptools_glu_unproject4)
+
+ if test x"$fptools_glu_getstring" != xyes; then
+ fptools_glu_version=1.0
+ else
+ if test x"$fptools_glu_tessendpolygon" != xyes; then
+ fptools_glu_version=1.1
+ else
+ if test x"$fptools_glu_unproject4" != xyes; then
+ fptools_glu_version=1.2
+ else
+ fptools_glu_version=1.3
+ fi
+ fi
+ fi
+ echo "It looks like GLU version ${fptools_glu_version}"
+
+ FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>], glXWaitX, $GLX_search_list, have_GLX=yes, have_GLX=no)
+ FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop, glut32 glut, have_glut=yes, have_glut=no)
if test -n "$LIBS"; then
- GL_LIBS="$LIBS"
+ GL_LIBS="$LDFLAGS $LIBS"
else
- GL_LIBS=
+ GL_LIBS="$LDFLAGS"
GL_CFLAGS=
fi
dnl
dnl Check to see whether CC (gcc) supports a particular option.
-dnl
+dnl
AC_DEFUN(FPTOOLS_CC_FLAG,
[
AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
$2="";
fi;
])
+
+dnl
+dnl Check to see whether 'struct msghdr' contains msg_control
+dnl
+AC_DEFUN(FPTOOLS_MSGHDR_MSG_CONTROL,
+[AC_CACHE_CHECK([for msg_control in struct msghdr], fptools_cv_struct_msghdr_msg_control,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/uio.h>
+#include <sys/socket.h>], [struct msghdr m; m.msg_control;],
+fptools_cv_struct_msghdr_msg_control=yes, fptools_cv_struct_msghdr_msg_control=no)])
+if test $fptools_cv_struct_msghdr_msg_control = yes; then
+ AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)
+fi
+AC_SUBST(HAVE_MSGHDR_MSG_CONTROL)dnl
+])
+
+dnl
+dnl Check to see whether 'struct msghdr' contains msg_accrights
+dnl
+AC_DEFUN(FPTOOLS_MSGHDR_MSG_ACCRIGHTS,
+[AC_CACHE_CHECK([for msg_accrights in struct msghdr], fptools_cv_struct_msghdr_msg_accrights,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/uio.h>
+#include <sys/socket.h>], [struct msghdr m; m.msg_accrights;],
+fptools_cv_struct_msghdr_msg_accrights=yes, fptools_cv_struct_msghdr_msg_accrights=no)])
+if test $fptools_cv_struct_msghdr_msg_accrights = yes; then
+ AC_DEFINE(HAVE_MSGHDR_MSG_ACCRIGHTS)
+fi
+AC_SUBST(HAVE_MSGHDR_MSG_ACCRIGHTS)dnl
+])
+