From da77ffd07a3b4fa5d8064f66981edab3b55fba1b Mon Sep 17 00:00:00 2001 From: Vincent Torri Date: Sun, 25 Mar 2012 18:43:21 +0000 Subject: [PATCH] Emotion: Fix shm_open check + various autotools cleaning This works in linux, and should fix shm_detection on BSD (including Mac) BSD, Mac and solaris users : please check that it compiles and shm_open is detected SVN revision: 69618 --- legacy/emotion/Makefile.am | 43 ++++- legacy/emotion/configure.ac | 182 +++++++++--------- legacy/emotion/m4/efl_shm_open.m4 | 69 +++++++ legacy/emotion/m4/emotion_check.m4 | 24 +-- .../src/generic_players/vlc/Makefile.am | 2 +- legacy/emotion/src/lib/emotion_main.c | 26 +++ .../emotion/src/modules/generic/Makefile.am | 2 +- 7 files changed, 226 insertions(+), 122 deletions(-) create mode 100644 legacy/emotion/m4/efl_shm_open.m4 diff --git a/legacy/emotion/Makefile.am b/legacy/emotion/Makefile.am index 2ef6b695c3..248f9bdf35 100644 --- a/legacy/emotion/Makefile.am +++ b/legacy/emotion/Makefile.am @@ -4,18 +4,41 @@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src data doc -MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess emotion.spec \ - config.h.in config.sub configure install-sh \ - ltconfig ltmain.sh missing mkinstalldirs \ - stamp-h.in emotion_docs.tar \ - emotion.pc acconfig.h depcomp \ - $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-doc.tar.bz2 +MAINTAINERCLEANFILES = \ +Makefile.in \ +aclocal.m4 \ +config.guess \ +config.h.in \ +config.sub \ +configure \ +depcomp \ +install-sh \ +ltconfig \ +ltmain.sh \ +missing \ +mkinstalldirs \ +stamp-h.in \ +$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz \ +$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.bz2 \ +$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-doc.tar.bz2 -bin_SCRIPTS = +EXTRA_DIST = \ +README \ +AUTHORS \ +COPYING \ +autogen.sh \ +emotion.spec \ +emotion.spec.in \ +emotion.pc.in \ +m4/ac_attribute.m4 \ +m4/efl_binary.m4 \ +m4/efl_doxygen.m4 \ +m4/efl_edje_external.m4 \ +m4/efl_examples.m4 \ +m4/efl_shm_open.m4 \ +m4/emotion_check.m4 \ +m4/gst-element-check.m4 -EXTRA_DIST = README AUTHORS COPYING \ - emotion.spec emotion.spec.in emotion.pc.in \ - emotion.pc.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = emotion.pc diff --git a/legacy/emotion/configure.ac b/legacy/emotion/configure.ac index 37edf6ac3b..8c3cc17fb9 100644 --- a/legacy/emotion/configure.ac +++ b/legacy/emotion/configure.ac @@ -108,8 +108,9 @@ EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"]) ### Checks for libraries -PKG_CHECK_MODULES(EMOTION, [eina >= 1.2.0 evas >= 1.2.0 ecore >= 1.2.0 eet >= 1.6.0]) -requirement_emotion="ecore >= 1.2.0 evas >= 1.2.0 eina >= 1.2.0 eet >= 1.6.0" +requirement_emotion="ecore >= 1.2.0 evas >= 1.2.0 eet >= 1.6.0 eina >= 1.2.0" +PKG_CHECK_MODULES(EMOTION, [${requirement_emotion}]) + if test "x${have_emotion_test}" = "xyes" ; then PKG_CHECK_MODULES(EMOTION_BIN, [eina >= 1.2.0 evas >= 1.2.0 ecore >= 1.2.0 ecore-evas >= 1.2.0 edje >= 1.2.0]) @@ -144,11 +145,96 @@ if test "x${have_eeze}" = "xyes"; then requirement_emotion="${requirement_emotion} eeze >= 1.0.99" fi +PKG_CHECK_MODULES([EIO], [eio >= 1.0.0], [have_eio="yes"], [have_eio="no"]) +if test "x${have_eio}" = "xyes"; then + AC_DEFINE(HAVE_EIO, 1, [Use EIO for asynchronous file access]) + requirement_emotion="eio >= 1.0.0 ${requirement_emotion}" +fi + +AM_CONDITIONAL([HAVE_EIO], [test "x${have_eio}" = "xyes"]) + +# ecore-x availability, used for XV, VAAPI, VDPAU output. + +have_ecore_x="no" +AC_ARG_ENABLE([ecore-x], + [AC_HELP_STRING([--disable-ecore-x], [disable ecore-x support. @<:@default=detect@:>@])], + [ + if test "x${enableval}" = "xyes" || test "x${enableval}" = "xauto" ; then + want_ecore_x=${enableval} + else + want_ecore_x="no" + fi + ], + [want_ecore_x="auto"]) + +if ! test "x$want_ecore_x" = "xno" ; then + PKG_CHECK_MODULES([ECORE_X], + [ecore-x >= 1.2.0], + [ + AC_DEFINE(HAVE_ECORE_X, 1, [X11 support for Ecore]) + have_ecore_x="yes" + requirement_elm="ecore-x >= 1.2.0 ${requirement_elm}" + ], + [have_ecore_x="no"] + ) +else + have_ecore_x="no" +fi + +if test "x$want_ecore_x" = "xyes" && test "x$have_ecore_x" = "xno" ; then + AC_MSG_ERROR([ecore-x support requested, but not found by pkg-config.]) +fi + +# Check if gstreamer X Overlay is available +build_xoverlay="no" +if test "x${enable_gstreamer}" = "xyes" ; then + PKG_CHECK_MODULES([GSTREAMER_INTERFACE], + [gstreamer-interfaces-0.10 >= 0.10.34], + [build_xoverlay="yes"], + [build_xoverlay="no"]) + if test "x${build_xoverlay}" = "xyes" ; then + save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS ${GSTREAMER_CFLAGS} ${GSTREAMER_INTERFACE_CFLAGS}" + AC_CHECK_HEADER([gst/interfaces/xoverlay.h], + [ + AC_DEFINE(HAVE_XOVERLAY_H, 1, [Build with Gstreamer Xoverlay support]) + build_xoverlay="yes" + ], + [build_xoverlay="no"]) + CPPFLAGS=$save_CPPFLAGS + + save_LDFLAGS=${LDFLAGS} + LDFLAGS="${LDFLAGS} ${GSTREAMER_INTERFACES}" + AC_CHECK_LIB([gstinterfaces-0.10], + [gst_x_overlay_set_window_handle], + [AC_DEFINE([HAVE_X_OVERLAY_SET], [1], [Use gst_x_overlay_set_window_handle instead of old deprecated gst_x_overlay_set_xwindow_id])]) + LDFLAGS=$sava_LDFLAGS + fi +fi + ### Checks for header files -AC_HEADER_STDC AC_CHECK_HEADERS([unistd.h]) +# Check for video4linux + +AC_MSG_CHECKING([for V4L2]) +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[ +fprintf(stdout, "%i\n", V4L2_CAP_VIDEO_CAPTURE); + ]])], + [ + AC_DEFINE(HAVE_V4L2, 1, [Define to 1 if you have Video4Linux 2 available]) + have_v4l2="yes" + ], + [have_v4l2="no"]) +AC_MSG_RESULT([${have_v4l2}]) + ### Checks for types @@ -156,14 +242,12 @@ AC_CHECK_HEADERS([unistd.h]) ### Checks for compiler characteristics -AC_C_CONST AC_C_BIGENDIAN -AC_PROG_CC_STDC AC_C___ATTRIBUTE__ EFL_EMOTION_BUILD="" case "$host_os" in - mingw32ce* | cegcc*) + mingw32ce*) EMOTION_CPPFLAGS="-D_WIN32_WCE=0x0420" EFL_EMOTION_BUILD="-DEFL_EMOTION_BUILD" ;; @@ -182,30 +266,16 @@ AC_SUBST(EMOTION_CPPFLAGS) lt_enable_auto_import="" case "$host_os" in - mingw* | cegcc*) + mingw*) lt_enable_auto_import="-Wl,--enable-auto-import" ;; esac AC_SUBST(lt_enable_auto_import) -### Check for video4linux -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include - ]], - [[ -fprintf(stdout, "%i\n", V4L2_CAP_VIDEO_CAPTURE); - ]])], - [ - AC_DEFINE(HAVE_V4L2, 1, [Define to 1 if you have Video4Linux 2 available]) - have_v4l2="yes" - ], - [have_v4l2="no"]) -AC_MSG_CHECKING([for V4L2]) -AC_MSG_RESULT([${have_v4l2}]) +### Checks for library functions +AC_FUNC_ALLOCA + ### Modules @@ -220,70 +290,6 @@ if test "x${enable_xine}" = "xno" && test "x${enable_gstreamer}" = "xno" && test fi -PKG_CHECK_MODULES([EIO], - [eio], - [ - have_eio="yes" - AC_DEFINE(HAVE_EIO, 1, [Use EIO for asynchronous file access]) - requirement_emotion="eio ${requirement_emotion}" - ], - [have_eio="no"]) - -AM_CONDITIONAL([HAVE_EIO], [test "x${have_eio}" = "xyes"]) - -## Check Ecore-X availability, used for XV, VAAPI, VDPAU output. - -have_ecore_x="no" -want_ecore_x="auto" -AC_ARG_ENABLE([ecore-x], - [AC_HELP_STRING([--disable-ecore-x], [disable ecore-x support. @<:@default=detect@:>@])], - [want_ecore_x=$enableval], []) - -if test "x$want_ecore_x" != "xno"; then - PKG_CHECK_MODULES([ECORE_X], - [ecore-x >= 1.2.0], - [ - AC_DEFINE(HAVE_ECORE_X, 1, [X11 support for Ecore]) - have_ecore_x="yes" - requirement_elm="ecore-x >= 1.2.0 ${requirement_elm}" - ], - [have_ecore_x="no"] - ) -else - have_ecore_x="no" -fi -if test "x$want_ecore_x" = "xyes" -a "x$have_ecore_x" = "xno"; then - AC_MSG_ERROR([ecore-x support requested, but not found by pkg-config.]) -fi - -## Check if gstreamer X Overlay is available -build_xoverlay="no" -if test "x$enable_gstreamer" = "xyes"; then - PKG_CHECK_MODULES([GSTREAMER_INTERFACE], - [ gstreamer-interfaces-0.10 >= 0.10.34 ], - [ build_xoverlay="yes" ], - [ build_xoverlay="no" ] - ) - if test "x${build_xoverlay}" = "xyes"; then - save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS ${GSTREAMER_CFLAGS} ${GSTREAMER_INTERFACE_CFLAGS}" - AC_CHECK_HEADER([gst/interfaces/xoverlay.h], - [ - AC_DEFINE(HAVE_XOVERLAY_H, 1, [Build with Gstreamer Xoverlay support]) - build_xoverlay="yes" - ], [ - build_xoverlay="no" - ] - ) - CPPFLAGS=$save_CPPFLAGS - - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS ${GSTREAMER_INTERFACES}" - AC_CHECK_LIB(gstinterfaces-0.10, gst_x_overlay_set_window_handle, AC_DEFINE(HAVE_X_OVERLAY_SET, 1, [Use gst_x_overlay_set_window_handle instead of old deprecated gst_x_overlay_set_xwindow_id])) - LDFLAGS=$sava_LDFLAGS - fi -fi - ### install and build examples EFL_CHECK_BUILD_EXAMPLES([enable_build_examples="yes"], [enable_build_examples="no"]) diff --git a/legacy/emotion/m4/efl_shm_open.m4 b/legacy/emotion/m4/efl_shm_open.m4 new file mode 100644 index 0000000000..0bf1b0b7ae --- /dev/null +++ b/legacy/emotion/m4/efl_shm_open.m4 @@ -0,0 +1,69 @@ +dnl Copyright (C) 2010 Vincent Torri +dnl That code is public domain and can be freely used or copied. + +dnl Macro that check if shm_open function is available or not. + +dnl Usage: EFL_CHECK_SHM_OPEN([, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl Call AC_SUBST(EFL_SHM_OPEN_LIBS) +dnl Define HAVE_SHM_OPEN to 1if shm_open is available + +AC_DEFUN([EFL_CHECK_SHM_OPEN], +[ +_efl_have_shm_open="no" + +dnl Check is shm_open is in libc + +AC_MSG_CHECKING([for shm_open in libc]) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include /* For mode constants */ +#include /* For O_* constants */ + ]], + [[ +int fd; + +fd = shm_open("/dev/null", O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO); + ]])], + [_efl_have_shm_open="yes"], + [_efl_have_shm_open="no"]) + +AC_MSG_RESULT([${_efl_have_shm_open}]) + +if test "x$_efl_have_shm_open" = "xno" ; then + AC_MSG_CHECKING([for shm_open in librt]) + + LIBS_save="${LIBS}" + LIBS="${LIBS} -lrt" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include /* For mode constants */ +#include /* For O_* constants */ + ]], + [[ +int fd; + +fd = shm_open("/dev/null", O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO); + ]])], + [ + EFL_SHM_OPEN_LIBS="-lrt" + _efl_have_shm_open="yes"], + [_efl_have_shm_open="no"]) + + LIBS="${LIBS_save}" + + AC_MSG_RESULT([${_efl_have_shm_open}]) +fi + +AC_SUBST([EFL_SHM_OPEN_LIBS]) + +if test "x$_efl_have_shm_open" = "xyes" ; then + AC_DEFINE([HAVE_SHM_OPEN], [1], [Define to 1 if you have the `shm_open' function.]) +fi + +AS_IF([test "x$_efl_have_shm_open" = "xyes"], [$1], [$2]) + +]) diff --git a/legacy/emotion/m4/emotion_check.m4 b/legacy/emotion/m4/emotion_check.m4 index a1d93ac7c8..043ae4415a 100644 --- a/legacy/emotion/m4/emotion_check.m4 +++ b/legacy/emotion/m4/emotion_check.m4 @@ -172,28 +172,8 @@ AC_ARG_ENABLE(generic-[]DOWN, ], [enable_module="auto"]) -SHM_OPEN_LIBS="" -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include -#include - ]], - [[ -shm_open("/", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); -shm_unlink("/"); - ]])], - [ - have_shm_open="yes" - AC_DEFINE(HAVE_SHM_OPEN, 1, [Have shm_open() call]) - SHM_OPEN_LIBS="-lrt" - ], - [have_shm_open="no"]) -AC_SUBST(SHM_OPEN_LIBS) - -AC_MSG_CHECKING([shm_open]) -AC_MSG_RESULT([${have_shm_open}]) +# shm_open +EFL_CHECK_SHM_OPEN([have_shm_open="yes"], [have_shm_open="no"]) if test "x${have_shm_open}" != "xyes"; then enable_generic="no" diff --git a/legacy/emotion/src/generic_players/vlc/Makefile.am b/legacy/emotion/src/generic_players/vlc/Makefile.am index 6b00d281c1..ca9d22a92f 100644 --- a/legacy/emotion/src/generic_players/vlc/Makefile.am +++ b/legacy/emotion/src/generic_players/vlc/Makefile.am @@ -15,4 +15,4 @@ internal_bin_PROGRAMS = em_generic_vlc em_generic_vlc_SOURCES = emotion_generic_vlc.c em_generic_vlc_DEPENDENCIES = $(top_srcdir)/src/modules/generic/Emotion_Generic_Plugin.h -em_generic_vlc_LDADD = @GENERIC_VLC_LIBS@ -lpthread -lrt +em_generic_vlc_LDADD = @GENERIC_VLC_LIBS@ -lpthread diff --git a/legacy/emotion/src/lib/emotion_main.c b/legacy/emotion/src/lib/emotion_main.c index 7fd93e8f6c..a5e9694b80 100644 --- a/legacy/emotion/src/lib/emotion_main.c +++ b/legacy/emotion/src/lib/emotion_main.c @@ -2,6 +2,32 @@ # include "config.h" #endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_ALLOCA_H +# include +#elif !defined alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include +# define alloca _alloca +# elif !defined HAVE_ALLOCA +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + #include #ifdef EMOTION_HAVE_EEZE diff --git a/legacy/emotion/src/modules/generic/Makefile.am b/legacy/emotion/src/modules/generic/Makefile.am index 04fbab540c..23be9873db 100644 --- a/legacy/emotion/src/modules/generic/Makefile.am +++ b/legacy/emotion/src/modules/generic/Makefile.am @@ -22,7 +22,7 @@ includesdir = $(includedir)/emotion-@VMAJ@ noinst_HEADERS = emotion_generic.h em_generic_la_SOURCES = emotion_generic.c -em_generic_la_LIBADD = @EMOTION_LIBS@ @SHM_OPEN_LIBS@ $(top_builddir)/src/lib/libemotion.la +em_generic_la_LIBADD = @EMOTION_LIBS@ @EFL_SHM_OPEN_LIBS@ $(top_builddir)/src/lib/libemotion.la em_generic_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version em_generic_la_LIBTOOLFLAGS = --tag=disable-static em_generic_la_DEPENDENCIES = emotion_generic.h Emotion_Generic_Plugin.h