From fb844d50ec1e66186b283fd4c9a8048f206164d6 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 12 Nov 2003 03:06:07 +0000 Subject: [PATCH] fix build system for X, XShm and Xv Original commit message from CVS: fix build system for X, XShm and Xv --- configure.ac | 79 +++++++++++++++++++++++----------------- gst-libs/gst/Makefile.am | 2 +- sys/Makefile.am | 21 ++++++----- sys/ximage/Makefile.am | 2 +- sys/ximage/ximagesink.c | 16 ++++---- sys/ximage/ximagesink.h | 14 +++---- 6 files changed, 75 insertions(+), 59 deletions(-) diff --git a/configure.ac b/configure.ac index 74aed820a4..78a0ebe70b 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am index 2ccefbd0fd..68d20eb74a 100644 --- a/gst-libs/gst/Makefile.am +++ b/gst-libs/gst/Makefile.am @@ -4,7 +4,7 @@ else GCONF_DIR= endif -if USE_XFREE +if USE_X X_DIR=xwindowlistener else X_DIR= diff --git a/sys/Makefile.am b/sys/Makefile.am index dad4940ad2..2ced34edd0 100644 --- a/sys/Makefile.am +++ b/sys/Makefile.am @@ -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 diff --git a/sys/ximage/Makefile.am b/sys/ximage/Makefile.am index 8096bd3fde..d3fe2c179e 100644 --- a/sys/ximage/Makefile.am +++ b/sys/ximage/Makefile.am @@ -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 diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c index 01d1b68c9b..c5b4c2b8fe 100644 --- a/sys/ximage/ximagesink.c +++ b/sys/ximage/ximagesink.c @@ -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) diff --git a/sys/ximage/ximagesink.h b/sys/ximage/ximagesink.h index 1f1af6fea9..84ea0e01ad 100644 --- a/sys/ximage/ximagesink.h +++ b/sys/ximage/ximagesink.h @@ -23,19 +23,19 @@ #include /* FIXME : We should have a configure test for shm support */ -#define HAVE_SHM +#define HAVE_XSHM -#ifdef HAVE_SHM +#ifdef HAVE_XSHM #include #include -#endif /* HAVE_SHM */ +#endif /* HAVE_XSHM */ #include #include -#ifdef HAVE_SHM +#ifdef HAVE_XSHM #include -#endif /* HAVE_SHM */ +#endif /* HAVE_XSHM */ #include #include @@ -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;