Fixed bug 5335 - enable joystick/haptic/evdev support by default on FreeBSD Alex S Evdev headers aren't actually included in the base system (well, it has a private copy), they are available through the devel/evdev-proto port instead. We also have devel/libinotify and devel/libudev-devd shims, I didn't verify whether they work with SDL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
diff --git a/configure.ac b/configure.ac
index d9b1e3e..d5e8757 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2738,6 +2738,20 @@ AS_HELP_STRING([--enable-ime], [enable IME support [[default=yes]]]),
fi
}
+dnl Check inotify presense
+CheckInotify()
+{
+ AC_CHECK_HEADER(sys/inotify.h, have_inotify_inotify_h_hdr=yes)
+ if test x$have_inotify_inotify_h_hdr = xyes; then
+ AC_DEFINE(HAVE_INOTIFY_H, 1, [ ])
+ case "$host" in
+ *-*-freebsd*)
+ EXTRA_LDFLAGS="$EXTRA_LDFLAGS -linotify"
+ ;;
+ esac
+ fi
+}
+
dnl See if the platform has libibus IME support.
CheckIBus()
{
@@ -2751,9 +2765,6 @@ AS_HELP_STRING([--enable-ibus], [enable IBus support [[default=yes]]]),
AC_CHECK_HEADER(ibus-1.0/ibus.h,
have_ibus_ibus_h_hdr=yes,
have_ibus_ibus_h_hdr=no)
- AC_CHECK_HEADER(sys/inotify.h,
- have_inotify_inotify_h_hdr=yes,
- have_inotify_inotify_h_hdr=no)
CFLAGS="$save_CFLAGS"
if test x$have_ibus_ibus_h_hdr = xyes; then
if test x$enable_ime != xyes; then
@@ -3449,7 +3460,6 @@ AS_HELP_STRING([--enable-joystick-virtual], [enable virtual joystick APIs [[defa
fi
}
-
dnl Do this on all platforms, before everything else (other things might want to override it).
CheckWarnAll
CheckNoStrictAliasing
@@ -3531,6 +3541,7 @@ case "$host" in
CheckLibUDev
CheckDBus
CheckIME
+ CheckInotify
CheckIBus
CheckFcitx
case $ARCH in
@@ -3590,12 +3601,20 @@ case "$host" in
# Set up files for the joystick library
if test x$enable_joystick = xyes; then
case $ARCH in
- linux|freebsd)
+ linux)
AC_DEFINE(SDL_JOYSTICK_LINUX, 1, [ ])
SOURCES="$SOURCES $srcdir/src/joystick/linux/*.c"
SOURCES="$SOURCES $srcdir/src/joystick/steam/*.c"
have_joystick=yes
;;
+ freebsd)
+ if test x$use_input_events = xyes; then
+ AC_DEFINE(SDL_JOYSTICK_LINUX, 1, [ ])
+ SOURCES="$SOURCES $srcdir/src/joystick/linux/*.c"
+ SOURCES="$SOURCES $srcdir/src/joystick/steam/*.c"
+ have_joystick=yes
+ fi
+ ;;
android)
AC_DEFINE(SDL_JOYSTICK_ANDROID, 1, [ ])
SOURCES="$SOURCES $srcdir/src/joystick/android/*.c"
diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in
index 6613b6e..48bc2a6 100644
--- a/include/SDL_config.h.in
+++ b/include/SDL_config.h.in
@@ -207,6 +207,7 @@
#undef HAVE_ALTIVEC_H
#undef HAVE_DBUS_DBUS_H
#undef HAVE_FCITX
+#undef HAVE_INOTIFY_H
#undef HAVE_IBUS_IBUS_H
#undef HAVE_IMMINTRIN_H
#undef HAVE_LIBSAMPLERATE_H
diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c
index 7129479..12832be 100644
--- a/src/joystick/linux/SDL_sysjoystick.c
+++ b/src/joystick/linux/SDL_sysjoystick.c
@@ -32,7 +32,9 @@
#include <errno.h> /* errno, strerror */
#include <fcntl.h>
#include <limits.h> /* For the definition of PATH_MAX */
+#ifdef HAVE_INOTIFY_H
#include <sys/inotify.h>
+#endif
#include <sys/ioctl.h>
#include <unistd.h>
#include <dirent.h>
@@ -498,6 +500,7 @@ static void SteamControllerDisconnectedCallback(int device_instance)
}
}
+#ifdef HAVE_INOTIFY_H
static int
StrHasPrefix(const char *string, const char *prefix)
{
@@ -566,6 +569,7 @@ LINUX_InotifyJoystickDetect(void)
}
}
}
+#endif /* HAVE_INOTIFY_H */
static void
LINUX_FallbackJoystickDetect(void)
@@ -612,7 +616,9 @@ LINUX_JoystickDetect(void)
else
#endif
if (inotify_fd >= 0) {
+#ifdef HAVE_INOTIFY_H
LINUX_InotifyJoystickDetect();
+#endif
}
else {
LINUX_FallbackJoystickDetect();
@@ -678,6 +684,7 @@ LINUX_JoystickInit(void)
else
#endif
{
+#ifdef HAVE_INOTIFY_H
inotify_fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
if (inotify_fd < 0) {
@@ -700,6 +707,7 @@ LINUX_JoystickInit(void)
strerror (errno));
}
}
+#endif /* HAVE_INOTIFY_H */
/* Report all devices currently present */
LINUX_JoystickDetect();