fix build system for X, XShm and Xv
authorBenjamin Otte <otte@gnome.org>
Wed, 12 Nov 2003 03:06:07 +0000 (03:06 +0000)
committerBenjamin Otte <otte@gnome.org>
Wed, 12 Nov 2003 03:06:07 +0000 (03:06 +0000)
Original commit message from CVS:
fix build system for X, XShm and Xv

configure.ac
gst-libs/gst/Makefile.am
sys/Makefile.am
sys/ximage/Makefile.am
sys/ximage/ximagesink.c
sys/ximage/ximagesink.h

index 74aed82..78a0ebe 100644 (file)
@@ -254,19 +254,6 @@ AC_SUBST(GTK_CFLAGS)
 AC_SUBST(HAVE_GTK)
 AM_CONDITIONAL(HAVE_GDK_LOADERS, test "x$HAVE_GTK_22" = "xyes")
 
-dnl Check for X11 extensions
-AC_PATH_XTRA
-if test "-DX_DISPLAY_MISSING" = "$X_CFLAGS"; then
-  AC_MSG_NOTICE([cannot find X11, the build system needs fixage])
-fi
-dnl AC_PATH_XTRA only defines the path needed to find the X libs, not the libs
-dnl therefore we add them here
-X_LIBS="$X_LIBS -lX11"
-AC_SUBST(X_CFLAGS)
-AC_SUBST(X_PRE_LIBS)
-AC_SUBST(X_EXTRA_LIBS)
-AC_SUBST(X_LIBS)
-
 dnl ===========================================================================
 dnl ============================= gst plug-ins ================================
 dnl ===========================================================================
@@ -477,16 +464,23 @@ dnl               ;;
   fi
 ])
 
-dnl *** X check ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_XFREE, true)
-GST_CHECK_FEATURE(XFREE, [X11 XFree86],
-                  [ximagesink xvideosink], [
-   if test "$X_CFLAGS" = "-DX_DISPLAY_MISSING"; then
-     HAVE_XFREE=no
-   else
-     HAVE_XFREE=yes
-   fi
-])
+dnl Check for X11
+AC_PATH_XTRA
+if test "-DX_DISPLAY_MISSING" = "$X_CFLAGS"; then
+  AC_MSG_NOTICE([cannot find X11, the build system needs fixage])
+  HAVE_X="no"
+else
+  dnl this is much more than we want
+  X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS"
+  dnl AC_PATH_XTRA only defines the path needed to find the X libs, not the libs
+  dnl therefore we add them here
+  X_LIBS="$X_LIBS -lX11"
+  AC_SUBST(X_CFLAGS)
+  AC_SUBST(X_LIBS)
+  HAVE_X="yes";
+fi
+AC_SUBST(HAVE_X)
+AM_CONDITIONAL(USE_X, test "-DX_DISPLAY_MISSING" != "$X_CFLAGS")
 
 dnl *** XVideo ***
 dnl Look for the PIC library first, Debian requires it.
