-dnl $Id: aclocal.m4,v 1.108 2002/12/04 23:41:15 dons 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
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
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"
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)
+ 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, glut glut32, have_glut=yes, have_glut=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],