From 03019c912ad5f8bcc4d627ebb324e0c976b99cf6 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Mon, 6 Dec 2021 20:37:52 +0300 Subject: [PATCH] autotools, cmake: tighten Xfixes check && explicitly test BarrierEventID Apparently the older versions of libXi doesn't have it. Fixes the build break issue reported at: https://github.com/libsdl-org/SDL/commit/4b42c05ba1eaaaa9a4ef803acea8f13402271039#commitcomment-61427659 --- cmake/sdlchecks.cmake | 11 ++++++++++- configure | 28 +++++++++++++++++++++------- configure.ac | 16 ++++++++++------ src/video/x11/SDL_x11sym.h | 2 +- 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake index 32be19c2f..6d20d46a2 100644 --- a/cmake/sdlchecks.cmake +++ b/cmake/sdlchecks.cmake @@ -418,7 +418,7 @@ macro(CheckX11) check_include_file(X11/extensions/Xinerama.h HAVE_XINERAMA_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/Xfixes.h HAVE_XFIXES_H) + check_include_file(X11/extensions/Xfixes.h HAVE_XFIXES_H_) check_include_file(X11/extensions/Xrender.h HAVE_XRENDER_H) check_include_file(X11/extensions/scrnsaver.h HAVE_XSS_H) check_include_file(X11/extensions/shape.h HAVE_XSHAPE_H) @@ -538,6 +538,15 @@ macro(CheckX11) endif() # check along with XInput2.h because we use Xfixes with XIBarrierReleasePointer + if(SDL_X11_XFIXES AND HAVE_XFIXES_H_ AND HAVE_XINPUT2_H) + check_c_source_compiles(" + #include + #include + #include + #include + BarrierEventID b; + int main(void) { }" HAVE_XFIXES_H) + endif() if(SDL_X11_XFIXES AND HAVE_XFIXES_H AND HAVE_XINPUT2_H) if(HAVE_X11_SHARED AND XFIXES_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES "\"${XFIXES_LIB_SONAME}\"") diff --git a/configure b/configure index 7069aef63..b059a4925 100755 --- a/configure +++ b/configure @@ -22123,17 +22123,31 @@ fi if test x$enable_video_x11_xfixes = xyes; then definitely_enable_video_x11_xfixes=no # check along with XInput2.h because we use Xfixes with XIBarrierReleasePointer - ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xfixes.h" "ac_cv_header_X11_extensions_Xfixes_h" "#include - #include - #include -" -if test "x$ac_cv_header_X11_extensions_Xfixes_h" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11/extensions/Xfixes.h" >&5 +$as_echo_n "checking for X11/extensions/Xfixes.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include + #include + #include +int +main () +{ +BarrierEventID b; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : have_xfixes_h_hdr=yes else have_xfixes_h_hdr=no fi - - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_xfixes_h_hdr" >&5 +$as_echo "$have_xfixes_h_hdr" >&6; } if test x$have_xfixes_h_hdr = xyes; then if test x$enable_x11_shared = xyes && test x$xfixes_lib != x ; then echo "-- dynamic libXfixes -> $xfixes_lib" diff --git a/configure.ac b/configure.ac index 551a5de86..623d5f163 100644 --- a/configure.ac +++ b/configure.ac @@ -1973,12 +1973,16 @@ XITouchClassInfo *t; if test x$enable_video_x11_xfixes = xyes; then definitely_enable_video_x11_xfixes=no # check along with XInput2.h because we use Xfixes with XIBarrierReleasePointer - AC_CHECK_HEADER(X11/extensions/Xfixes.h, - have_xfixes_h_hdr=yes, - have_xfixes_h_hdr=no, - [#include - #include - #include ]) + AC_MSG_CHECKING(for X11/extensions/Xfixes.h) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + #include + #include ]], + [BarrierEventID b;])], + [have_xfixes_h_hdr=yes], + [have_xfixes_h_hdr=no]) + AC_MSG_RESULT($have_xfixes_h_hdr) if test x$have_xfixes_h_hdr = xyes; then if test x$enable_x11_shared = xyes && test x$xfixes_lib != x ; then echo "-- dynamic libXfixes -> $xfixes_lib" diff --git a/src/video/x11/SDL_x11sym.h b/src/video/x11/SDL_x11sym.h index 673b7f101..7951511b4 100644 --- a/src/video/x11/SDL_x11sym.h +++ b/src/video/x11/SDL_x11sym.h @@ -163,7 +163,7 @@ SDL_X11_SYM(Status,XmbTextListToTextProperty,(Display* a,char** b,int c,XICCEnco SDL_X11_MODULE(XFIXES) SDL_X11_SYM(PointerBarrier, XFixesCreatePointerBarrier, (Display* a, Window b, int c, int d, int e, int f, int g, int h, int *i),(a,b,c,d,e,f,g,h,i),return) SDL_X11_SYM(void, XFixesDestroyPointerBarrier, (Display* a, PointerBarrier b), (a,b),) -SDL_X11_SYM(int, XIBarrierReleasePointer,(Display* a, int b, PointerBarrier c, BarrierEventID d), (a,b,c,d), return) +SDL_X11_SYM(int, XIBarrierReleasePointer,(Display* a, int b, PointerBarrier c, BarrierEventID d), (a,b,c,d), return) /* this is actually Xinput2 */ SDL_X11_SYM(Status, XFixesQueryVersion,(Display* a, int* b, int* c), (a,b,c), return) #endif