summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Slebodnik <lslebodn@redhat.com>2013-08-30 23:13:26 +0200
committerJakub Hrozek <jhrozek@redhat.com>2013-09-09 17:17:52 +0200
commit9917c138d9a270deb5820915384fbde751190c2a (patch)
treed36c7bd18c21dc8b42a4b76d83c085b1d5419257
parenta31df2979265339f71fe3e2d587c4176375b1eff (diff)
downloadsssd-9917c138d9a270deb5820915384fbde751190c2a.tar.gz
sssd-9917c138d9a270deb5820915384fbde751190c2a.tar.bz2
sssd-9917c138d9a270deb5820915384fbde751190c2a.zip
AUTOTOOLS: More robust detection of inotify.
We checked only header file "sys/inotify" for detection whether inotify works. Some platforms do not have built in inotify, but contain library, which provides inotify-compatible interface. This patch adds more robust detection of inotify in configuration time and appends linker flags to Makefile if inotify is provided by library.
-rw-r--r--Makefile.am1
-rw-r--r--configure.ac3
-rw-r--r--src/external/inotify.m432
-rw-r--r--src/monitor/monitor.c8
4 files changed, 39 insertions, 5 deletions
diff --git a/Makefile.am b/Makefile.am
index b6d2fd0d..d21c5a71 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -630,6 +630,7 @@ sssd_SOURCES = \
src/util/nscd.c
sssd_LDADD = \
$(SSSD_LIBS) \
+ $(INOTIFY_LIBS) \
$(LIBNL_LIBS) \
$(KEYUTILS_LIBS) \
$(SSSD_INTERNAL_LTLIBS)
diff --git a/configure.ac b/configure.ac
index cdf46d4c..ebce2025 100644
--- a/configure.ac
+++ b/configure.ac
@@ -153,6 +153,7 @@ m4_include([src/external/libnl.m4])
m4_include([src/external/systemd.m4])
m4_include([src/external/pac_responder.m4])
m4_include([src/external/signal.m4])
+m4_include([src/external/inotify.m4])
m4_include([src/external/libndr_nbt.m4])
WITH_UNICODE_LIB
@@ -251,7 +252,7 @@ if test x$cryptolib = xlibcrypto; then
AM_CHECK_LIBCRYPTO
fi
-AC_CHECK_HEADERS([sys/inotify.h])
+AM_CHECK_INOTIFY
AC_CHECK_HEADERS([sasl/sasl.h],,AC_MSG_ERROR([Could not find SASL headers]))
diff --git a/src/external/inotify.m4 b/src/external/inotify.m4
new file mode 100644
index 00000000..9572f6d2
--- /dev/null
+++ b/src/external/inotify.m4
@@ -0,0 +1,32 @@
+dnl A macro to check if inotify works
+AC_DEFUN([AM_CHECK_INOTIFY],
+[
+ AC_CHECK_HEADERS([sys/inotify.h])
+
+ AC_MSG_CHECKING([whether sys/inotify.h actually works])
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE([
+#ifdef HAVE_SYS_INOTITY_H
+#include <sys/inotify.h>,
+#endif
+int main () {
+ return (-1 == inotify_init());
+}])],
+ [AC_MSG_RESULT([yes]); inotify_works=yes],
+ [AC_MSG_RESULT([no])]
+ )
+
+ SSS_AC_EXPAND_LIB_DIR()
+ AS_IF([test x"$inotify_works" != xyes],
+ [AC_CHECK_LIB([inotify],
+ [inotify_init],
+ [INOTIFY_LIBS="$sss_extra_libdir -linotify"
+ inotify_works=yes],
+ [inotify_works=no],
+ [$sss_extra_libdir])]
+ )
+
+ AS_IF([test x"$inotify_works" = xyes],
+ [AC_DEFINE_UNQUOTED([HAVE_INOTIFY], [1], [Inotify works])])
+ AC_SUBST(INOTIFY_LIBS)
+])
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index 495f31e3..d8bbfbcb 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -1642,7 +1642,7 @@ errno_t monitor_config_file_fallback(TALLOC_CTX *mem_ctx,
monitor_reconf_fn fn,
bool ignore_missing);
-#ifdef HAVE_SYS_INOTIFY_H
+#ifdef HAVE_INOTIFY
static void process_config_file(struct tevent_context *ev,
struct tevent_timer *te,
struct timeval t, void *ptr);
@@ -1867,7 +1867,7 @@ static void rewatch_config_file(struct tevent_context *ev,
talloc_free(rw_ctx);
file_ctx->needs_update = 0;
}
-#endif
+#endif /* HAVE_INOTIFY */
static void poll_config_file(struct tevent_context *ev,
struct tevent_timer *te,
@@ -1917,7 +1917,7 @@ static void poll_config_file(struct tevent_context *ev,
static int try_inotify(struct config_file_ctx *file_ctx, const char *filename,
monitor_reconf_fn fn)
{
-#ifdef HAVE_SYS_INOTIFY_H
+#ifdef HAVE_INOTIFY
int err, fd_args, ret;
struct tevent_fd *tfd;
struct config_file_callback *cb;
@@ -1986,7 +1986,7 @@ static int try_inotify(struct config_file_ctx *file_ctx, const char *filename,
return EOK;
#else
return EINVAL;
-#endif
+#endif /* HAVE_INOTIFY */
}
static int monitor_config_file(TALLOC_CTX *mem_ctx,