inotify: revert : i want to keep autotools **modularized**. Instead, use in Eio what...
authorVincent Torri <vincent.torri@gmail.com>
Thu, 6 Dec 2012 07:23:50 +0000 (07:23 +0000)
committerVincent Torri <vincent.torri@gmail.com>
Thu, 6 Dec 2012 07:23:50 +0000 (07:23 +0000)
SVN revision: 80298

configure.ac
m4/eio_check_options.m4
src/Makefile_Eio.am
src/lib/eio/eio_monitor_inotify.c

index e0d942f..72b2529 100644 (file)
@@ -104,8 +104,6 @@ AC_ARG_ENABLE([coverage],
 
 #### Default values
 
-want_inotify="no"
-
 requirements_pc_crypto=""
 requirements_pc_deps_crypto=""
 requirements_libs_crypto=""
@@ -279,11 +277,6 @@ case "$host_os" in
       MODULE_ARCH="$host_os-$host_cpu-v_maj.v_min.v_mic"
       MODULE_EXT=".dll"
    ;;
-   linux*)
-      want_inotify="yes"
-      MODULE_ARCH="$host_os-$host_cpu-v_maj.v_min.v_mic"
-      MODULE_EXT=".so"
-   ;;
    *)
       MODULE_ARCH="$host_os-$host_cpu-v_maj.v_min.v_mic"
       MODULE_EXT=".so"
@@ -481,17 +474,6 @@ sys/mman.h \
 unistd.h \
 ])
 
-have_inotify="no"
-if test "x${want_inotify}" = "xyes" ; then
-   AC_CHECK_HEADER([sys/inotify.h],
-      [
-       AC_DEFINE([HAVE_INOTIFY], [1], [File monitoring with Inotify])
-       have_inotify="yes"
-      ],
-      [have_inotify="no"])
-fi
-AM_CONDITIONAL([HAVE_INOTIFY], [test "x${have_inotify}" = "xyes"])
-
 EFL_CHECK_PATH_MAX
 
 
@@ -1843,13 +1825,19 @@ fi
 
 # cserve2 only works on Linux so far.
 
-if test "x${efl_func_shm_open}" = "xno" -o "x${have_inotify}" = "xno"; then
+if test "x${efl_func_shm_open}" = "xno" ; then
    want_evas_cserve2="no"
 fi
 
-AC_DEFINE_IF([EVAS_CSERVE2],
-   [test "x${want_evas_cserve2}" = "xyes"],
-   [1], [Shared cache server.])
+if test "x${want_evas_cserve2}" = "xyes" ; then
+   AC_CHECK_HEADERS([sys/epoll.h sys/inotify.h sys/signalfd.h],
+      [],
+      [want_evas_cserve2="no"])
+fi
+
+if test "x${want_evas_cserve2}" = "xyes" ; then
+  AC_DEFINE([EVAS_CSERVE2], [1], [Shared cache server.])
+fi
 AM_CONDITIONAL([EVAS_CSERVE2], [test "x${want_evas_cserve2}" = "xyes"])
 
 ### Configuration
@@ -2398,6 +2386,18 @@ AC_ARG_ENABLE([poll],
    ],
    [want_poll="yes"])
 
