Commit 90d5ca8496bd5e2d5dd1409ede3ae4167aeddada

marcelo 2003-04-14T09:18:03

Adapt to utterly broken setups with extremely fscked up OpenGL installations. The script will check for -lGL, -lGL + X flags or whatever the user provides. Same thing for GLUT. If *this* fails, the user will get a friendly message stating that he should pass the proper location for the GL libraries on the configure line.

diff --git a/unix/m4/gl.m4 b/unix/m4/gl.m4
index 062837c..fb05939 100644
--- a/unix/m4/gl.m4
+++ b/unix/m4/gl.m4
@@ -3,14 +3,63 @@ dnl Check for OpenGL development environment and GLU >= 1.2
 dnl
 AC_DEFUN([FTGL_CHECK_GL],
 [dnl
-AC_CHECK_HEADER([GL/gl.h])
-AC_CHECK_LIB(GL, [glBegin], [],
-    [AC_MSG_NOTICE([GL not found in the compiler's path, looking in the X11 tree])
-     unset ac_cv_lib_GL_glBegin
-     LDFLAGS="-L${x_libraries} $LDFLAGS"
-     AC_CHECK_LIB(GL, [glBegin], [],
-         [AC_MSG_ERROR([libGL is required to compile this library])])
-    ])
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_PATH_X])
+AC_REQUIRE([AC_PATH_XTRA])
+
+AC_ARG_WITH([--with-gl-inc],
+    AC_HELP_STRING([--with-gl-inc=DIR],[Directory where GL/gl.h is installed]))
+AC_ARG_WITH([--with-gl-lib],
+    AC_HELP_STRING([--with-gl-lib=DIR],[Directory where OpenGL libraries are installed]))
+
+AC_LANG_SAVE
+AC_LANG_C
+
+GL_SAVE_CPPFLAGS="$CPPFLAGS"
+GL_SAVE_LIBS="$LIBS"
+
+if test "x$no_x" != xyes ; then
+    GL_CFLAGS="$X_CFLAGS"
+    GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu $X_EXTRA_LIBS"
+fi
+
+if test "x$with_gl_inc" != "xnone" ; then
+    if test -d "$with_gl_inc" ; then
+        GL_CFLAGS="-I$with_gl_inc"
+    else
+        GL_CFLAGS="$with_gl_inc"
+    fi
+else
+    GL_CFLAGS=
+fi
+
+CPPFLAGS="$GL_CFLAGS"
+AC_CHECK_HEADER([GL/gl.h], [], [AC_MSG_ERROR(GL/gl.h is needed, please specify its location with --with-gl-inc)])
+
+AC_MSG_CHECKING([for GL library])
+if test "x$with_gl_lib" != "x" ; then
+    if test -d "$with_gl_lib" ; then
+        LIBS="-L$with_gl_lib -lGL"
+    else
+        LIBS="$with_gl_lib"
+    fi
+else
+    LIBS="-lGL"
+fi
+AC_LINK_IFELSE([AC_LANG_CALL([],[glBegin])],[HAVE_GL=yes], [HAVE_GL=no])
+if test "x$HAVE_GL" = xno ; then
+    if test "x$GL_X_LIBS" != x ; then
+        LIBS="-lGL $GL_X_LIBS"
+        AC_LINK_IFELSE([AC_LANG_CALL([],[glBegin])],[HAVE_GL=yes], [HAVE_GL=no])
+    fi
+fi
+if test "x$HAVE_GL" = xyes ; then
+    AC_MSG_RESULT([yes])
+    GL_LIBS=$LIBS
+else
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([GL library could not be found, please specify its location with --with-gl-lib])
+fi
 
 AC_CHECK_HEADER([GL/glu.h])
 AC_MSG_CHECKING([for GLU version >= 1.2])
@@ -23,6 +72,29 @@ AC_TRY_COMPILE([#include <GL/glu.h>], [
                [AC_MSG_RESULT([no])
                 AC_MSG_ERROR([GLU >= 1.2 is needed to compile this library])
                ])
-AC_CHECK_LIB(GLU, [gluNewTess],
-             [], [AC_MSG_ERROR([libGLU is required to compile this library])])
+
+AC_MSG_CHECKING([for GLU library])
+LIBS="-lGLU $GL_LIBS"
+AC_LINK_IFELSE([AC_LANG_CALL([],[gluNewTess])],[HAVE_GLU=yes], [HAVE_GLU=no])
+if test "x$HAVE_GLU" = xno ; then
+    if test "x$GL_X_LIBS" != x ; then
+        LIBS="-lGLU $GL_LIBS $GL_X_LIBS"
+        AC_LINK_IFELSE([AC_LANG_CALL([],[gluNewTess])],[HAVE_GLU=yes], [HAVE_GLU=no])
+    fi
+fi
+if test "x$HAVE_GLU" = xyes ; then
+    AC_MSG_RESULT([yes])
+    GL_LIBS="$LIBS"
+else
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([GLU library could not be found, please specify its location with --with-gl-lib])
+fi
+
+AC_SUBST(GL_CFLAGS)
+AC_SUBST(GL_LIBS)
+
+CPPFLAGS="$GL_SAVE_CPPFLAGS"
+LIBS="$GL_SAVE_LIBS"
+AC_LANG_RESTORE
+GL_X_LIBS=""
 ])
diff --git a/unix/m4/glut.m4 b/unix/m4/glut.m4
index e300715..5a65776 100644
--- a/unix/m4/glut.m4
+++ b/unix/m4/glut.m4
@@ -3,23 +3,98 @@ dnl Check for GLUT development environment
 dnl
 AC_DEFUN([FTGL_CHECK_GLUT],
 [dnl
-AC_CHECK_HEADER([GL/glut.h])
-AC_CHECK_LIB(glut, [glutInit],
-             [LIBGLUT=-lglut],
-             [])
-
-# Work-arround for broken dynamic linkers and/or systems with non-broken
-# linkers but suffering from PEBKAC.  The list of libraries is a bit
-# over-generous, AFAIK -lXi is needed only on (some versions of?) SuSE
-
-if test -z "${LIBGLUT}" ; then
-    echo "Couldn't find GLUT, trying again with extra linker flags"
-    unset ac_cv_lib_glut_glutInit
-    AC_CHECK_LIB(glut, [glutInit],
-                [LIBGLUT=-lglut],
-                AC_MSG_ERROR([libglut is required to compile this library]),
-                [-lX11 -lXmu -lXi -lm])
-    LIBGLUT="$LIBGLUT -lX11 -lXmu -lXi -lm"
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PATH_X])dnl
+AC_REQUIRE([AC_PATH_XTRA])dnl
+AC_REQUIRE([FTGL_CHECK_GL])dnl
+
+AC_ARG_WITH([--with-glut-inc],
+    AC_HELP_STRING([--with-glut-inc=DIR],[Directory where GL/glut.h is installed (optional)]))
+AC_ARG_WITH([--with-glut-lib],
+    AC_HELP_STRING([--with-glut-lib=DIR],[Directory where GLUT libraries are installed (optional)]))
+
+AC_LANG_SAVE
+AC_LANG_C
+
+GLUT_SAVE_CPPFLAGS="$CPPFLAGS"
+GLUT_SAVE_LIBS="$LIBS"
+
+if test "x$no_x" != xyes ; then
+    GLUT_CFLAGS="$X_CFLAGS"
+    GLUT_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu $X_EXTRA_LIBS"
+fi
+
+if test "x$with_glut_inc" != "xnone" ; then
+    if test -d "$with_glut_inc" ; then
+        GLUT_CFLAGS="-I$with_glut_inc"
+    else
+        GLUT_CFLAGS="$with_glut_inc"
+    fi
+else
+    GLUT_CFLAGS=
+fi
+
+CPPFLAGS="$GLUT_CFLAGS"
+AC_CHECK_HEADER([GL/glut.h], [HAVE_GLUT=yes], [HAVE_GLUT=no])
+
+if test "x$HAVE_GLUT" = xno ; then
+    AC_MSG_WARN([GLUT headers not availabe, example program won't be compiled.])
+else
+
+# Check for GLUT libraries
+
+    AC_MSG_CHECKING([for GLUT library])
+    if test "x$with_glut_lib" != "x" ; then
+        if test -d "$with_glut_lib" ; then
+            LIBS="-L$with_glut_lib -lglut"
+        else
+            LIBS="$with_glut_lib"
+        fi
+    else
+        LIBS="-lglut"
+    fi
+    AC_LINK_IFELSE(
+        [AC_LANG_CALL([],[glutInit])],
+        [HAVE_GLUT=yes],
+        [HAVE_GLUT=no])
+
+    if test "x$HAVE_GLUT" = xno ; then
+        # Try again with the GL libs
+        LIBS="-lglut $GL_LIBS"
+        AC_LINK_IFELSE(
+            [AC_LANG_CALL([],[glutInit])],
+            [HAVE_GLUT=yes],
+            [HAVE_GLUT=no])
+    fi
+
+    if test "x$HAVE_GLUT" = xno && test "x$GLUT_X_LIBS" != x ; then
+        # Try again with the GL and X11 libs
+        LIBS="-lglut $GL_LIBS $GLUT_X_LIBS"
+        AC_LINK_IFELSE(
+            [AC_LANG_CALL([],[glutInit])],
+            [HAVE_GLUT=yes],
+            [HAVE_GLUT=no])
+    fi
+
+    if test "x$HAVE_GLUT" = xyes ; then
+        AC_MSG_RESULT([yes])
+        GLUT_LIBS=$LIBS
+    else
+        AC_MSG_RESULT([no])
+        AC_MSG_WARN([GLUT libraries not availabe, example program won't be compiled.])
+    fi
+
+# End check for GLUT libraries
+
 fi
-AC_SUBST(LIBGLUT)
+
+AC_SUBST(HAVE_GLUT)
+AC_SUBST(GLUT_CFLAGS)
+AC_SUBST(GLUT_LIBS)
+AC_LANG_RESTORE
+
+CPPFLAGS="$GLUT_SAVE_CPPFLAGS"
+LIBS="$GLUT_SAVE_LIBS"
+GLUT_X_CFLAGS=
+GLUT_X_LIBS=
 ])