Damjan Jovanovic : configure: Link wineserver to libinotify if necessary.

Alexandre Julliard julliard at winehq.org
Mon Apr 22 16:30:39 CDT 2019


Module: wine
Branch: master
Commit: 07c2e8581a2745725cd7ce4282eedb9a8084a1e4
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=07c2e8581a2745725cd7ce4282eedb9a8084a1e4

Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date:   Sat Apr 20 15:14:53 2019 +0200

configure: Link wineserver to libinotify if necessary.

Outside Linux, wineserver fails to link when sys/inotify.h
is present, as it tries to find inotify symbols in libc,
which doesn't have them. The inotify symbols are in libinotify.so.
Detect it properly, and link to it where available.

Signed-off-by: Damjan Jovanovic <damjan.jov at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 configure          | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 configure.ac       |  12 +++++-
 server/Makefile.in |   2 +-
 server/change.c    |  57 +++-------------------------
 4 files changed, 123 insertions(+), 55 deletions(-)

diff --git a/configure b/configure
index 451c92d..158d983 100755
--- a/configure
+++ b/configure
@@ -690,6 +690,8 @@ HAL_LIBS
 HAL_CFLAGS
 DBUS_LIBS
 DBUS_CFLAGS
+INOTIFY_LIBS
+INOTIFY_CFLAGS
 XSLT_LIBS
 XSLT_CFLAGS
 XML2_LIBS
@@ -851,6 +853,7 @@ with_gsm
 with_gssapi
 with_gstreamer
 with_hal
+with_inotify
 with_jpeg
 with_krb5
 with_ldap
@@ -1813,6 +1816,8 @@ XML2_CFLAGS
 XML2_LIBS
 XSLT_CFLAGS
 XSLT_LIBS
+INOTIFY_CFLAGS
+INOTIFY_LIBS
 DBUS_CFLAGS
 DBUS_LIBS
 HAL_CFLAGS
@@ -2522,6 +2527,7 @@ Optional Packages:
   --without-gssapi        do not use GSSAPI (Kerberos SSP support)
   --without-gstreamer     do not use GStreamer (codecs support)
   --without-hal           do not use HAL (dynamic device support)
+  --without-inotify       do not use inotify (filesystem change notifications)
   --without-jpeg          do not use JPEG
   --without-krb5          do not use krb5 (Kerberos)
   --without-ldap          do not use LDAP
@@ -2581,6 +2587,10 @@ Some influential environment variables:
   XML2_LIBS   Linker flags for libxml-2.0, overriding pkg-config
   XSLT_CFLAGS C compiler flags for libxslt, overriding pkg-config
   XSLT_LIBS   Linker flags for libxslt, overriding pkg-config
+  INOTIFY_CFLAGS
+              C compiler flags for libinotify, overriding pkg-config
+  INOTIFY_LIBS
+              Linker flags for libinotify, overriding pkg-config
   DBUS_CFLAGS C compiler flags for dbus-1, overriding pkg-config
   DBUS_LIBS   Linker flags for dbus-1, overriding pkg-config
   HAL_CFLAGS  C compiler flags for hal, overriding pkg-config
@@ -3931,6 +3941,12 @@ if test "${with_hal+set}" = set; then :
 fi
 
 
+# Check whether --with-inotify was given.
+if test "${with_inotify+set}" = set; then :
+  withval=$with_inotify;
+fi
+
+
 # Check whether --with-jpeg was given.
 if test "${with_jpeg+set}" = set; then :
   withval=$with_jpeg;
@@ -7401,7 +7417,6 @@ for ac_header in \
 	sys/event.h \
 	sys/exec_elf.h \
 	sys/filio.h \
-	sys/inotify.h \
 	sys/ioctl.h \
 	sys/ipc.h \
 	sys/limits.h \
@@ -13009,6 +13024,94 @@ esac
 
 fi
 