+AC_ARG_ENABLE([inotify],
+   [AC_HELP_STRING([--disable-inotify],
+      [disable inotify in the ecore_file module. @<:@default=enabled@:>@])],
+   [
+    if test "x${enableval}" = "xyes" ; then
+       want_inotify="yes"
+    else
+       want_inotify="no"
+    fi
+   ],
+   [want_inotify="yes"])
+
 AC_ARG_ENABLE([atfile-source],
    [AC_HELP_STRING([--disable-atfile-source],
        [disable use of atfile source functions as openat and mkdirat @<:@default=detect@:>@])],
@@ -2458,6 +2458,19 @@ requirements_pc_ecore_file="ecore-con >= ${PACKAGE_VERSION} ecore >= ${PACKAGE_V
 
 ### Checks for header files
 
+have_inotify="no"
+if test "x${want_inotify}" = "xyes" ; then
+   AC_CHECK_HEADER([sys/inotify.h],
+      [
+       AC_DEFINE([HAVE_INOTIFY], [1], [File monitoring with Inotify])
+       have_inotify="yes"
+      ],
+      [have_inotify="no"])
+fi
+
+AC_MSG_CHECKING([whether inotify is to be used for filemonitoring])
+AC_MSG_RESULT(${have_inotify})
+
 ### Checks for types
 
 ### Checks for structures
@@ -3959,9 +3972,12 @@ setxattr("/", "user.ethumb.md5", NULL, 0, 0);
 AC_MSG_RESULT([${have_xattr}])
 
 # Check for inotify specificity
+have_inotify="no"
 have_notify_win32="no"
+EIO_CHECK_INOTIFY([have_inotify="yes"], [have_inotify="no"])
 EIO_CHECK_NOTIFY_WIN32([have_notify_win32="yes"], [have_notify_win32="no"])
 
+AM_CONDITIONAL([EIO_HAVE_INOTIFY], [test "x${have_inotify}" = "xyes"])
 AM_CONDITIONAL([EIO_HAVE_WINCHANGE], [test "x${have_notify_win32}" = "xyes"])
 
 #### End of Eio
index 5fb9012..485dd85 100644 (file)
@@ -1,3 +1,47 @@
+dnl use: EIO_CHECK_INOTIFY([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+AC_DEFUN([EIO_CHECK_INOTIFY],
+[
+_eio_have_inotify="no"
+
+dnl We need to check if the right inotify version is accessible
+
+dnl It is hard to find a good test on how to check the correct
+dnl inotify version. They changed the headers a lot.
+dnl in kernel 2.6.13 __NR_inotify_init was added to the defined syscalls
+dnl in asm/unistd.h and IN_MOVE_SELF was added to linux/inotify.h
+dnl so with this check you need a very new kernel and kernel-headers!
+
+if ! test "x${have_windows}" = "xyes" ; then
+
+   AC_CHECK_LIB([c], [inotify_init],
+      [
+       AC_DEFINE([HAVE_INOTIFY], [1], [ File monitoring with Inotify ])
+       AC_DEFINE([HAVE_SYS_INOTIFY], [1], [ File monitoring with Inotify - sys/inotify.h ])
+       _eio_have_inotify="yes"
+      ],
+      [
+       AC_TRY_COMPILE(
+          [
+#include <asm/unistd.h>
+#include <linux/inotify.h>
+          ],
+          [
+int a = __NR_inotify_init; int b = IN_MOVE_SELF;
+          ],
+          [
+           AC_DEFINE([HAVE_INOTIFY], [1], [ File monitoring with Inotify ])
+           _eio_have_inotify="yes"
+          ],
+          [_eio_have_inotify="no"])
+      ])
+fi
+
+AC_MSG_CHECKING([whether inotify is to be used for filemonitoring])
+AC_MSG_RESULT([${_eio_have_inotify}])
+
+AS_IF([test "x${_eio_have_inotify}" = "xyes"], [$1], [$2])
+])
+
 dnl use: EIO_CHECK_NOTIFY_WIN32([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
 AC_DEFUN([EIO_CHECK_NOTIFY_WIN32],
 [
index 9624285..28286b4 100644 (file)
@@ -18,7 +18,7 @@ lib/eio/eio_single.c \
 lib/eio/eio_xattr.c \
 lib/eio/eio_private.h
 
-if HAVE_INOTIFY
+if EIO_HAVE_INOTIFY
 lib_eio_libeio_la_SOURCES += lib/eio/eio_monitor_inotify.c
 else
 if EIO_HAVE_WINCHANGE
index 76e7c93..66abe9c 100644 (file)
 #include "eio_private.h"
 #include "Eio.h"
 
-#ifdef HAVE_INOTIFY
+#ifdef HAVE_SYS_INOTIFY
 # include <sys/inotify.h>
+#else
+# include <asm/unistd.h>
+# include <linux/inotify.h>
 #endif
 
 /*============================================================================*
@@ -67,6 +70,26 @@ static const Eio_Inotify_Table match[] = {
   EIO_INOTIFY_LINE(IN_UNMOUNT, SELF_DELETED, SELF_DELETED)
 };
 
+#ifndef HAVE_SYS_INOTIFY
+static inline int
+inotify_init(void)
+{
+   return syscall(__NR_inotify_init);
+}
+
+static inline int
+inotify_add_watch(int fd, const char *name, __u32 mask)
+{
+   return syscall(__NR_inotify_add_watch, fd, name, mask);
+}
+
+static inline int
+inotify_rm_watch(int fd, __u32 wd)
+{
+   return syscall(__NR_inotify_rm_watch, fd, wd);
+}
+#endif
+
 static void
 _eio_inotify_del(void *data)
 {