"Matthew D. Langston" <[EMAIL PROTECTED]> writes:
> The macro MDL_HAVE_OPENGL is what you want. It is in the Autoconf
> Macro Archive at http://peti.cys.de/autoconf-archive/ in the file
> mdl_have_opengl.m4. It should do everything you want. If it
> doesn't, please let me know (or better yet, send me a patch) as I am
> the original author if it.
Your OpenGL detection macro is seriously flawed in a number of
ways. You should for instance look at the way you use AC_CACHE_CHECK
(hint: there should not be any sideeffects within a cached check).
I started working on fixing the problems of your macro, but I gave up,
the overall structure of the macro is just not flexible enough. So I
wrote my own instead. I've attached it to this mail for your perusal.
Its not perfect, but it seems to work well on the platforms it has
been tested (Linux, HPUX, IRIX, Solaris, BeOS), within the context of
the configure process for the Coin� library.
BTW, some major difference from your macro:
* it handles GL and GLU (or Mesa and MesaGLU) exclusively (I've got a
separate macro for GLX)
* it assumes that all the necessary libraries GL depends on has been
configured to be covered by the environment variables LDFLAGS and
LIBS _before_ the macro is run
Regards,
Morten
� <http://www.coin3d.org>
dnl Usage:
dnl SIM_CHECK_OPENGL([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
dnl
dnl Try to find an OpenGL development system, either a native
dnl implementation or the OpenGL-compatible Mesa libraries. If
dnl it is found, these shell variables are set:
dnl
dnl $sim_ac_gl_cppflags (extra flags the compiler needs for OpenGL/Mesa)
dnl $sim_ac_gl_ldflags (extra flags the linker needs for OpenGL/Mesa)
dnl $sim_ac_gl_libs (link libraries the linker needs for OpenGL/Mesa)
dnl
dnl The CPPFLAGS, LDFLAGS and LIBS flags will also be modified accordingly.
dnl In addition, the variable $sim_ac_gl_avail is set to "yes" if an
dnl OpenGL-compatible development system is found. If the OpenGL system
dnl found is the Mesa libraries, we will also set $sim_ac_gl_is_mesa to
dnl "yes".
dnl
dnl
dnl Author: Morten Eriksen, <[EMAIL PROTECTED]>.
dnl
dnl TODO:
dnl * [mortene:20000122] make sure this work on MSWin (with
dnl Cygwin installation)
dnl
AC_DEFUN(SIM_CHECK_OPENGL,[
dnl Autoconf is a developer tool, so don't bother to support older versions.
AC_PREREQ([2.14.1])
AC_ARG_WITH(opengl, AC_HELP_STRING([--with-opengl=DIR], [OpenGL/Mesa installation
directory]), , [with_opengl=yes])
sim_ac_gl_avail=no
sim_ac_gl_is_mesa=no
if test x"$with_opengl" != xno; then
if test x"$with_opengl" != xyes; then
sim_ac_gl_cppflags="-I${with_opengl}/include"
sim_ac_gl_ldflags="-L${with_opengl}/lib"
else
case "$host_os" in
hpux*)
# This is a common location for the OpenGL libraries on HPUX.
sim_ac_gl_cppflags="-I/opt/graphics/OpenGL/include"
sim_ac_gl_ldflags="-L/opt/graphics/OpenGL/lib" ;;
esac
fi
sim_ac_save_cppflags=$CPPFLAGS
sim_ac_save_ldflags=$LDFLAGS
CPPFLAGS="$CPPFLAGS $sim_ac_gl_cppflags"
LDFLAGS="$LDFLAGS $sim_ac_gl_ldflags"
sim_ac_save_libs=$LIBS
AC_CACHE_CHECK([whether OpenGL libraries are available], sim_cv_lib_gl, [
sim_cv_lib_gl=UNRESOLVED
# Some platforms (like BeOS) have the GLU functionality in the GL library.
for i in -lMesaGL -lGL "-lMesaGLU -lMesaGL" "-lGLU -lGL"; do
if test "x$sim_cv_lib_gl" = "xUNRESOLVED"; then
LIBS="$i $sim_ac_save_libs"
AC_TRY_LINK([#include <GL/gl.h>
#include <GL/glu.h>],
[glPointSize(1.0f); gluSphere(0L, 1.0, 1, 1);],
sim_cv_lib_gl="$i")
fi
done
])
if test "x$sim_cv_lib_gl" != "xUNRESOLVED"; then
sim_ac_gl_libs="$sim_cv_lib_gl"
LIBS="$sim_ac_gl_libs $sim_ac_save_libs"
sim_ac_gl_avail=yes
AC_CACHE_CHECK([whether OpenGL libraries are the Mesa libraries],
sim_cv_lib_gl_ismesa,
[AC_TRY_LINK([#include <GL/gl.h>],
[#ifndef MESA
#error not mesa
#endif],
sim_cv_lib_gl_ismesa=yes,
sim_cv_lib_gl_ismesa=no)])
if test x"$sim_cv_lib_gl_ismesa" = xyes; then
sim_ac_gl_is_mesa=yes
fi
ifelse($1, , :, $1)
else
CPPFLAGS=$sim_ac_save_cppflags
LDFLAGS=$sim_ac_save_ldflags
LIBS=$sim_ac_save_libs
ifelse($2, , :, $2)
fi
fi
])