+if test "x$with_inotify" != "xno"
+then
+    if ${INOTIFY_CFLAGS:+false} :; then :
+  if ${PKG_CONFIG+:} false; then :
+  INOTIFY_CFLAGS=`$PKG_CONFIG --cflags libinotify 2>/dev/null`
+fi
+fi
+
+if ${INOTIFY_LIBS:+false} :; then :
+  if ${PKG_CONFIG+:} false; then :
+  INOTIFY_LIBS=`$PKG_CONFIG --libs libinotify 2>/dev/null`
+fi
+fi
+
+
+$as_echo "$as_me:${as_lineno-$LINENO}: libinotify cflags: $INOTIFY_CFLAGS" >&5
+$as_echo "$as_me:${as_lineno-$LINENO}: libinotify libs: $INOTIFY_LIBS" >&5
+ac_save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$CPPFLAGS $INOTIFY_CFLAGS"
+for ac_header in sys/inotify.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_inotify_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_INOTIFY_H 1
+_ACEOF
+
+fi
+
+done
+
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inotify_add_watch in -linotify" >&5
+$as_echo_n "checking for inotify_add_watch in -linotify... " >&6; }
+if ${ac_cv_lib_inotify_inotify_add_watch+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-linotify $INOTIFY_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char inotify_add_watch ();
+int
+main ()
+{
+return inotify_add_watch ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_inotify_inotify_add_watch=yes
+else
+  ac_cv_lib_inotify_inotify_add_watch=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inotify_inotify_add_watch" >&5
+$as_echo "$ac_cv_lib_inotify_inotify_add_watch" >&6; }
+if test "x$ac_cv_lib_inotify_inotify_add_watch" = xyes; then :
+  :
+else
+  INOTIFY_LIBS=""
+fi
+
+CPPFLAGS=$ac_save_CPPFLAGS
+test -z "$INOTIFY_CFLAGS" || INOTIFY_CFLAGS=`echo " $INOTIFY_CFLAGS" | sed 's/ -I\([^/]\)/ -I\$(top_builddir)\/\1/g'`
+test -z "$INOTIFY_LIBS" || INOTIFY_LIBS=`echo " $INOTIFY_LIBS" | sed 's/ -L\([^/]\)/ -L\$(top_builddir)\/\1/g'`
+
+fi
+if test "$ac_cv_header_sys_inotify_h" != "yes"; then :
+  case "x$with_inotify" in
+  x)   as_fn_append wine_notices "|libinotify ${notice_platform}development files not found (or too old), filesystem change notifications won't be supported." ;;
+  xno) ;;
+  *)   as_fn_error $? "libinotify ${notice_platform}development files not found (or too old), filesystem change notifications won't be supported.
+This is an error since --with-inotify was requested." "$LINENO" 5 ;;
+esac
+
+fi
+
 if test "x$with_dbus" != "xno"
 then
     if ${DBUS_CFLAGS:+false} :; then :
@@ -19683,6 +19786,8 @@ XML2_CFLAGS = $XML2_CFLAGS
 XML2_LIBS = $XML2_LIBS
 XSLT_CFLAGS = $XSLT_CFLAGS
 XSLT_LIBS = $XSLT_LIBS
+INOTIFY_CFLAGS = $INOTIFY_CFLAGS
+INOTIFY_LIBS = $INOTIFY_LIBS
 DBUS_CFLAGS = $DBUS_CFLAGS
 DBUS_LIBS = $DBUS_LIBS
 HAL_CFLAGS = $HAL_CFLAGS
