http://packetstormsecurity.org/UNIX/admin/xscreensaver-3.29.tar.gz
[xscreensaver] / configure.in
index 164e6d8e739ff73cc043ea779894e1a0aeb4b9ff..5e95dd60ec3c8faae440e967128eb3806a74e24d 100644 (file)
@@ -66,8 +66,6 @@ AC_DEFUN(AC_PROG_CC_ANSI,
   if test -n "$GCC"; then
     AC_MSG_RESULT(Turning on gcc compiler warnings.)
     CC="$CC -Wall -Wstrict-prototypes -Wnested-externs -Wno-format"
-    AC_MSG_RESULT(Disabling C++ comments in ANSI C code.)
-    CC="$CC -Wp,-lang-c89"
   else
     case "$host" in
       *-irix5* |*-irix6.[0-3]* )
@@ -87,31 +85,57 @@ AC_DEFUN(AC_PROG_CC_ANSI,
 
 ###############################################################################
 #
-#       Function to work around the fucked up gcc 2.96 included in Red Hat 7.0
+#       Functions to figure out how to disable // comments in ANSI C code.
+#
+#       (With recent gcc, this is done with "-std=c89".  With older gcc, this
+#       is done by passing "-lang-c89" to cpp, by passing "-Wp,-lang-c89" to
+#       gcc.  Old gcc doesn't support -std, and new gcc doesn't support -lang.
+#       so much for compatibility!)
 #
 ###############################################################################
 
-AC_DEFUN(AC_ESCHEW_REDHAT_GCC_LOSSAGE,
+AC_DEFUN(AC_GCC_ACCEPTS_STD,
  [if test -n "$GCC"; then
-   AC_MSG_CHECKING(for Red Hat GCC lossage)
-   AC_CACHE_VAL(ac_cv_red_hat_gcc_lossage,
-    [ac_cv_red_hat_gcc_lossage=no
-      AC_EGREP_CPP(lossage,
-     [#include <stdlib.h>
-      #if !defined(__USE_POSIX) || !defined(__USE_SVID) || !defined(__USE_BSD)
-        lossage
-      #endif
-     ], ac_cv_red_hat_gcc_lossage=yes)
-    ])
+   AC_CACHE_CHECK([whether gcc accepts -std],
+     ac_cv_gcc_accepts_std,
+    [if ( gcc -E -std=c89 - </dev/null 2>&1 >/dev/null | \
+          grep unrecognized >/dev/null ); then
+       ac_cv_gcc_accepts_std=no
+     else
+       ac_cv_gcc_accepts_std=yes
+     fi])
+   ac_gcc_accepts_std="$ac_cv_gcc_accepts_std"
+  fi
+])
 
-    ac_red_hat_gcc_lossage=$ac_cv_red_hat_gcc_lossage
-    if test "$ac_cv_red_hat_gcc_lossage" = yes ; then
-      rh_defines="-D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE";
-      CC="$CC $rh_defines"
-      AC_MSG_RESULT(yes: need $rh_defines)
-    else
-      AC_MSG_RESULT(no)
-    fi
+AC_DEFUN(AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE,
+ [if test -n "$GCC"; then
+   AC_GCC_ACCEPTS_STD
+   AC_MSG_RESULT(Disabling C++ comments in ANSI C code.)
+   #
+   # The reason that // comments are banned from xscreensaver is that gcc is
+   # basically the only compiler in the world that supports them in C code.
+   # All other vendors support them only in their C++ compilers, not in their
+   # ANSI C compilers.  This means that it's a portability problem: every time
+   # these comments have snuck into the xscreensaver source code, I've gotten
+   # complaints about it the next day.  So we turn off support for them in gcc
+   # as well to prevent them from accidentially slipping in.
+   #
+   if test "$ac_gcc_accepts_std" = yes ; then
+     #
+     # -std=c89 defines __STRICT_ANSI__, which we don't want.
+     # (That appears to be the only additional preprocessor symbol
+     # it defines, in addition to the syntax changes it makes.)
+     #
+     # -std=gnu89 is no good, because // comments were a GNU extension
+     # before they were in the ANSI C 99 spec...  (gcc 2.96 permits //
+     # with -std=gnu89 but not with -std=c89.)
+     #
+     CC="$CC -std=c89 -U__STRICT_ANSI__"
+   else
+     # The old way:
+     CC="$CC -Wp,-lang-c89"
+   fi
   fi
 ])
 
@@ -281,7 +305,12 @@ AC_DEFUN(AC_CHECK_ICMP,
                    i.icmp_id = 0;
                    i.icmp_seq = 0;
                    si.sin_family = AF_INET;
-                   ip.ip_hl = 0;],
+                   #if defined(__DECC) || defined(_IP_VHL)
+                   ip.ip_vhl = 0;
+                   #else
+                   ip.ip_hl = 0;
+                   #endif
+                   ],
                   [ac_cv_have_icmp=yes],
                   [ac_cv_have_icmp=no])])
  if test "$ac_cv_have_icmp" = yes ; then
@@ -705,7 +734,7 @@ AC_DEFUN(HANDLE_X_PATH_ARG, [
 # random compiler setup
 AC_CANONICAL_HOST
 AC_PROG_CC_ANSI
-AC_ESCHEW_REDHAT_GCC_LOSSAGE
+AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE
 AC_PROG_CPP
 AC_C_CONST
 AC_C_INLINE
@@ -1039,7 +1068,7 @@ if test "$with_dpms" = yes; then
     # if that failed, look in -lXdpms (this is where it was in XFree86 3.x)
     if test "$have_dpms" = no; then
       AC_CHECK_X_LIB(Xdpms, DPMSInfo,
-                    [have_dpms=yes; SAVER_LIBS="$SAVER_LIBS -lXdpms"], [true],
+                    [have_dpms=yes; XDPMS_LIBS="-lXdpms"], [true],
                     -lXext -lX11)
     fi
   fi
@@ -1946,7 +1975,7 @@ if test "$with_gl" = yes; then
     #
     AC_CACHE_CHECK([whether GL is really MesaGL], ac_cv_have_mesa_gl,
       [ac_cv_have_mesa_gl=no
-       AC_EGREP_X_HEADER(Mesa, GL/glx.h, [ac_cv_have_mesa_gl=yes])
+       AC_EGREP_X_HEADER(Mesa|MESA, GL/glx.h, [ac_cv_have_mesa_gl=yes])
       ])
     ac_have_mesa_gl=$ac_cv_have_mesa_gl
  
@@ -2012,6 +2041,11 @@ if test "$with_gl" = yes; then
 #line __oline__ "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
+#ifndef MESA_MAJOR_VERSION
+# include <GL/xmesa.h>
+# define MESA_MAJOR_VERSION XMESA_MAJOR_VERSION
+# define MESA_MINOR_VERSION XMESA_MINOR_VERSION
+#endif
 configure: MESA_MAJOR_VERSION MESA_MINOR_VERSION
 EOF
 
@@ -2582,6 +2616,7 @@ AC_SUBST(HACK_LIBS)
 AC_SUBST(XPM_LIBS)
 AC_SUBST(GL_LIBS)
 AC_SUBST(GLE_LIBS)
+AC_SUBST(XDPMS_LIBS)
 AC_SUBST(PASSWD_LIBS)
 AC_SUBST(INSTALL_SETUID)
 AC_SUBST(INSTALL_DIRS)