# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_glu.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GLU([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # Checks for GLUT. If a valid GLU implementation is found, the configure # script would export the C preprocessor symbol "HAVE_GLU=1". # # If either a valid GLU header or library was not found, by default the # configure script would exit on error. This behavior can be overwritten # by providing a custom "ACTION-IF-NOT-FOUND" hook. # # If the header, library was found, and been tested for compiling and # linking the configuration would export the required compiler flags to # "GLU_CFLAGS" and "GLU_LIBS" environment variables. These two variables # can also be overwritten by defining the environment variables before # executing the configure program. If it was predefined, configure would # not try to overwrite it, but it would still perform the compile and link # test. Only when the tests succeeded does the configure script to export # "HAVE_GLU=1" and to run "ACTION-IF-FOUND" hook. # # If user didn't specify the "ACTION-IF-FOUND" hook, the configuration # would prepend "GLU_CFLAGS" and "GLU_LIBS" to "CFLAGS" and "LIBS", like # many other autoconf macros do. # # If the header "GL/glu.h" is found, "HAVE_GL_GLU_H" is defined. If the # header "OpenGL/glu.h" is found, HAVE_OPENGL_GLU_H is defined. # # You should use something like this in your headers: # # # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # # include # # endif # # if defined(HAVE_GL_GLU_H) # # include # # elif defined(HAVE_OPENGL_GLU_H) # # include # # else # # error no glu.h # # endif # # On the OSX platform, you can use the option --with-xquartz-gl to use # X11/Xquartz GLU implementation instead of the system built in GLU # framework. # # Some implementations (in particular, some versions of Mac OS X) are # known to treat the GLU tesselator callback function type as "GLvoid # (*)(...)" rather than the standard "GLvoid (*)()". If the former # condition is detected, this macro defines "HAVE_VARARGS_GLU_TESSCB". # # LICENSE # # Copyright (c) 2009 Braden McDaniel # Copyright (c) 2013 Bastien Roucaries # Copyright (c) 2016 Felix Chern # # 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 # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 23 # example program m4_define([_AX_CHECK_GLU_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif ]],[[gluBeginCurve(0)]])]) dnl Default include : add windows.h dnl see http://www.opengl.org/wiki/Platform_specifics:_Windows dnl (acceded 20120801) AC_DEFUN([_AX_CHECK_GLU_INCLUDES_DEFAULT],dnl [ AC_INCLUDES_DEFAULT [ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif ] ]) # check tesselation callback function signature. m4_define([_AX_CHECK_GLU_VARARGS_TESSVB_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif ]], [[GLvoid (*func)(...); gluTessCallback(0, 0, func)]]) ]) # _AX_CHECK_GLU_SAVE_FLAGS(LIST-OF-FLAGS,[LANG]) # ---------------------------------------------- # Save the flags to shell variables. # Example: _AX_CHECK_GLU_SAVE_FLAGS([[CFLAGS],[LIBS]]) expands to # AC_LANG_PUSH([C]) # glu_saved_flag_cflags=$CFLAGS # glu_saved_flag_libs=$LIBS # CFLAGS="$GLU_CFLAGS $CFLAGS" # LIBS="$GLU_LIBS $LIBS" # # Can optionally support other LANG by specifying $2 AC_DEFUN([_AX_CHECK_GLU_SAVE_FLAGS], [ m4_ifval([$2], [AC_LANG_PUSH([$2])], [AC_LANG_PUSH([C])]) AX_SAVE_FLAGS_WITH_PREFIX([GLU],[$1]) dnl defined in ax_check_gl ]) # _AX_CHECK_GLU_RESTORE_FLAGS(LIST-OF-FLAGS) # Use this marcro to restore the flags you saved using # _AX_CHECK_GLU_SAVE_FLAGS # # Example: _AX_CHECK_GLU_RESTORE_FLAGS([[CFLAGS],[LIBS]]) expands to # CFLAGS="$glu_saved_flag_cflags" # LIBS="$glu_saved_flag_libs" # AC_LANG_POP([C]) AC_DEFUN([_AX_CHECK_GLU_RESTORE_FLAGS], [ AX_RESTORE_FLAGS_WITH_PREFIX([GLU],[$1]) dnl defined in ax_check_gl m4_ifval([$2], [AC_LANG_POP([$2])], [AC_LANG_POP([C])]) ]) # Search headers and export $ax_check_glu_have_headers AC_DEFUN([_AX_CHECK_GLU_HEADERS], [ _AX_CHECK_GLU_SAVE_FLAGS([CFLAGS]) AC_CHECK_HEADERS([$1], [ax_check_glu_have_headers="yes";], [], [_AX_CHECK_GLU_INCLUDES_DEFAULT()]) _AX_CHECK_GLU_RESTORE_FLAGS([CFLAGS]) ]) # _AX_CHECK_GLU_SEARCH_LIBS(LIBS) # ------------------------------- # Search for a valid GLU lib from $1 and set # GLU_LIBS respectively AC_DEFUN([_AX_CHECK_GLU_SEARCH_LIBS], [ _AX_CHECK_GLU_SAVE_FLAGS([[CFLAGS],[LIBS]]) AC_SEARCH_LIBS([gluBeginCurve],[$1], [GLU_LIBS="${GLU_LIBS:-$ac_cv_search_gluBeginCurve}"]) _AX_CHECK_GLU_RESTORE_FLAGS([[CFLAGS],[LIBS]]) ]) # OSX specific GLU checks AC_DEFUN([_AX_CHECK_DARWIN_GLU], [ AC_REQUIRE([_WITH_XQUARTZ_GL]) AS_IF([test "x$with_xquartz_gl" != "xno"], [GLU_LIBS="${GLU_LIBS:--lGLU}"], [GLU_LIBS="${GLU_LIBS:--framework OpenGL}"]) ]) # AX_CHECK_GLU([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # ----------------------------------------------------- # Checks GLU and provides hooks for success and failures AC_DEFUN([AX_CHECK_GLU],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([_WITH_XQUARTZ_GL]) AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_ARG_VAR([GLU_CFLAGS],[C compiler flags for GLU, overriding system check]) AC_ARG_VAR([GLU_LIBS],[Linker flags for GLU, overriding system check]) dnl Setup GLU_CFLAGS and GLU_LIBS AS_CASE([${host}], [*-darwin*],[_AX_CHECK_DARWIN_GLU], [*-cygwin*],[_AX_CHECK_GLU_SEARCH_LIBS([GLU glu MesaGLU glu32]) AC_CHECK_HEADERS([windows.h])], # try first native [*-mingw*],[_AX_CHECK_GLU_SEARCH_LIBS([glu32 GLU glu MesaGLU]) AC_CHECK_HEADERS([windows.h])], [PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([GLU],[glu], [], [_AX_CHECK_GLU_SEARCH_LIBS([GLU glu MesaGLU])]) ]) AS_CASE([$host], [*-darwin*], [AS_IF([test "X$with_xquartz_gl" = "Xno"], [_AX_CHECK_GLU_HEADERS([OpenGL/glu.h])], [_AX_CHECK_GLU_HEADERS([GL/glu.h])] )], [_AX_CHECK_GLU_HEADERS([GL/glu.h])]) dnl compile test AS_IF([test "X$ax_check_glu_have_headers" = "Xyes"], [AC_CACHE_CHECK([for compiling a minimal OpenGL Utility (GLU) program], [ax_cv_check_glu_compile], [_AX_CHECK_GLU_SAVE_FLAGS([CFLAGS]) AC_COMPILE_IFELSE([_AX_CHECK_GLU_PROGRAM], [ax_cv_check_glu_compile="yes"], [ax_cv_check_glu_compile="no"]) _AX_CHECK_GLU_RESTORE_FLAGS([CFLAGS])]) ]) dnl link test AS_IF([test "X$ax_cv_check_glu_compile" = "Xyes"], [AC_CACHE_CHECK([for linking a minimal GLU program], [ax_cv_check_glu_link], [_AX_CHECK_GLU_SAVE_FLAGS([[CFLAGS],[LIBS]]) AC_LINK_IFELSE([_AX_CHECK_GLU_PROGRAM], [ax_cv_check_glu_link="yes"], [ax_cv_check_glu_link="no"]) _AX_CHECK_GLU_RESTORE_FLAGS([[CFLAGS],[LIBS]])]) ]) # # Some versions of Mac OS X include a broken interpretation of the GLU # tesselation callback function signature. AS_IF([test "X$ax_cv_check_glu_link" = "Xyes"], [AC_CACHE_CHECK([if GLU varargs tesselator is using non-standard form], [ax_cv_varargs_glu_tesscb], [_AX_CHECK_GLU_SAVE_FLAGS([CFLAGS],[C++]) AC_COMPILE_IFELSE([_AX_CHECK_GLU_VARARGS_TESSVB_PROGRAM], [ax_cv_varargs_glu_tesscb="yes"], [ax_cv_varargs_glu_tesscb="no"]) _AX_CHECK_GLU_RESTORE_FLAGS([CFLAGS],[C++])]) AS_IF([test "X$ax_cv_varargs_glu_tesscb" = "yes"], [AC_DEFINE([HAVE_VARARGS_GLU_TESSCB], [1], [Use nonstandard varargs form for the GLU tesselator callback])]) ]) dnl hook AS_IF([test "X$ax_cv_check_glu_link" = "Xyes"], [AC_DEFINE([HAVE_GLU],[1],[Defined if a valid GLU implementation is found.]) m4_ifval([$1], [$1], [CFLAGS="$GLU_CFLAGS $CFLAGS" LIBS="$GLU_LIBS $LIBS"])], [m4_ifval([$2], [$2], [AC_MSG_ERROR([Could not find a valid GLU implementation])]) ]) ])