Bladeren bron

cmake: use CMakePushCheckState to handle check states

Anonymous Maarten 2 jaren geleden
bovenliggende
commit
8f9227e4be
2 gewijzigde bestanden met toevoegingen van 60 en 62 verwijderingen
  1. 48 46
      CMakeLists.txt
  2. 12 16
      cmake/sdlchecks.cmake

+ 48 - 46
CMakeLists.txt

@@ -283,19 +283,14 @@ else()
   endif()
 endif()
 
-# Emscripten toolchain has a nonempty default value for this, and the checks
-# in this file need to change that, so remember the original value, and
-# restore back to that afterwards. For check_function_exists() to work in
-# Emscripten, this value must be at its default value.
-set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
-
 if(CYGWIN)
   # We build SDL on cygwin without the UNIX emulation layer
   target_include_directories(sdl-build-options INTERFACE "/usr/include/mingw")
+  cmake_push_check_state()
   set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mno-cygwin")
   check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
     HAVE_GCC_NO_CYGWIN)
-  set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
+  cmake_pop_check_state()
   if(HAVE_GCC_NO_CYGWIN)
     list(APPEND EXTRA_LDFLAGS_BUILD "-mno-cygwin")
     list(APPEND SDL_LIBS "-mno-cygwin")
@@ -473,22 +468,18 @@ set(HAVE_STATIC_PIC "${SDL_STATIC_PIC}")
 
 if(SDL_WERROR)
   if(MSVC)
-    cmake_push_check_state()
     check_c_compiler_flag(/WX HAVE_WX)
     if(HAVE_WX)
       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
     endif()
-    cmake_pop_check_state()
   elseif(USE_GCC OR USE_CLANG)
