Commit e9869e07bf610e923d79bc729df01bdde699e065

Sam Lantinga 2020-11-23T21:08:19

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.

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();