summaryrefslogtreecommitdiff
path: root/m4/ax_check_glut.m4
diff options
context:
space:
mode:
authorBastien ROUCARIÈS <roucaries.bastien@gmail.com>2013-04-07 11:19:39 +0200
committerPeter Simons <simons@cryp.to>2013-04-07 22:43:52 +0200
commit96e1d06742628312359a10420b3f4ebb25827dbb (patch)
tree893604fa28b006aec376a6cf691d98c374ca4e34 /m4/ax_check_glut.m4
parent629f41cf598cd7ba91e2f5af85d608895ad8b378 (diff)
downloadautoconf-archive-96e1d06742628312359a10420b3f4ebb25827dbb.tar.gz
Improve ax_check_glut
- Use modern construct - test link/compile/headers - add more comments
Diffstat (limited to 'm4/ax_check_glut.m4')
-rw-r--r--m4/ax_check_glut.m4259
1 files changed, 203 insertions, 56 deletions
diff --git a/m4/ax_check_glut.m4 b/m4/ax_check_glut.m4
index 4c7696d..4b27ac7 100644
--- a/m4/ax_check_glut.m4
+++ b/m4/ax_check_glut.m4
@@ -2,11 +2,6 @@
# http://www.gnu.org/software/autoconf-archive/ax_check_glut.html
# ===========================================================================
#
-# OBSOLETE MACRO
-#
-# This macro is no longer maintained here; the author prefers to publish
-# it at <http://code.google.com/p/autoconf-gl-macros/>.
-#
# SYNOPSIS
#
# AX_CHECK_GLUT
@@ -21,9 +16,22 @@
# header "GLUT/glut.h" is found, HAVE_GLUT_GLUT_H is defined. These
# preprocessor definitions may not be mutually exclusive.
#
+# You should use something like this in your headers:
+# # if HAVE_WINDOWS_H && defined(_WIN32)
+# # include <windows.h>
+# # endif
+# # if defined(HAVE_GL_GLUT_H)
+# # include <GL/glut.h>
+# # elif defined(HAVE_GLUT_GLUT_H)
+# # include <GLUT/glut.h>
+# # else
+# # error no glut.h
+# # endif
+#
# LICENSE
#
# Copyright (c) 2009 Braden McDaniel <braden@endoframe.com>
+# Copyright (c) 2013 Bastien Roucaries <roucaries.bastien+autoconf@gmail.com>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
@@ -51,21 +59,41 @@
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
-#serial 9
+#serial 11
-AC_DEFUN([AX_CHECK_GLUT],
-[AC_REQUIRE([AX_CHECK_GLU])dnl
-AC_REQUIRE([AC_PATH_XTRA])dnl
+dnl local save flags
+AC_DEFUN([_AX_CHECK_GLUT_SAVE_FLAGS],
+[dnl
+ax_check_glut_saved_libs="${LIBS}"
+ax_check_glut_saved_cflags="${CFLAGS}"
+ax_check_glut_saved_cppflags="${CPPFLAGS}"
+ax_check_glut_saved_ldflags="${LDFLAGS}"
+])
-ax_save_CPPFLAGS="${CPPFLAGS}"
-CPPFLAGS="${GLU_CFLAGS} ${CPPFLAGS}"
-AC_CHECK_HEADERS([GL/glut.h GLUT/glut.h])
-CPPFLAGS="${ax_save_CPPFLAGS}"
-GLUT_CFLAGS=${GLU_CFLAGS}
-GLUT_LIBS=${GLU_LIBS}
+dnl local restore flags
+AC_DEFUN([_AX_CHECK_GLUT_RESTORE_FLAGS],
+[dnl
+LIBS="${ax_check_glut_saved_libs}"
+CFLAGS="${ax_check_glut_saved_cflags}"
+CPPFLAGS="${ax_check_glut_saved_cppflags}"
+LDFLAGS="${ax_check_glut_saved_ldflags}"
+])
-m4_define([AX_CHECK_GLUT_PROGRAM],
+dnl Default include : add windows.h
+dnl see http://www.opengl.org/wiki/Platform_specifics:_Windows
+dnl (acceded 20120801)
+AC_DEFUN([_AX_CHECK_GLUT_INCLUDES_DEFAULT],dnl
+[
+ AC_INCLUDES_DEFAULT
+ [
+ # if defined(HAVE_WINDOWS_H) && defined(_WIN32)
+ # include <windows.h>
+ # endif
+ ]
+])
+
+m4_define([_AX_CHECK_GLUT_PROGRAM],
[AC_LANG_PROGRAM([[
# if HAVE_WINDOWS_H && defined(_WIN32)
# include <windows.h>
@@ -77,44 +105,163 @@ m4_define([AX_CHECK_GLUT_PROGRAM],
# else
# error no glut.h
# endif]],
- [[glutMainLoop()]])])
+[[glutMainLoop()]])])
-#
-# If X is present, assume GLUT depends on it.
-#
-AS_IF([test X$no_x != Xyes],
- [GLUT_LIBS="${X_PRE_LIBS} -lXmu -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
-
-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 Check headers manually (default case)
+AC_DEFUN([_AX_CHECK_GLUT_HEADERS],
+[AC_LANG_PUSH([C])
+ _AX_CHECK_GLUT_SAVE_FLAGS()
+ CFLAGS="${GLUT_CFLAGS} ${CFLAGS}"
+ # see comment in _AX_CHECK_GL_INCLUDES_DEFAULT
+ AC_CHECK_HEADERS([windows.h],[],[],[AC_INCLUDES_DEFAULT])
+ AC_CHECK_HEADERS([GL/glut.h OpenGL/glut.h],
+ [ax_check_glut_have_headers="yes";break],
+ [ax_check_glut_have_headers_headers="no"],
+ [_AX_CHECK_GLUT_INCLUDES_DEFAULT()])
+ # do not try darwin specific OpenGl/gl.h
+ _AX_CHECK_GLUT_RESTORE_FLAGS()
+ AC_LANG_POP([C])
+])
+
+# dnl try to found library (generic case)
+# dnl $1 is set to the library to found
+AC_DEFUN([_AX_CHECK_GLUT_MANUAL_LIBS_GENERIC],
+[dnl
+ ax_check_glut_manual_libs_generic_extra_libs="$1"
+ AS_IF([test "X$ax_check_glut_manual_libs_generic_extra_libs" = "X"],
+ [AC_MSG_ERROR([AX_CHECK_GLUT_MANUAL_LIBS_GENERIC argument must no be empty])])
+
+ AC_LANG_PUSH([C])
+ _AX_CHECK_GLUT_SAVE_FLAGS()
+ CFLAGS="${GLUT_CFLAGS} ${CFLAGS}"
+ LIBS="${GLUT_LIBS} ${LIBS}"
+ AC_SEARCH_LIBS([glutMainLoop],[$ax_check_glut_manual_libs_generic_extra_libs],
+ [ax_check_glut_lib_opengl="yes"],
+ [ax_check_glut_lib_opengl="no"])
+ AS_CASE([$ac_cv_search_glutMainLoop],
+ ["none required"],[],
+ [no],[],
+ [GLUT_LIBS="${ac_cv_search_glutMainLoop} ${GLU_LIBS}"])
+ _AX_CHECK_GLUT_RESTORE_FLAGS()
+ AC_LANG_PUSH([C])
+])
+
+
+dnl Check library manually: subroutine must set
+dnl $ax_check_glut_lib_opengl={yes,no}
+dnl for windows part see
+dnl - http://www.transmissionzero.co.uk/computing/using-glut-with-mingw/
+dnl - http://user.xmission.com/~nate/glut.html
+AC_DEFUN([_AX_CHECK_GLUT_MANUAL_LIBS],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+ GLUT_LIBS="${GLUT_LIBS} ${GLU_LIBS}"
+ AS_CASE([${host}],
+ # try first cygwin version
+ [*-cygwin*],[_AX_CHECK_GLUT_MANUAL_LIBS_GENERIC([GLUT glut MesaGLUT freeglut freeglut32 glut32])],
+ # try first native
+ [*-mingw*],[_AX_CHECK_GLUT_MANUAL_LIBS_GENERIC([glut32 GLUT glut MesaGLUT freeglut freeglut32])],
+ [_AX_CHECK_GLUT_MANUAL_LIBS_GENERIC([GLUT glut freeglut MesaGLUT])])
+
+ AC_CACHE_CHECK([for OpenGL Utility Toolkit (GLUT) libraries],[ax_cv_check_glut_lib_opengl],
+ [ax_cv_check_glut_lib_opengl="${ax_check_glut_lib_opengl}"])
+ ax_check_glut_lib_opengl="${ax_cv_check_glut_lib_opengl}"
+])
+
+# compile the example program
+AC_DEFUN([_AX_CHECK_GLUT_COMPILE],
+[dnl
+ AC_LANG_PUSH([C])
+ _AX_CHECK_GLUT_SAVE_FLAGS()
+ CFLAGS="${GLUT_CFLAGS} ${CFLAGS}"
+ AC_COMPILE_IFELSE([_AX_CHECK_GLUT_PROGRAM],
+ [ax_check_glut_compile_opengl="yes"],
+ [ax_check_glut_compile_opengl="no"])
+ _AX_CHECK_GLUT_RESTORE_FLAGS()
+ AC_LANG_POP([C])
+])
+
+# compile the example program (cache)
+AC_DEFUN([_AX_CHECK_GLUT_COMPILE_CV],
+[dnl
+ AC_CACHE_CHECK([for compiling a minimal OpenGL Utility Toolkit (GLUT) program],[ax_cv_check_glut_compile_opengl],
+ [_AX_CHECK_GLUT_COMPILE()
+ ax_cv_check_glut_compile_opengl="${ax_check_glut_compile_opengl}"])
+ ax_check_glut_compile_opengl="${ax_cv_check_glut_compile_opengl}"
+])
+
+# link the example program
+AC_DEFUN([_AX_CHECK_GLUT_LINK],
+[dnl
+ AC_LANG_PUSH([C])
+ _AX_CHECK_GLUT_SAVE_FLAGS()
+ CFLAGS="${GLUT_CFLAGS} ${CFLAGS}"
+ LIBS="${GLUT_LIBS} ${LIBS}"
+ LDFLAGS="${GLUT_LDFLAGS} ${LDFLAGS}"
+ AC_LINK_IFELSE([_AX_CHECK_GLUT_PROGRAM],
+ [ax_check_glut_link_opengl="yes"],
+ [ax_check_glut_link_opengl="no"])
+ _AX_CHECK_GLUT_RESTORE_FLAGS()
+ AC_LANG_POP([C])
+])
+
+# link the example program (cache)
+AC_DEFUN([_AX_CHECK_GLUT_LINK_CV],
+[dnl
+ AC_CACHE_CHECK([for linking a minimal OpenGL Utility Toolkit (GLUT) program],[ax_cv_check_glut_link_opengl],
+ [_AX_CHECK_GLUT_LINK()
+ ax_cv_check_glut_link_opengl="${ax_check_glut_link_opengl}"])
+ ax_check_glut_link_opengl="${ax_cv_check_glut_link_opengl}"
+])
+
+
+# manually check GLUT
+AC_DEFUN([_AX_CHECK_GLUT_MANUAL],dnl
+[
+GLUT_CFLAGS="${GLUT_CFLAGS} ${GLU_CFLAGS}"
+_AX_CHECK_GLUT_HEADERS
+
+AS_IF([test "X$ax_check_glut_have_headers" = "Xyes"],
+ [_AX_CHECK_GLUT_MANUAL_LIBS],
+ [ax_check_glut_lib="no"])
+
+AS_IF([test "X$ax_check_glut_lib_opengl" = "Xyes"],
+ [_AX_CHECK_GLUT_COMPILE_CV()],
+ [ax_cv_check_glut_compile_opengl="no"])
+
+AS_IF([test "X$ax_cv_check_glut_compile_opengl" = "Xyes"],
+ [_AX_CHECK_GLUT_LINK_CV()],
+ [ax_cv_check_glut_link_opengl="no"])
+
+AS_IF([test "X$ax_cv_check_glut_link_opengl" = "Xyes"],
+ [no_glut="no"],
+ [no_glut="yes"])
+])
+
+
+# main entry point
+AC_DEFUN([AX_CHECK_GLUT],
+[dnl
+ AC_REQUIRE([AX_CHECK_GL])dnl
+ AC_REQUIRE([AX_CHECK_GLU])dnl
+
+ _AX_CHECK_GLUT_MANUAL
+
+ AC_MSG_CHECKING([for a working OpenGL Utility Toolkit (GLUT) implementation])
+ AS_IF([test "X$no_glut" = "Xno"],
+ [AC_MSG_RESULT([yes])
+ AC_MSG_CHECKING([for CFLAGS needed for OpenGL Utility Toolkit (GLUT)])
+ AC_MSG_RESULT(["${GLUT_CFLAGS}"])
+ AC_MSG_CHECKING([for LIBS needed for OpenGL Utility Toolkit (GLUT)])
+ AC_MSG_RESULT(["${GLUT_LIBS}"])
+ AC_MSG_CHECKING([for LDFLAGS needed for OpenGL Utility Toolkit (GLUT)])
+ AC_MSG_RESULT(["${GLUT_LDFLAGS}"])],
+ [AC_MSG_RESULT([no])
+ GLUT_CFLAGS=""
+ GLUT_LIBS=""
+ GLUT_LDFLAGS=""])
+
+ AC_SUBST([GLUT_CFLAGS])
+ AC_SUBST([GLUT_LIBS])
+ AC_SUBST([GLUT_LDFLAGS])
+])