Revert "Some fixes for the pager popups, and avoid a crash if you destroy a popup...
[mikachu/openbox.git] / m4 / x11.m4
index f070b12..fc7b36e 100644 (file)
--- a/m4/x11.m4
+++ b/m4/x11.m4
@@ -1,16 +1,20 @@
 # X11_DEVEL()
 #
 # Check for the presence of the X Window System headers and libraries.
-# Sets the CXXFLAGS and LIBS variables as appropriate.
+# Sets the CPPFLAGS and LIBS variables as appropriate.
 AC_DEFUN([X11_DEVEL],
 [
-  AC_PATH_X
   AC_PATH_XTRA
   test "$no_x" = "yes" && \
     AC_MSG_ERROR([The X Window System could not be found.])
+
+  # Store these
+  OLDLIBS=$LIBS
+  OLDCPPFLAGS=$CPPFLAGS
      
-  CXXFLAGS="$CXXFLAGS $X_CFLAGS"
-  LIBS="$LIBS $X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS"
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  X_LIBS="$X_PRE_LIBS $X_LIBS -lX11"
+  LIBS="$LIBS $X_LIBS"
 
   # Check for required functions in -lX11
   AC_CHECK_LIB(
@@ -18,6 +22,11 @@ AC_DEFUN([X11_DEVEL],
     ,
     AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
   )
+
+  # Restore the old values. Use X_CFLAGS and X_LIBS in
+  # the Makefiles
+  LIBS=$OLDLIBS
+  CPPFLAGS=$OLDCPPFLAGS
 ])
 
 
@@ -43,13 +52,14 @@ AC_DEFUN([XFT_ERROR],
 AC_DEFUN([XFT_DEVEL],
 [
   AC_REQUIRE([X11_DEVEL])
-
+  
   if test "$1"; then
-    XFT_MIN=$1
+    XFT_MIN="$1"
     XFT_MIN_MAJOR=${XFT_MIN%.*.*}
     XFT_MIN_MINOR=${XFT_MIN%.*}
     XFT_MIN_MINOR=${XFT_MIN_MINOR#*.}
     XFT_MIN_REVISION=${XFT_MIN#*.*.}
+    XFT_MIN="$XFT_MIN_MAJOR.$XFT_MIN_MINOR.$XFT_MIN_REVISION"
   else
     XFT_MIN=""
   fi
@@ -72,16 +82,16 @@ AC_DEFUN([XFT_DEVEL],
 
   # Store these
   OLDLIBS=$LIBS
-  OLDCXXFLAGS=$CXXFLAGS
+  OLDCPPFLAGS=$CPPFLAGS
 
   XFT_CFLAGS="`pkg-config --cflags xft`"
   XFT_LIBS="`pkg-config --libs xft`"
 
   # Set these for checking with the tests below. They'll be restored after
   LIBS="$LIBS $XFT_LIBS"
-  CXXFLAGS="$XFT_CFLAGS $CXXFLAGS"
+  CPPFLAGS="$XFT_CFLAGS $CPPFLAGS"
 
-  AC_CHECK_LIB([Xft], [XftFontOpenName],
+  AC_CHECK_LIB([Xft], [XftGetVersion], # this was not defined in < 2.0
     if test "$XFT_MIN"; then
       AC_MSG_CHECKING([for X11/Xft/Xft.h for Xft >= $XFT_MIN])
       AC_TRY_COMPILE(
@@ -159,10 +169,330 @@ AC_DEFUN([XFT_DEVEL],
     ])
   )
 
-# Restore the old values. Use XFT_CFLAGS and XFT_LIBS in the Makefile.am's
+  # Restore the old values. Use XFT_CFLAGS and XFT_LIBS in the Makefiles
   LIBS=$OLDLIBS
-  CXXFLAGS=$OLDCXXFLAGS
+  CPPFLAGS=$OLDCPPFLAGS
 
   AC_SUBST([XFT_CFLAGS])
   AC_SUBST([XFT_LIBS])
 ])
+
+
+# X11_EXT_XKB()
+#
+# Check for the presence of the "Xkb" X Window System extension.
+# Defines "XKB" and sets the $(XKB) variable to "yes" if the extension is
+# present.
+AC_DEFUN([X11_EXT_XKB],
+[
+  AC_REQUIRE([X11_DEVEL])
+
+  # Store these
+  OLDLIBS=$LIBS
+  OLDCPPFLAGS=$CPPFLAGS
+     
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  LIBS="$LIBS $X_LIBS"
+
+  AC_CHECK_LIB([X11], [XkbBell],
+    AC_MSG_CHECKING([for X11/XKBlib.h])
+    AC_TRY_LINK(
+    [
+      #include <X11/Xlib.h>
+      #include <X11/Xutil.h>
+      #include <X11/XKBlib.h>
+    ],
+    [
+      Display *d;
+      Window w;
+      XkbBell(d, w, 0, 0);
+    ],
+    [
+      AC_MSG_RESULT([yes])
+      XKB="yes"
+      AC_DEFINE([XKB], [1], [Found the XKB extension])
+
+      XKB_CFLAGS=""
+      XKB_LIBS=""
+      AC_SUBST(XKB_CFLAGS)
+      AC_SUBST(XKB_LIBS)
+    ],
+    [ 
+      AC_MSG_RESULT([no])
+      XKB="no"
+    ])
+  )
+
+  LIBS=$OLDLIBS
+  CPPFLAGS=$OLDCPPFLAGS
+
+  AC_MSG_CHECKING([for the Xkb extension])
+  if test "$XKB" = "yes"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+# X11_EXT_XRANDR()
+#
+# Check for the presence of the "XRandR" X Window System extension.
+# Defines "XRANDR" and sets the $(XRANDR) variable to "yes" if the extension is
+# present.
+AC_DEFUN([X11_EXT_XRANDR],
+[
+  AC_REQUIRE([X11_DEVEL])
+
+  # Store these
+  OLDLIBS=$LIBS
+  OLDCPPFLAGS=$CPPFLAGS
+     
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  LIBS="$LIBS $X_LIBS -lXext -lXrender -lXrandr"
+
+  AC_CHECK_LIB([Xrandr], [XRRSelectInput],
+    AC_MSG_CHECKING([for X11/extensions/Xrandr.h])
+    AC_TRY_LINK(
+    [
+      #include <X11/Xlib.h>
+      #include <X11/extensions/Xrandr.h>
+    ],
+    [
+      Display *d;
+      Drawable r;
+      int i;
+      XRRQueryExtension(d, &i, &i);
+      XRRGetScreenInfo(d, r);
+    ],
+    [
+      AC_MSG_RESULT([yes])
+      XRANDR="yes"
+      AC_DEFINE([XRANDR], [1], [Found the XRandR extension])
+
+      XRANDR_CFLAGS=""
+      XRANDR_LIBS="-lXext -lXrender -lXrandr"
+      AC_SUBST(XRANDR_CFLAGS)
+      AC_SUBST(XRANDR_LIBS)
+    ],
+    [ 
+      AC_MSG_RESULT([no])
+      XRANDR="no"
+    ])
+  )
+
+  LIBS=$OLDLIBS
+  CPPFLAGS=$OLDCPPFLAGS
+
+  AC_MSG_CHECKING([for the XRandR extension])
+  if test "$XRANDR" = "yes"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+# X11_EXT_SHAPE()
+#
+# Check for the presence of the "Shape" X Window System extension.
+# Defines "SHAPE", sets the $(SHAPE) variable to "yes", and sets the $(LIBS)
+# appropriately if the extension is present.
+AC_DEFUN([X11_EXT_SHAPE],
+[
+  AC_REQUIRE([X11_DEVEL])
+
+  # Store these
+  OLDLIBS=$LIBS
+  OLDCPPFLAGS=$CPPFLAGS
+     
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  LIBS="$LIBS $X_LIBS"
+
+  AC_CHECK_LIB([Xext], [XShapeCombineShape],
+    AC_MSG_CHECKING([for X11/extensions/shape.h])
+    AC_TRY_LINK(
+    [
+      #include <X11/Xlib.h>
+      #include <X11/Xutil.h>
+      #include <X11/extensions/shape.h>
+    ],
+    [
+      long foo = ShapeSet;
+    ],
+    [
+      AC_MSG_RESULT([yes])
+      SHAPE="yes"
+      AC_DEFINE([SHAPE], [1], [Found the XShape extension])
+
+      XSHAPE_CFLAGS=""
+      XSHAPE_LIBS="-lXext"
+      AC_SUBST(XSHAPE_CFLAGS)
+      AC_SUBST(XSHAPE_LIBS)
+    ],
+    [ 
+      AC_MSG_RESULT([no])
+      SHAPE="no"
+    ])
+  )
+
+  LIBS=$OLDLIBS
+  CPPFLAGS=$OLDCPPFLAGS
+  AC_MSG_CHECKING([for the Shape extension])
+  if test "$SHAPE" = "yes"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+
+# X11_EXT_XINERAMA()
+#
+# Check for the presence of the "Xinerama" X Window System extension.
+# Defines "XINERAMA", sets the $(XINERAMA) variable to "yes", and sets the
+# $(LIBS) appropriately if the extension is present.
+AC_DEFUN([X11_EXT_XINERAMA],
+[
+  AC_REQUIRE([X11_DEVEL])
+
+  # Store these
+  OLDLIBS=$LIBS
+  OLDCPPFLAGS=$CPPFLAGS
+     
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  LIBS="$LIBS $X_LIBS -lXext"
+
+  AC_CHECK_LIB([Xinerama], [XineramaQueryExtension],
+  [
+    AC_MSG_CHECKING([for X11/extensions/Xinerama.h])
+    AC_TRY_LINK(
+    [
+      #include <X11/Xlib.h>
+      #include <X11/extensions/Xinerama.h>
+    ],
+    [
+      XineramaScreenInfo foo;
+    ],
+    [
+      AC_MSG_RESULT([yes])
+      XINERAMA="yes"
+      AC_DEFINE([XINERAMA], [1], [Enable support of the Xinerama extension])
+      XINERAMA_LIBS="-lXext -lXinerama"
+      AC_SUBST(XINERAMA_LIBS)
+    ],
+    [
+      AC_MSG_RESULT([no])
+      XINERAMA="no"
+    ])
+  ])
+
+  LIBS=$OLDLIBS
+  CPPFLAGS=$OLDCPPFLAGS
+
+  AC_MSG_CHECKING([for the Xinerama extension])
+  if test "$XINERAMA" = "yes"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+# X11_EXT_SYNC()
+#
+# Check for the presence of the "Sync" X Window System extension.
+# Defines "SYNC", sets the $(SYNC) variable to "yes", and sets the $(LIBS)
+# appropriately if the extension is present.
+AC_DEFUN([X11_EXT_SYNC],
+[
+  AC_REQUIRE([X11_DEVEL])
+
+  # Store these
+  OLDLIBS=$LIBS
+  OLDCPPFLAGS=$CPPFLAGS
+     
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  LIBS="$LIBS $X_LIBS"
+
+  AC_CHECK_LIB([Xext], [XSyncInitialize],
+    AC_MSG_CHECKING([for X11/extensions/sync.h])
+    AC_TRY_LINK(
+    [
+      #include <X11/Xlib.h>
+      #include <X11/Xutil.h>
+      #include <X11/extensions/sync.h>
+    ],
+    [
+      XSyncValueType foo;
+    ],
+    [
+      AC_MSG_RESULT([yes])
+      SYNC="yes"
+      AC_DEFINE([SYNC], [1], [Found the XSync extension])
+
+      XSYNC_CFLAGS=""
+      XSYNC_LIBS="-lXext"
+      AC_SUBST(XSYNC_CFLAGS)
+      AC_SUBST(XSYNC_LIBS)
+    ],
+    [ 
+      AC_MSG_RESULT([no])
+      SYNC="no"
+    ])
+  )
+
+  LIBS=$OLDLIBS
+  CPPFLAGS=$OLDCPPFLAGS
+  AC_MSG_CHECKING([for the Sync extension])
+  if test "$SYNC" = "yes"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
+# X11_SM()
+#
+# Check for the presence of SMlib for session management.
+# Defines "USE_SM" if SMlib is present.
+AC_DEFUN([X11_SM],
+[
+  AC_REQUIRE([X11_DEVEL])
+
+  AC_ARG_ENABLE([session-management],
+  AC_HELP_STRING(
+  [--disable-session-management], [build without support for session managers [[default=enabled]]]),
+  [SM=$enableval], [SM="yes"])
+  
+  if test "$SM" = "yes"; then
+    # Store these
+    OLDLIBS=$LIBS
+    OLDCPPFLAGS=$CPPFLAGS
+     
+    CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+    LIBS="$LIBS $X_LIBS"
+
+    SM="no"
+
+    AC_CHECK_LIB([SM], [SmcSaveYourselfDone], [
+      AC_CHECK_HEADERS([X11/SM/SMlib.h], [
+        SM_CFLAGS="$X_CFLAGS"
+        SM_LIBS="-lSM -lICE"
+        AC_DEFINE(USE_SM, 1, [Use session management])
+        AC_SUBST(SM_CFLAGS)
+        AC_SUBST(SM_LIBS)
+        SM="yes"
+      ])
+    ])
+  fi
+
+  LIBS=$OLDLIBS
+  CPPFLAGS=$OLDCPPFLAGS
+
+  AC_MSG_CHECKING([for session management support])
+  if test "$SM" = "yes"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])