Browse Source

Update existing custom CMake modules to work with SDL 2.0.7.

Yao Wei Tjong 姚伟忠 8 years ago
parent
commit
3ffe7bfee9
2 changed files with 19 additions and 4 deletions
  1. 9 3
      CMake/Modules/FindDirectX.cmake
  2. 10 1
      CMake/Modules/FindMir.cmake

+ 9 - 3
CMake/Modules/FindDirectX.cmake

@@ -45,13 +45,16 @@
 #  DIRECT3D_LIBRARIES
 #  DIRECT3D_DLL
 #
-# When corresponding header listed below is found:
+
+set (DIRECTX_HEADERS audioclient.h d3dcompiler.h d3d9.h d3d11.h ddraw.h dsound.h dinput.h dxgi.h mmdeviceapi.h xaudio2.h xinput.h)
+
+# When corresponding header listed above is found:
 #  HAVE_<UPCASE_NAME>_H
+#  HAVE_XINPUT_GAMEPAD_EX
+#  HAVE_XINPUT_STATE_EX
 #  HAVE_D3D_H (Currently synonym to HAVE_D3D9_H)
 #
 
-set (DIRECTX_HEADERS d3dcompiler.h d3d9.h d3d11.h ddraw.h dsound.h dinput.h dxgi.h xaudio2.h xinput.h)
-
 # Optional input variables (see corresponding code comments for details):
 #  DIRECTX_INC_SEARCH_PATHS
 #  DIRECTX_LIB_SEARCH_PATHS
@@ -213,12 +216,15 @@ endif ()
 # For now take shortcut for the other DirectX components by just checking on the headers and not the libraries
 include (CheckIncludeFiles)
 include (CheckIncludeFileCXX)
+include (CheckStructHasMember)
 foreach (NAME ${DIRECTX_HEADERS})
     string (REPLACE . _ BASE_NAME ${NAME})
     string (TOUPPER ${BASE_NAME} UPCASE_NAME)
     if (NAME STREQUAL xinput.h)
         # Workaround an issue in finding xinput.h using check_include_file() as it depends on windows.h but not included it by itself in WinSDK
         check_include_files (windows.h\;${NAME} HAVE_${UPCASE_NAME})
+        check_struct_has_member (XINPUT_GAMEPAD_EX wButtons xinput.h HAVE_XINPUT_GAMEPAD_EX)
+        check_struct_has_member (XINPUT_STATE_EX dwPacketNumber xinput.h HAVE_XINPUT_STATE_EX)
     else ()
         check_include_file_cxx (${NAME} HAVE_${UPCASE_NAME})
     endif ()

+ 10 - 1
CMake/Modules/FindMir.cmake

@@ -25,6 +25,7 @@
 #  MIR_FOUND
 #  MIR_INCLUDE_DIRS
 #  MIR_CLIENT
+#  MIR_CLIENT_VERSION
 #  MIR_COMMON
 #  EGL
 #  XKB
@@ -37,8 +38,16 @@ find_library (MIR_COMMON NAMES mircommon DOC "Mir common library")
 find_library (EGL NAMES EGL DOC "EGL library")
 find_library (XKB NAMES xkbcommon DOC "Xkb common library")
 
+if (NOT MIR_CLIENT_VERSION AND MIR_CLIENT_INCLUDE_DIR AND EXISTS ${MIR_CLIENT_INCLUDE_DIR}/mir_toolkit/version.h)   # Only do this once
+    file (STRINGS ${MIR_CLIENT_INCLUDE_DIR}/mir_toolkit/version.h MIR_CLIENT_VERSION REGEX "^.*MIR_CLIENT_API_VERSION_(MAJOR|MINOR|PATCH).+\([^\)]*\).*$")
+    string (REGEX REPLACE "^.*MIR_CLIENT_API_VERSION_MAJOR.+\(([^\)]*)\).*$" \\1 MIR_CLIENT_API_VERSION_MAJOR "${MIR_CLIENT_VERSION}")      # Stringify to guard against empty variable
+    string (REGEX REPLACE "^.*MIR_CLIENT_API_VERSION_MINOR.+\(([^\)]*)\).*$" \\1 MIR_CLIENT_API_VERSION_MINOR "${MIR_CLIENT_VERSION}")
+    string (REGEX REPLACE "^.*MIR_CLIENT_API_VERSION_PATCH.+\(([^\)]*)\).*$" \\1 MIR_CLIENT_API_VERSION_PATCH "${MIR_CLIENT_VERSION}")
+    set (MIR_CLIENT_VERSION "${MIR_CLIENT_API_VERSION_MAJOR}.${MIR_CLIENT_API_VERSION_MINOR}.${MIR_CLIENT_API_VERSION_PATCH}" CACHE INTERNAL "Mirclient version")
+endif ()
+
 include (FindPackageHandleStandardArgs)
-find_package_handle_standard_args (Mir REQUIRED_VARS MIR_CLIENT MIR_COMMON EGL XKB MIR_CLIENT_INCLUDE_DIR MIR_COMMON_INCLUDE_DIR FAIL_MESSAGE "Could NOT find Mir display server")
+find_package_handle_standard_args (Mir REQUIRED_VARS MIR_CLIENT MIR_COMMON EGL XKB MIR_CLIENT_INCLUDE_DIR MIR_COMMON_INCLUDE_DIR VERSION_VAR MIR_CLIENT_VERSION FAIL_MESSAGE "Could NOT find Mir display server")
 if (MIR_FOUND)
     set (MIR_INCLUDE_DIRS ${MIR_CLIENT_INCLUDE_DIR} ${MIR_COMMON_INCLUDE_DIR})
 endif ()