-    cmake_push_check_state()
     check_c_compiler_flag(-Werror HAVE_WERROR)
     if(HAVE_WERROR)
       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
       set(CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -Werror")
     endif()
-    cmake_pop_check_state()
   endif()
 endif()
 
@@ -616,21 +607,23 @@ if(USE_GCC OR USE_CLANG)
     endif()
   endif()
 
-  set(CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2")
+  cmake_push_check_state()
+  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mpreferred-stack-boundary=2")
   check_c_source_compiles("int x = 0; int main(int argc, char **argv) { return 0; }"
     HAVE_GCC_PREFERRED_STACK_BOUNDARY)
-  set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
+  cmake_pop_check_state()
 
-  set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror")
+  cmake_push_check_state()
+  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fvisibility=hidden -Werror")
   check_c_source_compiles("
       #if !defined(__GNUC__) || __GNUC__ < 4
       #error SDL only uses visibility attributes in GCC 4 or newer
       #endif
       int main(int argc, char **argv) { return 0; }" HAVE_GCC_FVISIBILITY)
+  cmake_pop_check_state()
   if(HAVE_GCC_FVISIBILITY)
     list(APPEND EXTRA_CFLAGS "-fvisibility=hidden")
   endif()
-  set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
 
   check_c_compiler_flag(-Wshadow HAVE_GCC_WSHADOW)
   if(HAVE_GCC_WSHADOW)
@@ -650,9 +643,10 @@ if(USE_GCC OR USE_CLANG)
     list(APPEND EXTRA_LDFLAGS_BUILD "-Wl,-compatibility_version,${SDL_DYLIB_COMPAT_VERSION}")
     list(APPEND EXTRA_LDFLAGS_BUILD "-Wl,-current_version,${SDL_DYLIB_CURRENT_VERSION}")
   elseif(NOT OPENBSD)
-    set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
+    cmake_push_check_state()
+    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wl,--no-undefined")
     check_c_compiler_flag("" HAVE_NO_UNDEFINED)
-    set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
+    cmake_pop_check_state()
     if(HAVE_NO_UNDEFINED AND NOT (USE_CLANG AND WINDOWS))
       list(APPEND EXTRA_LDFLAGS_BUILD "-Wl,--no-undefined")
     endif()
@@ -702,7 +696,8 @@ if(SDL_ASSEMBLY)
     # reworked for better compiler support
     set(HAVE_ASSEMBLY TRUE)
     if(SDL_MMX)
-      set(CMAKE_REQUIRED_FLAGS "-mmmx")
+      cmake_push_check_state()
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mmmx")
       check_c_source_compiles("
           #ifdef __MINGW32__
           #include <_mingw.h>
@@ -718,14 +713,15 @@ if(SDL_ASSEMBLY)
           #error Assembler CPP flag not enabled
           #endif
           int main(int argc, char **argv) { return 0; }" HAVE_MMX)
+      cmake_pop_check_state()
       if(HAVE_MMX)
         list(APPEND EXTRA_CFLAGS "-mmmx")
       endif()
-      set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
     endif()
 
     if(SDL_3DNOW)
-      set(CMAKE_REQUIRED_FLAGS "-m3dnow")
+      cmake_push_check_state()
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -m3dnow")
       check_c_source_compiles("
           #include <mm3dnow.h>
           #ifndef __3dNOW__
@@ -736,15 +732,16 @@ if(SDL_ASSEMBLY)
             _m_prefetch(p);
             return 0;
           }" CPU_SUPPORTS_3DNOW)
+      cmake_pop_check_state()
       if(CPU_SUPPORTS_3DNOW)
         set(HAVE_3DNOW TRUE)
         list(APPEND EXTRA_CFLAGS "-m3dnow")
       endif()
-      set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
     endif()
 
     if(SDL_SSE)
-      set(CMAKE_REQUIRED_FLAGS "-msse")
+      cmake_push_check_state()
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -msse")
       check_c_source_compiles("
           #ifdef __MINGW32__
           #include <_mingw.h>
@@ -760,15 +757,16 @@ if(SDL_ASSEMBLY)
           #error Assembler CPP flag not enabled
           #endif
           int main(int argc, char **argv) { return 0; }" CPU_SUPPORTS_SSE)
+      cmake_pop_check_state()
       if(CPU_SUPPORTS_SSE)
         set(HAVE_SSE ON)
         list(APPEND EXTRA_CFLAGS "-msse")
       endif()
-      set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
     endif()
 
     if(SDL_SSE2)
-      set(CMAKE_REQUIRED_FLAGS "-msse2")
+      cmake_push_check_state()
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -msse2")
       check_c_source_compiles("
           #ifdef __MINGW32__
           #include <_mingw.h>
@@ -784,15 +782,16 @@ if(SDL_ASSEMBLY)
           #error Assembler CPP flag not enabled
           #endif
           int main(int argc, char **argv) { return 0; }" CPU_SUPPORTS_SSE2)
+      cmake_pop_check_state()
       if(CPU_SUPPORTS_SSE2)
         set(HAVE_SSE2 TRUE)
         list(APPEND EXTRA_CFLAGS "-msse2")
       endif()
-      set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
     endif()
 
     if(SDL_SSE3)
-      set(CMAKE_REQUIRED_FLAGS "-msse3")
+      cmake_push_check_state()
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -msse3")
       check_c_source_compiles("
           #ifdef __MINGW32__
           #include <_mingw.h>
@@ -808,11 +807,11 @@ if(SDL_ASSEMBLY)
           #error Assembler CPP flag not enabled
           #endif
           int main(int argc, char **argv) { return 0; }" CPU_SUPPORTS_SSE3)
+      cmake_pop_check_state()
       if(CPU_SUPPORTS_SSE3)
         set(HAVE_SSE3 TRUE)
         list(APPEND EXTRA_CFLAGS "-msse3")
       endif()
-      set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
     endif()
 
     if(NOT SDL_SSEMATH)
@@ -831,7 +830,8 @@ if(SDL_ASSEMBLY)
     check_include_file("immintrin.h" HAVE_IMMINTRIN_H)
 
     if(SDL_ALTIVEC)
-      set(CMAKE_REQUIRED_FLAGS "-maltivec")
+      cmake_push_check_state()
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -maltivec")
       check_c_source_compiles("
           #include <altivec.h>
           vector unsigned int vzero() {
@@ -843,7 +843,7 @@ if(SDL_ASSEMBLY)
               return vec_splat_u32(0);
           }
           int main(int argc, char **argv) { return 0; }" CPU_SUPPORTS_ALTIVEC)
-      set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
+      cmake_pop_check_state()
       if(CPU_SUPPORTS_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
         set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set
         list(APPEND EXTRA_CFLAGS "-maltivec")
@@ -856,7 +856,7 @@ if(SDL_ASSEMBLY)
 
     if(SDL_LSX)
       cmake_push_check_state()
-      list(APPEND CMAKE_REQUIRED_FLAGS "-mlsx")
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mlsx")
       check_c_source_compiles([[
           #ifndef __loongarch_sx
           #error Assembler CPP flag not enabled
@@ -873,7 +873,7 @@ if(SDL_ASSEMBLY)
 
     if(SDL_LASX)
       cmake_push_check_state()
-      list(APPEND CMAKE_REQUIRED_FLAGS "-mlasx")
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mlasx")
       check_c_source_compiles([[
           #ifndef __loongarch_asx
           #error Assembler CPP flag not enabled
@@ -888,7 +888,7 @@ if(SDL_ASSEMBLY)
     endif()
 
     if(SDL_ARMSIMD)
-      set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+      cmake_push_check_state()
       set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp")
       check_c_source_compiles("
         .text
@@ -902,7 +902,7 @@ if(SDL_ASSEMBLY)
         pld [r0]
         uqadd8 r0, r0, r0
       " ARMSIMD_FOUND)
-      set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
+      cmake_pop_check_state()
 
       if(ARMSIMD_FOUND)
         set(HAVE_ARMSIMD TRUE)
@@ -1057,7 +1057,7 @@ if(SDL_LIBC)
 
     check_library_exists(m pow "" HAVE_LIBM)
     if(HAVE_LIBM)
-      set(CMAKE_REQUIRED_LIBRARIES m)
+      cmake_push_check_state()
       foreach(_FN
               atan atan2 atanf atan2f ceil ceilf copysign copysignf cos cosf
               exp expf fabs fabsf floor floorf fmod fmodf log logf log10 log10f
@@ -1068,7 +1068,7 @@ if(SDL_LIBC)
         check_symbol_exists("${_FN}" "math.h" ${LIBC_HASVAR})
         set(HAVE_${_UPPER} ${${LIBC_HASVAR}})
       endforeach()
-      set(CMAKE_REQUIRED_LIBRARIES)
+      cmake_pop_check_state()
       if(NOT VITA)
         list(APPEND EXTRA_LIBS m)
       endif()
@@ -1206,12 +1206,12 @@ if(ANDROID)
   # see: https://issuetracker.google.com/issues/62264618
   # Another option would be to set ARM mode to all compiled files
   cmake_push_check_state()
-  set(CMAKE_REQUIRED_FLAGS "-Werror=unused-command-line-argument")
+  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror=unused-command-line-argument")
   check_c_compiler_flag(-marm HAVE_ARM_MODE)
+  cmake_pop_check_state()
   if(HAVE_ARM_MODE)
     set_property(SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm")
   endif()
-  cmake_pop_check_state()
 
   if(SDL_AUDIO)
     set(SDL_AUDIO_DRIVER_ANDROID 1)
@@ -1662,9 +1662,10 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
   set(SDL_RLD_FLAGS "")
   if(SDL_RPATH AND SDL_SHARED)
     if(BSDI OR FREEBSD OR LINUX OR NETBSD)
-      set(CMAKE_REQUIRED_FLAGS "-Wl,--enable-new-dtags")
+      cmake_push_check_state()
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wl,--enable-new-dtags")
       check_c_compiler_flag("" HAVE_ENABLE_NEW_DTAGS)
-      set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
+      cmake_pop_check_state()
       if(HAVE_ENABLE_NEW_DTAGS)
         set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir} -Wl,--enable-new-dtags")
       else()
@@ -1711,6 +1712,7 @@ elseif(WINDOWS)
 
   # Check for DirectX
   if(SDL_DIRECTX)
+    cmake_push_check_state()
     if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700)
         set(USE_WINSDK_DIRECTX TRUE)
     endif()
@@ -1718,7 +1720,7 @@ elseif(WINDOWS)
       if("$ENV{DXSDK_DIR}" STREQUAL "")
         message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set")
       endif()
-      set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"")
+      set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} /I\"$ENV{DXSDK_DIR}\\Include\"")
     endif()
 
     check_include_file(d3d9.h HAVE_D3D_H)
@@ -1738,6 +1740,7 @@ elseif(WINDOWS)
       set(HAVE_DINPUT_H 0)
     endif()
     check_include_file(dxgi.h HAVE_DXGI_H)
+    cmake_pop_check_state()
     if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_D3D12_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H)
       set(HAVE_DIRECTX TRUE)
       if(NOT MINGW AND NOT USE_WINSDK_DIRECTX)
@@ -1746,7 +1749,6 @@ elseif(WINDOWS)
         target_include_directories(sdl-build-options INTERFACE "$ENV{DXSDK_DIR}\\Include")
       endif()
     endif()
-    set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
   endif()
 
   if(SDL_XINPUT)
@@ -2380,12 +2382,12 @@ elseif(RISCOS)
 elseif(VITA)
   # SDL_spinlock.c Needs to be compiled in ARM mode.
   cmake_push_check_state()
-  set(CMAKE_REQUIRED_FLAGS "-Werror=unused-command-line-argument")
+  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror=unused-command-line-argument")
   check_c_compiler_flag(-marm HAVE_ARM_MODE)
+  cmake_pop_check_state()
   if(HAVE_ARM_MODE)
     set_property(SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm")
   endif()
-  cmake_pop_check_state()
 
   if(SDL_MISC)
     file(GLOB MISC_SOURCES ${SDL3_SOURCE_DIR}/src/misc/vita/*.c)
@@ -2971,11 +2973,11 @@ macro(asan_check_add_debug_flag2 ASAN_FLAG)
 
     set(FLAG "-fsanitize=${ASAN_FLAG}")
 
-    set (STORED_REQLIBS ${CMAKE_REQUIRED_LIBRARIES})
-    set (CMAKE_REQUIRED_LIBRARIES "${FLAG};asan")
+    cmake_push_check_state()
+    list(APPEND CMAKE_REQUIRED_LIBRARIES ${FLAG} asan)
     check_c_compiler_flag (${FLAG} HAS_C_FLAG_${ASAN_FLAG})
     check_cxx_compiler_flag (${FLAG} HAS_CXX_FLAG_${ASAN_FLAG})
-    set (CMAKE_REQUIRED_LIBRARIES ${STORED_REQLIBS})
+    cmake_pop_check_state()
 
     if (HAS_C_FLAG_${ASAN_FLAG})
         set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${FLAG}")

+ 12 - 16
cmake/sdlchecks.cmake

@@ -42,11 +42,12 @@ macro(FindLibraryAndSONAME _LIB)
 endmacro()
 
 macro(CheckDLOPEN)
-  cmake_push_check_state()
   check_symbol_exists(dlopen "dlfcn.h" HAVE_DLOPEN_IN_LIBC)
   if(NOT HAVE_DLOPEN_IN_LIBC)
-    set(CMAKE_REQUIRED_LIBRARIES dl)
+    cmake_push_check_state()
+    list(APPEND CMAKE_REQUIRED_LIBRARIES dl)
     check_symbol_exists(dlopen "dlfcn.h" HAVE_DLOPEN_IN_LIBDL)
+    cmake_pop_check_state()
     if(HAVE_DLOPEN_IN_LIBDL)
       list(APPEND EXTRA_LIBS dl)
     endif()
@@ -54,7 +55,6 @@ macro(CheckDLOPEN)
   if(HAVE_DLOPEN_IN_LIBC OR HAVE_DLOPEN_IN_LIBDL)
     set(HAVE_DLOPEN TRUE)
   endif()
-  cmake_pop_check_state()
 endmacro()
 
 macro(CheckO_CLOEXEC)
@@ -385,7 +385,7 @@ macro(CheckX11)
           list(APPEND EXTRA_LIBS ${X11_LIB} ${XEXT_LIB})
       endif()
 
-      set(CMAKE_REQUIRED_LIBRARIES ${X11_LIB} ${X11_LIB})
+      list(APPEND CMAKE_REQUIRED_LIBRARIES ${X11_LIB})
 
       check_c_source_compiles("
           #include <X11/Xlib.h>
@@ -487,8 +487,6 @@ macro(CheckX11)
         set(SDL_VIDEO_DRIVER_X11_XSHAPE 1)
         set(HAVE_X11_XSHAPE TRUE)
       endif()
-
-      set(CMAKE_REQUIRED_LIBRARIES)
     endif()
   endif()
   if(NOT HAVE_X11)
@@ -749,6 +747,7 @@ endmacro()
 # PTHREAD_CFLAGS
 # PTHREAD_LIBS
 macro(CheckPTHREAD)
+  cmake_push_check_state()
   if(SDL_THREADS AND SDL_PTHREADS)
     if(ANDROID)
       # the android libc provides built-in support for pthreads, so no
@@ -797,7 +796,6 @@ macro(CheckPTHREAD)
     endif()
 
     # Run some tests
-    set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
     set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${PTHREAD_CFLAGS} ${PTHREAD_LDFLAGS}")
     check_c_source_compiles("
       #include <pthread.h>
@@ -881,8 +879,8 @@ macro(CheckPTHREAD)
       endif()
       set(HAVE_SDL_THREADS TRUE)
     endif()
-    set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
   endif()
+  cmake_pop_check_state()
 endmacro()
 
 # Requires
@@ -892,6 +890,7 @@ endmacro()
 # USB_LIBS
 # USB_CFLAGS
 macro(CheckUSBHID)
+  cmake_push_check_state()
   check_library_exists(usbhid hid_init "" LIBUSBHID)
   if(LIBUSBHID)
     check_include_file(usbhid.h HAVE_USBHID_H)
@@ -919,9 +918,8 @@ macro(CheckUSBHID)
     endif()
   endif()
 
-  set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
   set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${USB_CFLAGS}")
-  set(CMAKE_REQUIRED_LIBRARIES "${USB_LIBS}")
+  list(APPEND CMAKE_REQUIRED_LIBRARIES ${USB_LIBS})
   check_c_source_compiles("
        #include <sys/types.h>
         #if defined(HAVE_USB_H)
@@ -1020,9 +1018,8 @@ macro(CheckUSBHID)
     list(APPEND EXTRA_LIBS ${USB_LIBS})
     set(HAVE_SDL_JOYSTICK TRUE)
 
-    set(CMAKE_REQUIRED_LIBRARIES)
-    set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
   endif()
+  cmake_pop_check_state()
 endmacro()
 
 # Check for HIDAPI support
@@ -1093,9 +1090,9 @@ macro(CheckRPI)
     listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I")
     listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L")
 
-    set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+    cmake_push_check_state()
     set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}")
-    set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}")
+    list(APPEND CMAKE_REQUIRED_LIBRARIES ${VIDEO_RPI_LIBRARIES})
     check_c_source_compiles("
         #include <bcm_host.h>
         #include <EGL/eglplatform.h>
@@ -1103,8 +1100,7 @@ macro(CheckRPI)
           EGL_DISPMANX_WINDOW_T window;
           bcm_host_init();
         }" HAVE_RPI)
-    set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
-    set(CMAKE_REQUIRED_LIBRARIES)
+    cmake_pop_check_state()
 
     if(SDL_VIDEO AND HAVE_RPI)
       set(HAVE_SDL_VIDEO TRUE)