From 091a4649e8349cc0c9e91495b7f4a918dfb14258 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Fri, 29 Jan 2021 23:11:13 +0300 Subject: [PATCH] added --enable-xinput switch for windows builds --- CMakeLists.txt | 5 ++--- cmake/sdlchecks.cmake | 4 ++-- configure | 35 ++++++++++++++++++++++++++++------- configure.ac | 40 +++++++++++++++++++++++++--------------- 4 files changed, 57 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 381ac9926..40ddc0d03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -386,6 +386,7 @@ foreach(_SUB ${SDL_X11_OPTIONS}) endforeach() set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE}) set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS}) +set_option(XINPUT "Use Xinput for Windows" ${WINDOWS}) set_option(WASAPI "Use the Windows WASAPI audio driver" ${WINDOWS}) set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS}) set_option(RENDER_METAL "Enable the Metal render driver" ${APPLE}) @@ -1453,7 +1454,7 @@ elseif(WINDOWS) set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() - if(HAVE_WIN32_CC) + if(XINPUT) # xinput.h may need windows.h, but does not include it itself. check_c_source_compiles(" #include @@ -1469,8 +1470,6 @@ elseif(WINDOWS) #include XINPUT_STATE_EX s1; int main(int argc, char **argv) { }" HAVE_XINPUT_STATE_EX) - else() - check_include_file(xinput.h HAVE_XINPUT_H) endif() # headers needed elsewhere diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake index 74f0b198f..da4ada380 100644 --- a/cmake/sdlchecks.cmake +++ b/cmake/sdlchecks.cmake @@ -400,7 +400,7 @@ macro(CheckX11) check_include_file(X11/Xcursor/Xcursor.h HAVE_XCURSOR_H) check_include_file(X11/extensions/Xinerama.h HAVE_XINERAMA_H) - check_include_file(X11/extensions/XInput2.h HAVE_XINPUT_H) + check_include_file(X11/extensions/XInput2.h HAVE_XINPUT2_H) check_include_file(X11/extensions/Xrandr.h HAVE_XRANDR_H) check_include_file(X11/extensions/Xrender.h HAVE_XRENDER_H) check_include_file(X11/extensions/scrnsaver.h HAVE_XSS_H) @@ -498,7 +498,7 @@ macro(CheckX11) set(SDL_VIDEO_DRIVER_X11_XINERAMA 1) endif() - if(VIDEO_X11_XINPUT AND HAVE_XINPUT_H) + if(VIDEO_X11_XINPUT AND HAVE_XINPUT2_H) set(HAVE_VIDEO_X11_XINPUT TRUE) if(HAVE_X11_SHARED AND XI_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "\"${XI_LIB_SONAME}\"") diff --git a/configure b/configure index 5b477e02c..4f5f6ca59 100755 --- a/configure +++ b/configure @@ -892,6 +892,7 @@ enable_joystick_mfi enable_pthreads enable_pthread_sem enable_directx +enable_xinput enable_wasapi enable_sdl_dlopen enable_hidapi @@ -1677,6 +1678,7 @@ Optional Features: [[default=yes]] --enable-pthread-sem use pthread semaphores [[default=yes]] --enable-directx use DirectX for Windows audio/video [[default=yes]] + --enable-xinput use Xinput for Windows [[default=yes]] --enable-wasapi use the Windows WASAPI audio driver [[default=yes]] --enable-sdl-dlopen use dlopen for shared object loading [[default=yes]] --enable-hidapi use HIDAPI for low level joystick drivers @@ -23896,13 +23898,25 @@ $as_echo "#define HAVE_DXGI_H 1" >>confdefs.h esac fi + # Check whether --enable-xinput was given. +if test "${enable_xinput+set}" = set; then : + enableval=$enable_xinput; +else + enable_xinput=yes +fi + + if test x$enable_xinput = xyes; then + have_xinput_gamepadex=no + have_xinput_stateex=no ac_fn_c_check_header_mongrel "$LINENO" "xinput.h" "ac_cv_header_xinput_h" "$ac_includes_default" if test "x$ac_cv_header_xinput_h" = xyes; then : have_xinput=yes fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct XINPUT_GAMEPAD_EX" >&5 +$as_echo_n "checking for struct XINPUT_GAMEPAD_EX... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -23921,7 +23935,11 @@ if ac_fn_c_try_compile "$LINENO"; then : have_xinput_gamepadex=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_xinput_gamepadex" >&5 +$as_echo "$have_xinput_gamepadex" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct XINPUT_STATE_EX" >&5 +$as_echo_n "checking for struct XINPUT_STATE_EX... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -23940,21 +23958,24 @@ if ac_fn_c_try_compile "$LINENO"; then : have_xinput_stateex=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_xinput_stateex" >&5 +$as_echo "$have_xinput_stateex" >&6; } - if test x$have_xinput = xyes; then + if test x$have_xinput = xyes; then $as_echo "#define HAVE_XINPUT_H 1" >>confdefs.h - fi - if test x$have_xinput_gamepadex = xyes; then + fi + if test x$have_xinput_gamepadex = xyes; then $as_echo "#define HAVE_XINPUT_GAMEPAD_EX 1" >>confdefs.h - fi - if test x$have_xinput_stateex = xyes; then + fi + if test x$have_xinput_stateex = xyes; then $as_echo "#define HAVE_XINPUT_STATE_EX 1" >>confdefs.h + fi fi ac_fn_c_check_header_mongrel "$LINENO" "mmdeviceapi.h" "ac_cv_header_mmdeviceapi_h" "$ac_includes_default" diff --git a/configure.ac b/configure.ac index 976314aa7..ed1645ade 100644 --- a/configure.ac +++ b/configure.ac @@ -3146,7 +3146,7 @@ CheckDIRECTX() { AC_ARG_ENABLE(directx, AS_HELP_STRING([--enable-directx], [use DirectX for Windows audio/video [[default=yes]]]), - , enable_directx=yes) + , enable_directx=yes) if test x$enable_directx = xyes; then AC_CHECK_HEADER(d3d9.h, have_d3d=yes) AC_CHECK_HEADER(d3d11_1.h, have_d3d11=yes) @@ -3177,27 +3177,37 @@ AS_HELP_STRING([--enable-directx], [use DirectX for Windows audio/video [[defaul esac fi - dnl The following are independent of --enable-directx - AC_CHECK_HEADER(xinput.h, have_xinput=yes) - AC_TRY_COMPILE([ + AC_ARG_ENABLE(xinput, +AS_HELP_STRING([--enable-xinput], [use Xinput for Windows [[default=yes]]]), + , enable_xinput=yes) + if test x$enable_xinput = xyes; then + have_xinput_gamepadex=no + have_xinput_stateex=no + AC_CHECK_HEADER(xinput.h, have_xinput=yes) + AC_MSG_CHECKING(for struct XINPUT_GAMEPAD_EX) + AC_TRY_COMPILE([ #include #include XINPUT_GAMEPAD_EX x1; - ],[],[have_xinput_gamepadex=yes]) - AC_TRY_COMPILE([ + ],[],[have_xinput_gamepadex=yes]) + AC_MSG_RESULT($have_xinput_gamepadex) + AC_MSG_CHECKING(for struct XINPUT_STATE_EX) + AC_TRY_COMPILE([ #include #include XINPUT_STATE_EX s1; - ],[],[have_xinput_stateex=yes]) + ],[],[have_xinput_stateex=yes]) + AC_MSG_RESULT($have_xinput_stateex) - if test x$have_xinput = xyes; then - AC_DEFINE(HAVE_XINPUT_H, 1, [ ]) - fi - if test x$have_xinput_gamepadex = xyes; then - AC_DEFINE(HAVE_XINPUT_GAMEPAD_EX, 1, [ ]) - fi - if test x$have_xinput_stateex = xyes; then - AC_DEFINE(HAVE_XINPUT_STATE_EX, 1, [ ]) + if test x$have_xinput = xyes; then + AC_DEFINE(HAVE_XINPUT_H, 1, [ ]) + fi + if test x$have_xinput_gamepadex = xyes; then + AC_DEFINE(HAVE_XINPUT_GAMEPAD_EX, 1, [ ]) + fi + if test x$have_xinput_stateex = xyes; then + AC_DEFINE(HAVE_XINPUT_STATE_EX, 1, [ ]) + fi fi AC_CHECK_HEADER(mmdeviceapi.h, have_wasapi=yes)