@@ -507,10 +501,10 @@ dnl Check for Xv extension
 translit(dnm, m, l) AM_CONDITIONAL(USE_XVIDEO, true)
 GST_CHECK_FEATURE(XVIDEO, [X11 XVideo extensions],
                   [xvimagesink xvideosink], [
-  if test x$HAVE_XFREE = xyes; then
+  if test x$HAVE_X = xyes; then
     AC_CHECK_LIB(Xv_pic, XvQueryExtension,
                 HAVE_XVIDEO="yes", HAVE_XVIDEO="no",
-                $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
+                $X_LIBS -lXext)
 
     if test x$HAVE_XVIDEO = xyes; then
       XVIDEO_LIBS="-lXv_pic -lXext"
@@ -520,7 +514,7 @@ GST_CHECK_FEATURE(XVIDEO, [X11 XVideo extensions],
       if test x$HAVE_XVIDEO = xno; then
         AC_CHECK_LIB(Xv, XvQueryExtension,
                   HAVE_XVIDEO="yes", HAVE_XVIDEO="no",
-                  $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
+                  $X_LIBS -lXext)
 
         if test x$HAVE_XVIDEO = xyes; then
           XVIDEO_LIBS="-lXv -lXext"
@@ -531,11 +525,29 @@ GST_CHECK_FEATURE(XVIDEO, [X11 XVideo extensions],
   fi
 ])
 
-dnl check for Shm
-translit(dnm, m, l) AM_CONDITIONAL(USE_SHM, true)
-GST_CHECK_FEATURE(SHM, [Shared Memory], ximage with shm, [
-  AC_CHECK_HEADER(sys/shm.h, HAVE_SHM="yes", HAVE_SHM="no")
-])
+dnl check for X Shm
+translit(dnm, m, l) AM_CONDITIONAL(USE_XSHM, true)
+GST_CHECK_FEATURE(XSHM, [X Shared Memory extension], xshm, [
+  if test x$HAVE_X = xyes; then
+    AC_CHECK_LIB(Xext, XShmAttach, 
+                HAVE_XSHM="yes", HAVE_XSHM="no",
+                $X_LIBS) 
+    if test "x$HAVE_XSHM" = "xyes"; then
+      XSHM_LIBS="-lXext"
+    else
+      dnl On AIX, it is in XextSam instead, but we still need -lXext
+      AC_CHECK_LIB(XextSam, XShmAttach, 
+                  HAVE_XSHM="yes", HAVE_XSHM="no",
+                  $X_LIBS) 
+      if test "x$HAVE_XSHM" = "xyes"; then
+       XSHM_LIBS="-lXext -lXextSam"
+      fi
+    fi
+  fi
+], , [ 
+  AC_SUBST(HAVE_XSHM) 
+  AC_SUBST(XSHM_LIBS) 
+] )
 
 dnl Next, check for the optional libraries:
 dnl These are all libraries used in building plug-ins
@@ -1341,14 +1353,15 @@ gst/y4m/Makefile
 sys/Makefile
 sys/cdrom/Makefile
 sys/dxr3/Makefile
+sys/glsink/Makefile
 sys/oss/Makefile
 sys/qcam/Makefile
 sys/v4l/Makefile
 sys/v4l2/Makefile
 sys/vcd/Makefile
-sys/xvideo/Makefile
 sys/ximage/Makefile
-sys/glsink/Makefile
+sys/xvimage/Makefile
+sys/xvideo/Makefile
 ext/Makefile
 ext/a52dec/Makefile
 ext/aalib/Makefile
index 2ccefbd..68d20eb 100644 (file)
@@ -4,7 +4,7 @@ else
 GCONF_DIR=
 endif
 
-if USE_XFREE
+if USE_X
 X_DIR=xwindowlistener
 else
 X_DIR=
index dad4940..2ced34e 100644 (file)
@@ -34,14 +34,17 @@ else
 VCD_DIR=
 endif
 
-# doesn't work 
-#if USE_XFREE
-#XVIDEO_DIR=xvideo
-#XIMAGE_DIR=ximage
-#else
-#XVIDEO_DIR=
-#XIMAGE_DIR=
-#endif
+if USE_X
+X_DIR=ximage xvideo
+else
+X_DIR=
+endif
+
+if USE_XVIDEO
+XV_DIR=xvimage
+else
+XV_DIR=
+endif
 
 if USE_CDROM
 CDROM_DIR=cdrom
@@ -50,6 +53,6 @@ CDROM_DIR=
 endif
 
 SUBDIRS=$(DXR3_DIR) $(OSS_DIR) $(QCAM_DIR) $(V4L_DIR) $(V4L2_DIR) \
-       $(VCD_DIR) $(CDROM_DIR)
+       $(VCD_DIR) $(CDROM_DIR) $(X_DIR) $(XV_DIR)
 
 DIST_SUBDIRS=dxr3 oss qcam v4l v4l2 vcd xvideo ximage glsink cdrom
index 8096bd3..d3fe2c1 100644 (file)
@@ -3,7 +3,7 @@ plugin_LTLIBRARIES = libgstximagesink.la
 
 libgstximagesink_la_SOURCES =  ximagesink.c 
 libgstximagesink_la_CFLAGS = $(GST_CFLAGS) $(X_CFLAGS)
-libgstximagesink_la_LIBADD = $(X_LIBS)
+libgstximagesink_la_LIBADD = $(X_LIBS) $(XSHM_LIBS)
 libgstximagesink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) \
                $(top_builddir)/gst-libs/gst/navigation/libgstnavigation.la \
                $(top_builddir)/gst-libs/gst/xoverlay/libgstxoverlay.la
index 01d1b68..c5b4c2b 100644 (file)
@@ -129,7 +129,7 @@ gst_ximagesink_ximage_new (GstXImageSink *ximagesink, gint width, gint height)
 
   ximage->size =  (ximagesink->xcontext->bpp / 8) * ximage->width * ximage->height;
   
-#ifdef HAVE_SHM
+#ifdef HAVE_XSHM
   if (ximagesink->xcontext->use_xshm)
     {
       ximage->ximage = XShmCreateImage (ximagesink->xcontext->disp,
@@ -170,7 +170,7 @@ gst_ximagesink_ximage_new (GstXImageSink *ximagesink, gint width, gint height)
                                  ximage->width, ximage->height,
                                  ximagesink->xcontext->bpp,
                                  ximage->width * (ximagesink->xcontext->bpp / 8));
-#endif /* HAVE_SHM */
+#endif /* HAVE_XSHM */
   
   if (ximage->ximage)
     {
@@ -201,7 +201,7 @@ gst_ximagesink_ximage_destroy (GstXImageSink *ximagesink, GstXImage *ximage)
   
   g_mutex_lock (ximagesink->x_lock);
   
-#ifdef HAVE_SHM
+#ifdef HAVE_XSHM
   if (ximagesink->xcontext->use_xshm)
     {
       if (ximage->SHMInfo.shmaddr)
@@ -224,7 +224,7 @@ gst_ximagesink_ximage_destroy (GstXImageSink *ximagesink, GstXImage *ximage)
 #else
   if (ximage->ximage)
     XDestroyImage (ximage->ximage);
-#endif /* HAVE_SHM */ 
+#endif /* HAVE_XSHM */ 
   
   g_mutex_unlock (ximagesink->x_lock);
   
@@ -251,7 +251,7 @@ gst_ximagesink_ximage_put (GstXImageSink *ximagesink, GstXImage *ximage)
   x = MAX (0, (attr.width - ximage->width) / 2);
   y = MAX (0, (attr.height - ximage->height) / 2);
 
-#ifdef HAVE_SHM
+#ifdef HAVE_XSHM
   if (ximagesink->xcontext->use_xshm)
     {  
       XShmPutImage (ximagesink->xcontext->disp, ximagesink->xwindow->win, 
@@ -269,7 +269,7 @@ gst_ximagesink_ximage_put (GstXImageSink *ximagesink, GstXImage *ximage)
   XPutImage (ximagesink->xcontext->disp, ximagesink->xwindow->win, 
              ximagesink->xwindow->gc, ximage->ximage,  
              0, 0, x, y, ximage->width, ximage->height);
-#endif /* HAVE_SHM */
+#endif /* HAVE_XSHM */
   
   XSync(ximagesink->xcontext->disp, FALSE);
   
@@ -507,7 +507,7 @@ gst_ximagesink_xcontext_get (GstXImageSink *ximagesink)
     
   xcontext->endianness = (ImageByteOrder (xcontext->disp) == LSBFirst) ? G_LITTLE_ENDIAN:G_BIG_ENDIAN;
   
-#ifdef HAVE_SHM
+#ifdef HAVE_XSHM
   /* Search for XShm extension support */
   if (XQueryExtension (xcontext->disp, "MIT-SHM", &i, &i, &i))
     {
@@ -519,7 +519,7 @@ gst_ximagesink_xcontext_get (GstXImageSink *ximagesink)
       xcontext->use_xshm = FALSE;
       GST_DEBUG ("ximagesink is not using XShm extension");
     }
-#endif /* HAVE_SHM */
+#endif /* HAVE_XSHM */
   
   /* What the hell is that ? */
   if (xcontext->endianness == G_LITTLE_ENDIAN && xcontext->depth == 24)
index 1f1af6f..84ea0e0 100644 (file)
 #include <gst/gst.h>
 
 /* FIXME : We should have a configure test for shm support */
-#define HAVE_SHM
+#define HAVE_XSHM
 
-#ifdef HAVE_SHM
+#ifdef HAVE_XSHM
 #include <sys/ipc.h>
 #include <sys/shm.h>
-#endif /* HAVE_SHM */
+#endif /* HAVE_XSHM */
 
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 
-#ifdef HAVE_SHM
+#ifdef HAVE_XSHM
 #include <X11/extensions/XShm.h>
-#endif /* HAVE_SHM */
+#endif /* HAVE_XSHM */
 
 #include <string.h>
 #include <math.h>
@@ -93,9 +93,9 @@ struct _GstXWindow {
 struct _GstXImage {
   XImage *ximage;
   
-#ifdef HAVE_SHM
+#ifdef HAVE_XSHM
   XShmSegmentInfo SHMInfo;
-#endif /* HAVE_SHM */
+#endif /* HAVE_XSHM */
   
   char *data;
   gint width, height, size;