From 5c9577476f6df52ee93e6d9bfc4affa81d81f7a0 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 23 Nov 2020 22:14:22 -0500 Subject: [PATCH] joystick: Fix up Linux joystick code to (mostly) compile on FreeBSD. --- configure | 54 +++++++++++++++++--------- configure.ac | 30 ++++++++++---- src/joystick/linux/SDL_sysjoystick_c.h | 4 ++ 3 files changed, 62 insertions(+), 26 deletions(-) diff --git a/configure b/configure index 68425f01c..cbbe98197 100755 --- a/configure +++ b/configure @@ -768,7 +768,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -978,7 +977,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1231,15 +1229,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1377,7 +1366,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1530,7 +1519,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -22724,9 +22712,35 @@ $as_echo "#define SDL_VIDEO_VULKAN 1" >>confdefs.h CheckInputEvents() { - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Linux 2.4 unified input interface" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Linux 2.4 unified input interface" >&5 $as_echo_n "checking for Linux 2.4 unified input interface... " >&6; } - use_input_events=no + use_input_events=no + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + #ifndef EVIOCGNAME + #error EVIOCGNAME() ioctl not available + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + use_input_events=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test x$use_input_events = xno; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22750,14 +22764,16 @@ if ac_fn_c_try_compile "$LINENO"; then : fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_input_events" >&5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_input_events" >&5 $as_echo "$use_input_events" >&6; } - if test x$use_input_events = xyes; then + if test x$use_input_events = xyes; then $as_echo "#define SDL_INPUT_LINUXEV 1" >>confdefs.h - SUMMARY_input="${SUMMARY_input} linuxev" - fi + SUMMARY_input="${SUMMARY_input} linuxev" + fi } CheckInputKD() diff --git a/configure.ac b/configure.ac index 2c83fd4e0..d9b1e3eed 100644 --- a/configure.ac +++ b/configure.ac @@ -2603,8 +2603,22 @@ dnl See if we can use the new unified event interface in Linux 2.4 CheckInputEvents() { dnl Check for Linux 2.4 unified input event interface support - AC_MSG_CHECKING(for Linux 2.4 unified input interface) - use_input_events=no + AC_MSG_CHECKING(for Linux 2.4 unified input interface) + use_input_events=no + + dnl FreeBSD puts this in /usr/include/dev/evdev/input.h ... + AC_TRY_COMPILE([ + #include + ],[ + #ifndef EVIOCGNAME + #error EVIOCGNAME() ioctl not available + #endif + ],[ + use_input_events=yes + ]) + + dnl And Linux of course puts it in linux/input.h ... + if test x$use_input_events = xno; then AC_TRY_COMPILE([ #include ],[ @@ -2614,11 +2628,13 @@ CheckInputEvents() ],[ use_input_events=yes ]) - AC_MSG_RESULT($use_input_events) - if test x$use_input_events = xyes; then - AC_DEFINE(SDL_INPUT_LINUXEV, 1, [ ]) - SUMMARY_input="${SUMMARY_input} linuxev" - fi + fi + + AC_MSG_RESULT($use_input_events) + if test x$use_input_events = xyes; then + AC_DEFINE(SDL_INPUT_LINUXEV, 1, [ ]) + SUMMARY_input="${SUMMARY_input} linuxev" + fi } dnl See if we can use the kernel kd.h header diff --git a/src/joystick/linux/SDL_sysjoystick_c.h b/src/joystick/linux/SDL_sysjoystick_c.h index bcbc2550d..897c925ba 100644 --- a/src/joystick/linux/SDL_sysjoystick_c.h +++ b/src/joystick/linux/SDL_sysjoystick_c.h @@ -22,7 +22,11 @@ #ifndef SDL_sysjoystick_c_h_ #define SDL_sysjoystick_c_h_ +#ifdef __linux__ #include +#else /* FreeBSD (and maybe others) */ +#include +#endif struct SDL_joylist_item;