dnl http://www.gnu.org/software/ac-archive/ax_check_gl.html
dnl ---------------------------------------------------------------------------
-dnl @synopsis AX_CHECK_GL
+dnl SYNOPSIS
dnl
-dnl Check for an OpenGL implementation. If GL is found, the required
-dnl compiler and linker flags are included in the output variables
-dnl "GL_CFLAGS" and "GL_LIBS", respectively. This macro adds the
-dnl configure option "--with-apple-opengl-framework", which users can
-dnl use to indicate that Apple's OpenGL framework should be used on Mac
-dnl OS X. If Apple's OpenGL framework is used, the symbol
-dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If no GL implementation
-dnl is found, "no_gl" is set to "yes".
+dnl AX_CHECK_GL
dnl
-dnl @category InstalledPackages
-dnl @author Braden McDaniel <braden@endoframe.com>
-dnl @version 2004-11-15
-dnl @license AllPermissive
+dnl DESCRIPTION
+dnl
+dnl Check for an OpenGL implementation. If GL is found, the required
+dnl compiler and linker flags are included in the output variables
+dnl "GL_CFLAGS" and "GL_LIBS", respectively. If no usable GL implementation
+dnl is found, "no_gl" is set to "yes".
+dnl
+dnl If the header "GL/gl.h" is found, "HAVE_GL_GL_H" is defined. If the
+dnl header "OpenGL/gl.h" is found, HAVE_OPENGL_GL_H is defined. These
+dnl preprocessor definitions may not be mutually exclusive.
+dnl
+dnl LICENSE
+dnl
+dnl Copyright (c) 2009 Braden McDaniel <braden@endoframe.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify it
+dnl under the terms of the GNU General Public License as published by the
+dnl Free Software Foundation; either version 2 of the License, or (at your
+dnl option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+dnl Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License along
+dnl with this program. If not, see <http://www.gnu.org/licenses/>.
+dnl
+dnl As a special exception, the respective Autoconf Macro's copyright owner
+dnl gives unlimited permission to copy, distribute and modify the configure
+dnl scripts that are the output of Autoconf when processing the Macro. You
+dnl need not follow the terms of the GNU General Public License when using
+dnl or distributing such scripts, even though portions of the text of the
+dnl Macro appear in them. The GNU General Public License (GPL) does govern
+dnl all other use of the material that constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the Autoconf
+dnl Macro released by the Autoconf Archive. When you make and distribute a
+dnl modified version of the Autoconf Macro, you may extend this special
+dnl exception to the GPL to apply to your modified version as well.
AC_DEFUN([AX_CHECK_GL],
-[AC_REQUIRE([AC_PATH_X])dnl
-AC_REQUIRE([ACX_PTHREAD])dnl
-
-#
-# There isn't a reliable way to know we should use the Apple OpenGL framework
-# without a configure option. A Mac OS X user may have installed an
-# alternative GL implementation (e.g., Mesa), which may or may not depend on X.
-#
-AC_ARG_WITH([apple-opengl-framework],
- [AC_HELP_STRING([--with-apple-opengl-framework],
- [use Apple OpenGL framework (Mac OS X only)])])
-if test "X$with_apple_opengl_framework" = "Xyes"; then
- AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1],
- [Use the Apple OpenGL framework.])
- GL_LIBS="-framework OpenGL"
-else
- AC_LANG_PUSH(C)
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PATH_X])dnl
+AC_REQUIRE([AX_PTHREAD])dnl
- AX_LANG_COMPILER_MS
- if test X$ax_compiler_ms = Xno; then
- GL_CFLAGS="${PTHREAD_CFLAGS}"
- GL_LIBS="${PTHREAD_LIBS} -lm"
- fi
+AC_LANG_PUSH([C])
+AX_LANG_COMPILER_MS
+AS_IF([test X$ax_compiler_ms = Xno],
+ [GL_CFLAGS="${PTHREAD_CFLAGS}"; GL_LIBS="${PTHREAD_LIBS} -lm"])
- #
- # Use x_includes and x_libraries if they have been set (presumably by
- # AC_PATH_X).
- #
- if test "X$no_x" != "Xyes"; then
- if test -n "$x_includes"; then
- GL_CFLAGS="-I${x_includes} ${GL_CFLAGS}"
- fi
- if test -n "$x_libraries"; then
- GL_LIBS="-L${x_libraries} -lX11 ${GL_LIBS}"
- fi
- fi
-
- AC_CHECK_HEADERS([windows.h])
-
- AC_CACHE_CHECK([for OpenGL library], [ax_cv_check_gl_libgl],
- [ax_cv_check_gl_libgl="no"
- ax_save_CPPFLAGS="${CPPFLAGS}"
- CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
- ax_save_LIBS="${LIBS}"
- LIBS=""
- ax_check_libs="-lopengl32 -lGL"
- for ax_lib in ${ax_check_libs}; do
- if test X$ax_compiler_ms = Xyes; then
- ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
- else
- ax_try_lib="${ax_lib}"
- fi
- LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[
-# if HAVE_WINDOWS_H && defined(_WIN32)
+dnl
+dnl Use x_includes and x_libraries if they have been set (presumably by
+dnl AC_PATH_X).
+dnl
+AS_IF([test "X$no_x" != "Xyes"],
+ [AS_IF([test -n "$x_includes"],
+ [GL_CFLAGS="-I${x_includes} ${GL_CFLAGS}"])]
+ AS_IF([test -n "$x_libraries"],
+ [GL_LIBS="-L${x_libraries} -lX11 ${GL_LIBS}"]))
+
+ax_save_CPPFLAGS="${CPPFLAGS}"
+CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
+AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h])
+CPPFLAGS="${ax_save_CPPFLAGS}"
+
+AC_CHECK_HEADERS([windows.h])
+
+m4_define([AX_CHECK_GL_PROGRAM],
+ [AC_LANG_PROGRAM([[
+# if defined(HAVE_WINDOWS_H) && defined(_WIN32)
# include <windows.h>
# endif
-# include <GL/gl.h>]],
- [[glBegin(0)]])],
- [ax_cv_check_gl_libgl="${ax_try_lib}"; break])
- done
- LIBS=${ax_save_LIBS}
- CPPFLAGS=${ax_save_CPPFLAGS}])
-
- if test "X${ax_cv_check_gl_libgl}" = "Xno"; then
- no_gl="yes"
- GL_CFLAGS=""
- GL_LIBS=""
- else
- GL_LIBS="${ax_cv_check_gl_libgl} ${GL_LIBS}"
- fi
- AC_LANG_POP(C)
-fi
+# ifdef HAVE_GL_GL_H
+# include <GL/gl.h>
+# elif defined(HAVE_OPENGL_GL_H)
+# include <OpenGL/gl.h>
+# else
+# error no gl.h
+# endif]],
+ [[glBegin(0)]])])
+
+AC_CACHE_CHECK([for OpenGL library], [ax_cv_check_gl_libgl],
+[ax_cv_check_gl_libgl="no"
+case $host_cpu in
+ x86_64) ax_check_gl_libdir=lib64 ;;
+ *) ax_check_gl_libdir=lib ;;
+esac
+ax_save_CPPFLAGS="${CPPFLAGS}"
+CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
+ax_save_LIBS="${LIBS}"
+LIBS=""
+ax_check_libs="-lopengl32 -lGL"
+for ax_lib in ${ax_check_libs}; do
+ AS_IF([test X$ax_compiler_ms = Xyes],
+ [ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`],
+ [ax_try_lib="${ax_lib}"])
+ LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
+AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
+ [ax_cv_check_gl_libgl="${ax_try_lib}"; break],
+ [ax_check_gl_nvidia_flags="-L/usr/${ax_check_gl_libdir}/nvidia" LIBS="${ax_try_lib} ${ax_check_gl_nvidia_flags} ${GL_LIBS} ${ax_save_LIBS}"
+AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
+ [ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_nvidia_flags}"; break],
+ [ax_check_gl_dylib_flag='-dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib' LIBS="${ax_try_lib} ${ax_check_gl_dylib_flag} ${GL_LIBS} ${ax_save_LIBS}"
+AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
+ [ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_dylib_flag}"; break])])])
+done
+
+AS_IF([test "X$ax_cv_check_gl_libgl" = Xno -a "X$no_x" = Xyes],
+[LIBS='-framework OpenGL'
+AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
+ [ax_cv_check_gl_libgl="$LIBS"])])
+
+LIBS=${ax_save_LIBS}
+CPPFLAGS=${ax_save_CPPFLAGS}])
+
+AS_IF([test "X$ax_cv_check_gl_libgl" = Xno],
+ [no_gl=yes; GL_CFLAGS=""; GL_LIBS=""],
+ [GL_LIBS="${ax_cv_check_gl_libgl} ${GL_LIBS}"])
+AC_LANG_POP([C])
AC_SUBST([GL_CFLAGS])
AC_SUBST([GL_LIBS])
dnl http://www.gnu.org/software/ac-archive/ax_check_glu.html
dnl ---------------------------------------------------------------------------
-dnl @synopsis AX_CHECK_GLU
+dnl SYNOPSIS
dnl
-dnl Check for GLU. If GLU is found, the required preprocessor and
-dnl linker flags are included in the output variables "GLU_CFLAGS" and
-dnl "GLU_LIBS", respectively. This macro adds the configure option
-dnl "--with-apple-opengl-framework", which users can use to indicate
-dnl that Apple's OpenGL framework should be used on Mac OS X. If
-dnl Apple's OpenGL framework is used, the symbol
-dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If no GLU implementation
-dnl is found, "no_glu" is set to "yes".
+dnl AX_CHECK_GLU
dnl
-dnl @category InstalledPackages
-dnl @author Braden McDaniel <braden@endoframe.com>
-dnl @version 2004-11-15
-dnl @license AllPermissive
+dnl DESCRIPTION
+dnl
+dnl Check for GLU. If GLU is found, the required preprocessor and linker
+dnl flags are included in the output variables "GLU_CFLAGS" and "GLU_LIBS",
+dnl respectively. If no GLU implementation is found, "no_glu" is set to
+dnl "yes".
+dnl
+dnl If the header "GL/glu.h" is found, "HAVE_GL_GLU_H" is defined. If the
+dnl header "OpenGL/glu.h" is found, HAVE_OPENGL_GLU_H is defined. These
+dnl preprocessor definitions may not be mutually exclusive.
+dnl
+dnl Some implementations (in particular, some versions of Mac OS X) are
+dnl known to treat the GLU tesselator callback function type as "GLvoid
+dnl (*)(...)" rather than the standard "GLvoid (*)()". If the former
+dnl condition is detected, this macro defines "HAVE_VARARGS_GLU_TESSCB".
+dnl
+dnl LICENSE
+dnl
+dnl Copyright (c) 2009 Braden McDaniel <braden@endoframe.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify it
+dnl under the terms of the GNU General Public License as published by the
+dnl Free Software Foundation; either version 2 of the License, or (at your
+dnl option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+dnl Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License along
+dnl with this program. If not, see <http://www.gnu.org/licenses/>.
+dnl
+dnl As a special exception, the respective Autoconf Macro's copyright owner
+dnl gives unlimited permission to copy, distribute and modify the configure
+dnl scripts that are the output of Autoconf when processing the Macro. You
+dnl need not follow the terms of the GNU General Public License when using
+dnl or distributing such scripts, even though portions of the text of the
+dnl Macro appear in them. The GNU General Public License (GPL) does govern
+dnl all other use of the material that constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the Autoconf
+dnl Macro released by the Autoconf Archive. When you make and distribute a
+dnl modified version of the Autoconf Macro, you may extend this special
+dnl exception to the GPL to apply to your modified version as well.
AC_DEFUN([AX_CHECK_GLU],
[AC_REQUIRE([AX_CHECK_GL])dnl
AC_REQUIRE([AC_PROG_CXX])dnl
GLU_CFLAGS="${GL_CFLAGS}"
-if test "X${with_apple_opengl_framework}" != "Xyes"; then
- AC_CACHE_CHECK([for OpenGL Utility library], [ax_cv_check_glu_libglu],
- [ax_cv_check_glu_libglu="no"
- ax_save_CPPFLAGS="${CPPFLAGS}"
- CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
- ax_save_LIBS="${LIBS}"
- LIBS=""
- ax_check_libs="-lglu32 -lGLU"
- for ax_lib in ${ax_check_libs}; do
- if test X$ax_compiler_ms = Xyes; then
- ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
- else
- ax_try_lib="${ax_lib}"
- fi
- LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
- #
- # libGLU typically links with libstdc++ on POSIX platforms. However,
- # setting the language to C++ means that test program source is named
- # "conftest.cc"; and Microsoft cl doesn't know what to do with such a
- # file.
- #
- AC_LANG_PUSH([C++])
- if test X$ax_compiler_ms = Xyes; then
- AC_LANG_PUSH([C])
- fi
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[
-# if HAVE_WINDOWS_H && defined(_WIN32)
+
+ax_save_CPPFLAGS="${CPPFLAGS}"
+CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
+AC_CHECK_HEADERS([GL/glu.h OpenGL/glu.h])
+CPPFLAGS="${ax_save_CPPFLAGS}"
+
+m4_define([AX_CHECK_GLU_PROGRAM],
+ [AC_LANG_PROGRAM([[
+# if defined(HAVE_WINDOWS_H) && defined(_WIN32)
# include <windows.h>
# endif
-# include <GL/glu.h>]],
- [[gluBeginCurve(0)]])],
- [ax_cv_check_glu_libglu="${ax_try_lib}"; break])
- if test X$ax_compiler_ms = Xyes; then
- AC_LANG_POP([C])
- fi
- AC_LANG_POP([C++])
- done
- LIBS=${ax_save_LIBS}
- CPPFLAGS=${ax_save_CPPFLAGS}])
- if test "X${ax_cv_check_glu_libglu}" = "Xno"; then
- no_glu="yes"
- GLU_CFLAGS=""
- GLU_LIBS=""
- else
- GLU_LIBS="${ax_cv_check_glu_libglu} ${GL_LIBS}"
- fi
-fi
+# ifdef HAVE_GL_GLU_H
+# include <GL/glu.h>
+# elif defined(HAVE_OPENGL_GLU_H)
+# include <OpenGL/glu.h>
+# else
+# error no glu.h
+# endif]],
+ [[gluBeginCurve(0)]])])
+
+AC_CACHE_CHECK([for OpenGL Utility library], [ax_cv_check_glu_libglu],
+[ax_cv_check_glu_libglu="no"
+ax_save_CPPFLAGS="${CPPFLAGS}"
+CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
+ax_save_LIBS="${LIBS}"
+
+dnl
+dnl First, check for the possibility that everything we need is already in
+dnl GL_LIBS.
+dnl
+LIBS="${GL_LIBS} ${ax_save_LIBS}"
+dnl
+dnl libGLU typically links with libstdc++ on POSIX platforms.
+dnl However, setting the language to C++ means that test program
+dnl source is named "conftest.cc"; and Microsoft cl doesn't know what
+dnl to do with such a file.
+dnl
+AC_LANG_PUSH([C++])
+AS_IF([test X$ax_compiler_ms = Xyes],
+ [AC_LANG_PUSH([C])])
+AC_LINK_IFELSE(
+[AX_CHECK_GLU_PROGRAM],
+[ax_cv_check_glu_libglu=yes],
+[LIBS=""
+ax_check_libs="-lglu32 -lGLU"
+for ax_lib in ${ax_check_libs}; do
+ AS_IF([test X$ax_compiler_ms = Xyes],
+ [ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`],
+ [ax_try_lib="${ax_lib}"])
+ LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
+ AC_LINK_IFELSE([AX_CHECK_GLU_PROGRAM],
+ [ax_cv_check_glu_libglu="${ax_try_lib}"; break])
+done
+])
+AS_IF([test X$ax_compiler_ms = Xyes],
+ [AC_LANG_POP([C])])
+AC_LANG_POP([C++])
+
+LIBS=${ax_save_LIBS}
+CPPFLAGS=${ax_save_CPPFLAGS}])
+AS_IF([test "X$ax_cv_check_glu_libglu" = Xno],
+ [no_glu=yes; GLU_CFLAGS=""; GLU_LIBS=""],
+ [AS_IF([test "X$ax_cv_check_glu_libglu" = Xyes],
+ [GLU_LIBS="$GL_LIBS"],
+ [GLU_LIBS="${ax_cv_check_glu_libglu} ${GL_LIBS}"])])
AC_SUBST([GLU_CFLAGS])
AC_SUBST([GLU_LIBS])
+
+dnl
+dnl Some versions of Mac OS X include a broken interpretation of the GLU
+dnl tesselation callback function signature.
+dnl
+AS_IF([test "X$ax_cv_check_glu_libglu" != Xno],
+[AC_CACHE_CHECK([for varargs GLU tesselator callback function type],
+ [ax_cv_varargs_glu_tesscb],
+[ax_cv_varargs_glu_tesscb=no
+ax_save_CFLAGS="$CFLAGS"
+CFLAGS="$GL_CFLAGS $CFLAGS"
+AC_COMPILE_IFELSE(
+[AC_LANG_PROGRAM([[
+# ifdef HAVE_GL_GLU_H
+# include <GL/glu.h>
+# else
+# include <OpenGL/glu.h>
+# endif]],
+ [[GLvoid (*func)(...); gluTessCallback(0, 0, func)]])],
+[ax_cv_varargs_glu_tesscb=yes])
+CFLAGS="$ax_save_CFLAGS"])
+AS_IF([test X$ax_cv_varargs_glu_tesscb = Xyes],
+ [AC_DEFINE([HAVE_VARARGS_GLU_TESSCB], [1],
+ [Use nonstandard varargs form for the GLU tesselator callback])])])
])
dnl ---------------------------------------------------------------------------
dnl http://www.gnu.org/software/ac-archive/ax_check_glut.html
dnl ---------------------------------------------------------------------------
-dnl @synopsis AX_CHECK_GLUT
dnl
-dnl Check for GLUT. If GLUT is found, the required compiler and linker
-dnl flags are included in the output variables "GLUT_CFLAGS" and
-dnl "GLUT_LIBS", respectively. This macro adds the configure option
-dnl "--with-apple-opengl-framework", which users can use to indicate
-dnl that Apple's OpenGL framework should be used on Mac OS X. If
-dnl Apple's OpenGL framework is used, the symbol
-dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If GLUT is not found,
-dnl "no_glut" is set to "yes".
+dnl SYNOPSIS
dnl
-dnl @category InstalledPackages
-dnl @author Braden McDaniel <braden@endoframe.com>
-dnl @version 2004-11-15
-dnl @license AllPermissive
+dnl AX_CHECK_GLUT
+dnl
+dnl DESCRIPTION
+dnl
+dnl Check for GLUT. If GLUT is found, the required compiler and linker flags
+dnl are included in the output variables "GLUT_CFLAGS" and "GLUT_LIBS",
+dnl respectively. If GLUT is not found, "no_glut" is set to "yes".
+dnl
+dnl If the header "GL/glut.h" is found, "HAVE_GL_GLUT_H" is defined. If the
+dnl header "GLUT/glut.h" is found, HAVE_GLUT_GLUT_H is defined. These
+dnl preprocessor definitions may not be mutually exclusive.
+dnl
+dnl LICENSE
+dnl
+dnl Copyright (c) 2009 Braden McDaniel <braden@endoframe.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify it
+dnl under the terms of the GNU General Public License as published by the
+dnl Free Software Foundation; either version 2 of the License, or (at your
+dnl option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+dnl Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License along
+dnl with this program. If not, see <http://www.gnu.org/licenses/>.
+dnl
+dnl As a special exception, the respective Autoconf Macro's copyright owner
+dnl gives unlimited permission to copy, distribute and modify the configure
+dnl scripts that are the output of Autoconf when processing the Macro. You
+dnl need not follow the terms of the GNU General Public License when using
+dnl or distributing such scripts, even though portions of the text of the
+dnl Macro appear in them. The GNU General Public License (GPL) does govern
+dnl all other use of the material that constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the Autoconf
+dnl Macro released by the Autoconf Archive. When you make and distribute a
+dnl modified version of the Autoconf Macro, you may extend this special
+dnl exception to the GPL to apply to your modified version as well.
AC_DEFUN([AX_CHECK_GLUT],
[AC_REQUIRE([AX_CHECK_GLU])dnl
AC_REQUIRE([AC_PATH_XTRA])dnl
-if test "X$with_apple_opengl_framework" = "Xyes"; then
- GLUT_CFLAGS="${GLU_CFLAGS}"
- GLUT_LIBS="-framework GLUT -lobjc ${GL_LIBS}"
-else
- GLUT_CFLAGS=${GLU_CFLAGS}
- GLUT_LIBS=${GLU_LIBS}
-
- #
- # If X is present, assume GLUT depends on it.
- #
- if test "X${no_x}" != "Xyes"; then
- GLUT_LIBS="${X_PRE_LIBS} -lXmu -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}"
- fi
-
- AC_LANG_PUSH(C)
+ax_save_CPPFLAGS="${CPPFLAGS}"
+CPPFLAGS="${GLU_CFLAGS} ${CPPFLAGS}"
+AC_CHECK_HEADERS([GL/glut.h GLUT/glut.h])
+CPPFLAGS="${ax_save_CPPFLAGS}"
- ax_save_CPPFLAGS="${CPPFLAGS}"
- CPPFLAGS="${GLUT_CFLAGS} ${CPPFLAGS}"
+GLUT_CFLAGS=${GLU_CFLAGS}
+GLUT_LIBS=${GLU_LIBS}
- AC_CACHE_CHECK([for GLUT library], [ax_cv_check_glut_libglut],
- [ax_cv_check_glut_libglut="no"
- ax_save_LIBS="${LIBS}"
- LIBS=""
- ax_check_libs="-lglut32 -lglut"
- for ax_lib in ${ax_check_libs}; do
- if test X$ax_compiler_ms = Xyes; then
- ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
- else
- ax_try_lib="${ax_lib}"
- fi
- LIBS="${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[
+m4_define([AX_CHECK_GLUT_PROGRAM],
+ [AC_LANG_PROGRAM([[
# if HAVE_WINDOWS_H && defined(_WIN32)
# include <windows.h>
# endif
-# include <GL/glut.h>]],
- [[glutMainLoop()]])],
- [ax_cv_check_glut_libglut="${ax_try_lib}"; break])
+# ifdef HAVE_GL_GLUT_H
+# include <GL/glut.h>
+# elif defined(HAVE_GLUT_GLUT_H)
+# include <GLUT/glut.h>
+# else
+# error no glut.h
+# endif]],
+ [[glutMainLoop()]])])
- done
- LIBS=${ax_save_LIBS}
- ])
- CPPFLAGS="${ax_save_CPPFLAGS}"
- AC_LANG_POP(C)
+dnl
+dnl If X is present, assume GLUT depends on it.
+dnl
+AS_IF([test X$no_x != Xyes],
+ [GLUT_LIBS="${X_PRE_LIBS} -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}"])
+
+AC_CACHE_CHECK([for GLUT library], [ax_cv_check_glut_libglut],
+[ax_cv_check_glut_libglut="no"
+AC_LANG_PUSH(C)
+ax_save_CPPFLAGS="${CPPFLAGS}"
+CPPFLAGS="${GLUT_CFLAGS} ${CPPFLAGS}"
+ax_save_LIBS="${LIBS}"
+LIBS=""
+ax_check_libs="-lglut32 -lglut"
+for ax_lib in ${ax_check_libs}; do
+ AS_IF([test X$ax_compiler_ms = Xyes],
+ [ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`],
+ [ax_try_lib="${ax_lib}"])
+ LIBS="${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}"
+ AC_LINK_IFELSE([AX_CHECK_GLUT_PROGRAM],
+ [ax_cv_check_glut_libglut="${ax_try_lib}"; break])
+done
- if test "X${ax_cv_check_glut_libglut}" = "Xno"; then
- no_glut="yes"
- GLUT_CFLAGS=""
- GLUT_LIBS=""
- else
- GLUT_LIBS="${ax_cv_check_glut_libglut} ${GLUT_LIBS}"
- fi
-fi
+AS_IF([test "X$ax_cv_check_glut_libglut" = Xno -a "X$no_x" = Xyes],
+[LIBS='-framework GLUT'
+AC_LINK_IFELSE([AX_CHECK_GLUT_PROGRAM],
+ [ax_cv_check_glut_libglut="$LIBS"])])
+
+CPPFLAGS="${ax_save_CPPFLAGS}"
+LIBS="${ax_save_LIBS}"
+AC_LANG_POP(C)])
+
+AS_IF([test "X$ax_cv_check_glut_libglut" = Xno],
+ [no_glut="yes"; GLUT_CFLAGS=""; GLUT_LIBS=""],
+ [GLUT_LIBS="${ax_cv_check_glut_libglut} ${GLUT_LIBS}"])
AC_SUBST([GLUT_CFLAGS])
AC_SUBST([GLUT_LIBS])
dnl ---------------------------------------------------------------------------
dnl Available from the GNU Autoconf Macro Archive at:
-dnl http://www.gnu.org/software/ac-archive/acx_pthread.html
+dnl http://www.gnu.org/software/autoconf-archive/ax_pthread.html
dnl ---------------------------------------------------------------------------
-dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+dnl SYNOPSIS
dnl
-dnl This macro figures out how to build C programs using POSIX threads.
-dnl It sets the PTHREAD_LIBS output variable to the threads library and
-dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
-dnl C compiler flags that are needed. (The user can also force certain
-dnl compiler flags/libs to be tested by setting these environment
-dnl variables.)
+dnl AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
dnl
-dnl Also sets PTHREAD_CC to any special C compiler that is needed for
-dnl multi-threaded programs (defaults to the value of CC otherwise).
-dnl (This is necessary on AIX to use the special cc_r compiler alias.)
+dnl DESCRIPTION
dnl
-dnl NOTE: You are assumed to not only compile your program with these
-dnl flags, but also link it with them as well. e.g. you should link
-dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
-dnl $LIBS
+dnl This macro figures out how to build C programs using POSIX threads. It
+dnl sets the PTHREAD_LIBS output variable to the threads library and linker
+dnl flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+dnl flags that are needed. (The user can also force certain compiler
+dnl flags/libs to be tested by setting these environment variables.)
dnl
-dnl If you are only building threads programs, you may wish to use
-dnl these variables in your default LIBS, CFLAGS, and CC:
+dnl Also sets PTHREAD_CC to any special C compiler that is needed for
+dnl multi-threaded programs (defaults to the value of CC otherwise). (This
+dnl is necessary on AIX to use the special cc_r compiler alias.)
dnl
-dnl LIBS="$PTHREAD_LIBS $LIBS"
-dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-dnl CC="$PTHREAD_CC"
+dnl NOTE: You are assumed to not only compile your program with these flags,
+dnl but also link it with them as well. e.g. you should link with
+dnl $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
dnl
-dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
-dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
-dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+dnl If you are only building threads programs, you may wish to use these
+dnl variables in your default LIBS, CFLAGS, and CC:
dnl
-dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
-dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
-dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
-dnl default action will define HAVE_PTHREAD.
+dnl LIBS="$PTHREAD_LIBS $LIBS"
+dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+dnl CC="$PTHREAD_CC"
dnl
-dnl Please let the authors know if this macro fails on any platform, or
-dnl if you have any other suggestions or comments. This macro was based
-dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
-dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
-dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
-dnl We are also grateful for the helpful feedback of numerous users.
+dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+dnl has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
+dnl (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
dnl
-dnl @category InstalledPackages
-dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
-dnl @version 2005-01-14
-dnl @license GPLWithACException
+dnl ACTION-IF-FOUND is a list of shell commands to run if a threads library
+dnl is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+dnl is not found. If ACTION-IF-FOUND is not specified, the default action
+dnl will define HAVE_PTHREAD.
+dnl
+dnl Please let the authors know if this macro fails on any platform, or if
+dnl you have any other suggestions or comments. This macro was based on work
+dnl by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+dnl from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+dnl Alejandro Forero Cuervo to the autoconf macro repository. We are also
+dnl grateful for the helpful feedback of numerous users.
+dnl
+dnl LICENSE
+dnl
+dnl Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+dnl
+dnl This program is free software: you can redistribute it and/or modify it
+dnl under the terms of the GNU General Public License as published by the
+dnl Free Software Foundation, either version 3 of the License, or (at your
+dnl option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+dnl Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License along
+dnl with this program. If not, see <http://www.gnu.org/licenses/>.
+dnl
+dnl As a special exception, the respective Autoconf Macro's copyright owner
+dnl gives unlimited permission to copy, distribute and modify the configure
+dnl scripts that are the output of Autoconf when processing the Macro. You
+dnl need not follow the terms of the GNU General Public License when using
+dnl or distributing such scripts, even though portions of the text of the
+dnl Macro appear in them. The GNU General Public License (GPL) does govern
+dnl all other use of the material that constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the Autoconf
+dnl Macro released by the Autoconf Archive. When you make and distribute a
+dnl modified version of the Autoconf Macro, you may extend this special
+dnl exception to the GPL to apply to your modified version as well.
-AC_DEFUN([ACX_PTHREAD], [
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
AC_LANG_SAVE
AC_LANG_C
-acx_pthread_ok=no
+ax_pthread_ok=no
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
+dnl We used to check for pthread.h first, but this fails if pthread.h
+dnl requires special compiler flags (e.g. on True64 or Sequent).
+dnl It gets checked for in the link test anyway.
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
+dnl First of all, check if the user has set any of the PTHREAD_LIBS,
+dnl etcetera environment variables, and if threads linking works using
+dnl them:
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
- AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
- AC_MSG_RESULT($acx_pthread_ok)
- if test x"$acx_pthread_ok" = xno; then
+ AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
+ AC_MSG_RESULT($ax_pthread_ok)
+ if test x"$ax_pthread_ok" = xno; then
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
fi
CFLAGS="$save_CFLAGS"
fi
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try. Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important. Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-# other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-# doesn't hurt to check since this sometimes defines pthreads too;
-# also defines -D_REENTRANT)
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
+dnl We must check for the threads library under a number of different
+dnl names; the ordering is very important because some systems
+dnl (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+dnl libraries is broken (non-POSIX).
+
+dnl Create a list of thread flags to try. Items starting with a "-" are
+dnl C compiler flags, and other items are library names, except for "none"
+dnl which indicates that we try without any flags at all, and "pthread-config"
+dnl which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+dnl The ordering *is* (sometimes) important. Some notes on the
+dnl individual items follow:
+
+dnl pthreads: AIX (must check this before -lpthread)
+dnl none: in case threads are in libc; should be tried before -Kthread and
+dnl other compiler flags to prevent continual compiler warnings
+dnl -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+dnl -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+dnl lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+dnl -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+dnl -pthreads: Solaris/gcc
+dnl -mthreads: Mingw32/gcc, Lynx/gcc
+dnl -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+dnl doesn't hurt to check since this sometimes defines pthreads too;
+dnl also defines -D_REENTRANT)
+dnl ... -mt is also the pthreads flag for HP/aCC
+dnl pthread: Linux, etcetera
+dnl --thread-safe: KAI C++
+dnl pthread-config: use pthread-config program (for GNU Pth library)
case "${host_cpu}-${host_os}" in
*solaris*)
- # On Solaris (at least, for some versions), libc contains stubbed
- # (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthread or
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
+ dnl On Solaris (at least, for some versions), libc contains stubbed
+ dnl (non-functional) versions of the pthreads routines, so link-based
+ dnl tests will erroneously succeed. (We need to link with -pthreads/-mt/
+ dnl -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
+ dnl a function called by this macro, so we could check for that, but
+ dnl who knows whether they'll stub that too in a future libc.) So,
+ dnl we'll just look for -pthreads and -lpthread first:
- acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
+ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
;;
+
+ *-darwin*)
+ ax_pthread_flags="-pthread $ax_pthread_flags"
+ ;;
esac
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
case $flag in
none)
;;
pthread-config)
- AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
- if test x"$acx_pthread_config" = xno; then continue; fi
+ AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
+ if test x"$ax_pthread_config" = xno; then continue; fi
PTHREAD_CFLAGS="`pthread-config --cflags`"
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
;;
LIBS="$PTHREAD_LIBS $LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- # Check for various functions. We must include pthread.h,
- # since some functions may be macros. (On the Sequent, we
- # need a special flag -Kthread to make this header compile.)
- # We check for pthread_join because it is in -lpthread on IRIX
- # while pthread_create is in libc. We check for pthread_attr_init
- # due to DEC craziness with -lpthreads. We check for
- # pthread_cleanup_push because it is one of the few pthread
- # functions on Solaris that doesn't have a non-functional libc stub.
- # We try pthread_create on general principles.
- AC_TRY_LINK([#include <pthread.h>],
- [pthread_t th; pthread_join(th, 0);
- pthread_attr_init(0); pthread_cleanup_push(0, 0);
- pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
- [acx_pthread_ok=yes])
+ dnl Check for various functions. We must include pthread.h,
+ dnl since some functions may be macros. (On the Sequent, we
+ dnl need a special flag -Kthread to make this header compile.)
+ dnl We check for pthread_join because it is in -lpthread on IRIX
+ dnl while pthread_create is in libc. We check for pthread_attr_init
+ dnl due to DEC craziness with -lpthreads. We check for
+ dnl pthread_cleanup_push because it is one of the few pthread
+ dnl functions on Solaris that doesn't have a non-functional libc stub.
+ dnl We try pthread_create on general principles.
+ AC_TRY_LINK([#include <pthread.h>
+ static void routine(void* a) {a=0;}
+ static void* start_routine(void* a) {return a;}],
+ [pthread_t th; pthread_attr_t attr;
+ pthread_create(&th,0,start_routine,0);
+ pthread_join(th, 0);
+ pthread_attr_init(&attr);
+ pthread_cleanup_push(routine, 0);
+ pthread_cleanup_pop(0); ],
+ [ax_pthread_ok=yes])
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
- AC_MSG_RESULT($acx_pthread_ok)
- if test "x$acx_pthread_ok" = xyes; then
+ AC_MSG_RESULT($ax_pthread_ok)
+ if test "x$ax_pthread_ok" = xyes; then
break;
fi
done
fi
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
+dnl Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+ dnl Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
AC_MSG_CHECKING([for joinable pthread attribute])
attr_name=unknown
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
- AC_TRY_LINK([#include <pthread.h>], [int attr=$attr;],
+ AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
[attr_name=$attr; break])
done
AC_MSG_RESULT($attr_name)
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
- # More AIX lossage: must compile with cc_r
- AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
+ dnl More AIX lossage: must compile with xlc_r or cc_r
+ if test x"$GCC" != xyes; then
+ AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
+ else
+ PTHREAD_CC=$CC
+ fi
else
PTHREAD_CC="$CC"
fi
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_CC)
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
+dnl Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
:
else
- acx_pthread_ok=no
+ ax_pthread_ok=no
$2
fi
AC_LANG_RESTORE
-])dnl ACX_PTHREAD
+])dnl AX_PTHREAD