mirror of https://github.com/libsdl-org/SDL
fix bug #5395: handle old systems where inotify_init1 is not available
This commit is contained in:
parent
ee85a41a32
commit
b6e63625c8
|
@ -1222,6 +1222,12 @@ elseif(UNIX AND NOT APPLE AND NOT ANDROID AND NOT RISCOS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
check_include_file("libudev.h" HAVE_LIBUDEV_H)
|
check_include_file("libudev.h" HAVE_LIBUDEV_H)
|
||||||
|
check_include_file("sys/inotify.h" HAVE_SYS_INOTIFY_H)
|
||||||
|
check_symbol_exists(inotify_init "sys/inotify.h" HAVE_INOTIFY_INIT)
|
||||||
|
check_symbol_exists(inotify_init1 "sys/inotify.h" HAVE_INOTIFY_INIT1)
|
||||||
|
if(HAVE_SYS_INOTIFY_H AND HAVE_INOTIFY_INIT)
|
||||||
|
set(HAVE_INOTIFY 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(PKG_CONFIG_FOUND)
|
if(PKG_CONFIG_FOUND)
|
||||||
pkg_search_module(DBUS dbus-1 dbus)
|
pkg_search_module(DBUS dbus-1 dbus)
|
||||||
|
|
|
@ -22984,15 +22984,48 @@ $as_echo "#define SDL_USE_IME 1" >>confdefs.h
|
||||||
|
|
||||||
CheckInotify()
|
CheckInotify()
|
||||||
{
|
{
|
||||||
ac_fn_c_check_header_mongrel "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default"
|
save_LIBS="$LIBS"
|
||||||
|
case "$host" in
|
||||||
|
*-*-freebsd*) LIBS="$LIBS -linotify"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
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 :
|
if test "x$ac_cv_header_sys_inotify_h" = xyes; then :
|
||||||
have_inotify_inotify_h_hdr=yes
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define HAVE_SYS_INOTIFY_H 1
|
||||||
|
_ACEOF
|
||||||
|
have_inotify_inotify_h_hdr=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
if test x$have_inotify_inotify_h_hdr = xyes; then
|
for ac_func in inotify_init
|
||||||
|
do :
|
||||||
|
ac_fn_c_check_func "$LINENO" "inotify_init" "ac_cv_func_inotify_init"
|
||||||
|
if test "x$ac_cv_func_inotify_init" = xyes; then :
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define HAVE_INOTIFY_INIT 1
|
||||||
|
_ACEOF
|
||||||
|
have_inotify=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
$as_echo "#define HAVE_INOTIFY_H 1" >>confdefs.h
|
for ac_func in inotify_init1
|
||||||
|
do :
|
||||||
|
ac_fn_c_check_func "$LINENO" "inotify_init1" "ac_cv_func_inotify_init1"
|
||||||
|
if test "x$ac_cv_func_inotify_init1" = xyes; then :
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define HAVE_INOTIFY_INIT1 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if test x$have_inotify_inotify_h_hdr = xyes -a x$have_inotify = xyes; then
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_INOTIFY 1" >>confdefs.h
|
||||||
|
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-freebsd*)
|
*-*-freebsd*)
|
||||||
|
@ -23000,6 +23033,7 @@ $as_echo "#define HAVE_INOTIFY_H 1" >>confdefs.h
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
LIBS="save_$LIBS"
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckIBus()
|
CheckIBus()
|
||||||
|
|
14
configure.ac
14
configure.ac
|
@ -2725,15 +2725,23 @@ AS_HELP_STRING([--enable-ime], [enable IME support [[default=yes]]]),
|
||||||
dnl Check inotify presense
|
dnl Check inotify presense
|
||||||
CheckInotify()
|
CheckInotify()
|
||||||
{
|
{
|
||||||
AC_CHECK_HEADER(sys/inotify.h, have_inotify_inotify_h_hdr=yes)
|
save_LIBS="$LIBS"
|
||||||
if test x$have_inotify_inotify_h_hdr = xyes; then
|
case "$host" in
|
||||||
AC_DEFINE(HAVE_INOTIFY_H, 1, [ ])
|
*-*-freebsd*) LIBS="$LIBS -linotify"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_CHECK_HEADERS(sys/inotify.h, [have_inotify_inotify_h_hdr=yes])
|
||||||
|
AC_CHECK_FUNCS(inotify_init, [have_inotify=yes])
|
||||||
|
AC_CHECK_FUNCS(inotify_init1)
|
||||||
|
if test x$have_inotify_inotify_h_hdr = xyes -a x$have_inotify = xyes; then
|
||||||
|
AC_DEFINE(HAVE_INOTIFY, 1, [ ])
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-freebsd*)
|
*-*-freebsd*)
|
||||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -linotify"
|
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -linotify"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
LIBS="save_$LIBS"
|
||||||
}
|
}
|
||||||
|
|
||||||
dnl See if the platform has libibus IME support.
|
dnl See if the platform has libibus IME support.
|
||||||
|
|
|
@ -211,9 +211,13 @@
|
||||||
#cmakedefine HAVE_DBUS_DBUS_H 1
|
#cmakedefine HAVE_DBUS_DBUS_H 1
|
||||||
#cmakedefine HAVE_FCITX 1
|
#cmakedefine HAVE_FCITX 1
|
||||||
#cmakedefine HAVE_IBUS_IBUS_H 1
|
#cmakedefine HAVE_IBUS_IBUS_H 1
|
||||||
|
#cmakedefine HAVE_SYS_INOTIFY_H 1
|
||||||
|
#cmakedefine HAVE_INOTIFY_INIT 1
|
||||||
|
#cmakedefine HAVE_INOTIFY_INIT1 1
|
||||||
|
#cmakedefine HAVE_INOTIFY 1
|
||||||
#cmakedefine HAVE_IMMINTRIN_H 1
|
#cmakedefine HAVE_IMMINTRIN_H 1
|
||||||
#cmakedefine HAVE_LIBSAMPLERATE_H 1
|
|
||||||
#cmakedefine HAVE_LIBUDEV_H 1
|
#cmakedefine HAVE_LIBUDEV_H 1
|
||||||
|
#cmakedefine HAVE_LIBSAMPLERATE_H 1
|
||||||
|
|
||||||
#cmakedefine HAVE_D3D_H @HAVE_D3D_H@
|
#cmakedefine HAVE_D3D_H @HAVE_D3D_H@
|
||||||
#cmakedefine HAVE_D3D11_H @HAVE_D3D11_H@
|
#cmakedefine HAVE_D3D11_H @HAVE_D3D11_H@
|
||||||
|
|
|
@ -211,11 +211,14 @@
|
||||||
#undef HAVE_ALTIVEC_H
|
#undef HAVE_ALTIVEC_H
|
||||||
#undef HAVE_DBUS_DBUS_H
|
#undef HAVE_DBUS_DBUS_H
|
||||||
#undef HAVE_FCITX
|
#undef HAVE_FCITX
|
||||||
#undef HAVE_INOTIFY_H
|
#undef HAVE_SYS_INOTIFY_H
|
||||||
|
#undef HAVE_INOTIFY_INIT
|
||||||
|
#undef HAVE_INOTIFY_INIT1
|
||||||
|
#undef HAVE_INOTIFY
|
||||||
#undef HAVE_IBUS_IBUS_H
|
#undef HAVE_IBUS_IBUS_H
|
||||||
#undef HAVE_IMMINTRIN_H
|
#undef HAVE_IMMINTRIN_H
|
||||||
#undef HAVE_LIBSAMPLERATE_H
|
|
||||||
#undef HAVE_LIBUDEV_H
|
#undef HAVE_LIBUDEV_H
|
||||||
|
#undef HAVE_LIBSAMPLERATE_H
|
||||||
|
|
||||||
#undef HAVE_DDRAW_H
|
#undef HAVE_DDRAW_H
|
||||||
#undef HAVE_DINPUT_H
|
#undef HAVE_DINPUT_H
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#include <errno.h> /* errno, strerror */
|
#include <errno.h> /* errno, strerror */
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <limits.h> /* For the definition of PATH_MAX */
|
#include <limits.h> /* For the definition of PATH_MAX */
|
||||||
#ifdef HAVE_INOTIFY_H
|
#ifdef HAVE_INOTIFY
|
||||||
#include <sys/inotify.h>
|
#include <sys/inotify.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
@ -499,7 +499,21 @@ static void SteamControllerDisconnectedCallback(int device_instance)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INOTIFY_H
|
#ifdef HAVE_INOTIFY
|
||||||
|
#ifdef HAVE_INOTIFY_INIT1
|
||||||
|
static int SDL_inotify_init1(void) {
|
||||||
|
return inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static int SDL_inotify_init1(void) {
|
||||||
|
int fd = inotify_init();
|
||||||
|
if (fd < 0) return -1;
|
||||||
|
fcntl(fd, F_SETFL, O_NONBLOCK);
|
||||||
|
fcntl(fd, F_SETFD, FD_CLOEXEC);
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
StrHasPrefix(const char *string, const char *prefix)
|
StrHasPrefix(const char *string, const char *prefix)
|
||||||
{
|
{
|
||||||
|
@ -568,7 +582,7 @@ LINUX_InotifyJoystickDetect(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_INOTIFY_H */
|
#endif /* HAVE_INOTIFY */
|
||||||
|
|
||||||
/* Detect devices by reading /dev/input. In the inotify code path we
|
/* Detect devices by reading /dev/input. In the inotify code path we
|
||||||
* have to do this the first time, to detect devices that already existed
|
* have to do this the first time, to detect devices that already existed
|
||||||
|
@ -618,7 +632,7 @@ LINUX_JoystickDetect(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_INOTIFY_H
|
#ifdef HAVE_INOTIFY
|
||||||
if (inotify_fd >= 0 && last_joy_detect_time != 0) {
|
if (inotify_fd >= 0 && last_joy_detect_time != 0) {
|
||||||
LINUX_InotifyJoystickDetect();
|
LINUX_InotifyJoystickDetect();
|
||||||
}
|
}
|
||||||
|
@ -698,8 +712,8 @@ LINUX_JoystickInit(void)
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INOTIFY_H
|
#if defined(HAVE_INOTIFY)
|
||||||
inotify_fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
|
inotify_fd = SDL_inotify_init1();
|
||||||
|
|
||||||
if (inotify_fd < 0) {
|
if (inotify_fd < 0) {
|
||||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT,
|
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT,
|
||||||
|
@ -720,7 +734,7 @@ LINUX_JoystickInit(void)
|
||||||
strerror (errno));
|
strerror (errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_INOTIFY_H */
|
#endif /* HAVE_INOTIFY */
|
||||||
|
|
||||||
/* Report all devices currently present */
|
/* Report all devices currently present */
|
||||||
LINUX_JoystickDetect();
|
LINUX_JoystickDetect();
|
||||||
|
|
Loading…
Reference in New Issue