diff --git a/configure.ac b/configure.ac
index 611dc69..c2f97e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -57,6 +57,7 @@ AC_ARG_WITH(gsm,       AS_HELP_STRING([--without-gsm],[do not use libgsm (GSM 06
 AC_ARG_WITH(gssapi,    AS_HELP_STRING([--without-gssapi],[do not use GSSAPI (Kerberos SSP support)]))
 AC_ARG_WITH(gstreamer, AS_HELP_STRING([--without-gstreamer],[do not use GStreamer (codecs support)]))
 AC_ARG_WITH(hal,       AS_HELP_STRING([--without-hal],[do not use HAL (dynamic device support)]))
+AC_ARG_WITH(inotify,   AS_HELP_STRING([--without-inotify],[do not use inotify (filesystem change notifications)]))
 AC_ARG_WITH(jpeg,      AS_HELP_STRING([--without-jpeg],[do not use JPEG]))
 AC_ARG_WITH(krb5,      AS_HELP_STRING([--without-krb5],[do not use krb5 (Kerberos)]))
 AC_ARG_WITH(ldap,      AS_HELP_STRING([--without-ldap],[do not use LDAP]),
@@ -491,7 +492,6 @@ AC_CHECK_HEADERS(\
 	sys/event.h \
 	sys/exec_elf.h \
 	sys/filio.h \
-	sys/inotify.h \
 	sys/ioctl.h \
 	sys/ipc.h \
 	sys/limits.h \
@@ -1347,6 +1347,16 @@ fi
 WINE_WARNING_WITH(xslt,[test "x$ac_cv_lib_soname_xslt" = "x"],
                  [libxslt ${notice_platform}development files not found, xslt won't be supported.])
 
+dnl **** Check for inotify ****
+if test "x$with_inotify" != "xno"
+then
+    WINE_PACKAGE_FLAGS(INOTIFY,[libinotify],,,,
+        [AC_CHECK_HEADERS([sys/inotify.h])
+         AC_CHECK_LIB(inotify,inotify_add_watch,[:],[INOTIFY_LIBS=""],[$INOTIFY_LIBS])])
+fi
+WINE_NOTICE_WITH(inotify,[test "$ac_cv_header_sys_inotify_h" != "yes"],
+                 [libinotify ${notice_platform}development files not found (or too old), filesystem change notifications won't be supported.])
+
 dnl **** Check for libdbus ****
 if test "x$with_dbus" != "xno"
 then
diff --git a/server/Makefile.in b/server/Makefile.in
index 29f17f3..b39bd30 100644
--- a/server/Makefile.in
+++ b/server/Makefile.in
@@ -50,4 +50,4 @@ MANPAGES = \
 	wineserver.fr.UTF-8.man.in \
 	wineserver.man.in
 
-EXTRALIBS = $(LDEXECFLAGS) -lwine $(POLL_LIBS) $(RT_LIBS)
+EXTRALIBS = $(LDEXECFLAGS) -lwine $(POLL_LIBS) $(RT_LIBS) $(INOTIFY_LIBS)
diff --git a/server/change.c b/server/change.c
index eb27dae..6091d21f 100644
--- a/server/change.c
+++ b/server/change.c
@@ -35,6 +35,9 @@
 #ifdef HAVE_POLL_H
 # include <poll.h>
 #endif
+#ifdef HAVE_SYS_INOTIFY_H
+#include <sys/inotify.h>
+#endif
 
 #include "ntstatus.h"
 #define WIN32_NO_STATUS
@@ -65,56 +68,6 @@
 
 /* inotify support */
 
-#ifdef HAVE_SYS_INOTIFY_H
-#include <sys/inotify.h>
-#define USE_INOTIFY
-#elif defined(__linux__) && defined(__i386__)
-
-#define SYS_inotify_init	291
-#define SYS_inotify_add_watch	292
-#define SYS_inotify_rm_watch	293
-
-struct inotify_event {
-    int           wd;
-    unsigned int  mask;
-    unsigned int  cookie;
-    unsigned int  len;
-    char          name[1];
-};
-
-#define IN_ACCESS        0x00000001
-#define IN_MODIFY        0x00000002
-#define IN_ATTRIB        0x00000004
-#define IN_CLOSE_WRITE   0x00000008
-#define IN_CLOSE_NOWRITE 0x00000010
-#define IN_OPEN          0x00000020
-#define IN_MOVED_FROM    0x00000040
-#define IN_MOVED_TO      0x00000080
-#define IN_CREATE        0x00000100
-#define IN_DELETE        0x00000200
-#define IN_DELETE_SELF   0x00000400
-
-#define IN_ISDIR         0x40000000
-
-static inline int inotify_init( void )
-{
-    return syscall( SYS_inotify_init );
-}
-
-static inline int inotify_add_watch( int fd, const char *name, unsigned int mask )
-{
-    return syscall( SYS_inotify_add_watch, fd, name, mask );
-}
-
-static inline int inotify_rm_watch( int fd, int wd )
-{
-    return syscall( SYS_inotify_rm_watch, fd, wd );
-}
-
-#define USE_INOTIFY
-
-#endif
-
 struct inode;
 
 static void free_inode( struct inode *inode );
@@ -521,7 +474,7 @@ static enum server_fd_type dir_get_fd_type( struct fd *fd )
     return FD_TYPE_DIR;
 }
 
-#ifdef USE_INOTIFY
+#ifdef HAVE_SYS_INOTIFY_H
 
 #define HASH_SIZE 31
 
@@ -1175,7 +1128,7 @@ static int dir_add_to_existing_notify( struct dir *dir )
     return 0;
 }
 
-#endif  /* USE_INOTIFY */
+#endif  /* HAVE_SYS_INOTIFY_H */
 
 struct object *create_dir_obj( struct fd *fd, unsigned int access, mode_t mode )
 {




More information about the wine-cvs mailing list