SDL: check for shellscalingapi.h presence instead of WINVER >= 0x0603

From a8d41b3b4587aca7d1f967fe8bb862a4b8ebccd0 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Sat, 18 Jun 2022 21:51:32 +0300
Subject: [PATCH] check for shellscalingapi.h presence instead of WINVER >=
 0x0603

---
 CMakeLists.txt                       |  1 +
 configure                            | 19 +++++++++++++++----
 configure.ac                         |  4 ++++
 include/SDL_config.h.cmake           |  1 +
 include/SDL_config.h.in              |  1 +
 include/SDL_config_windows.h         |  3 +++
 src/video/windows/SDL_windowsvideo.h |  4 ++--
 7 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a49a5819076..e56a5f5f420 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1651,6 +1651,7 @@ elseif(WINDOWS)
   check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
   check_include_file(audioclient.h HAVE_AUDIOCLIENT_H)
   check_include_file(sensorsapi.h HAVE_SENSORSAPI_H)
+  check_include_file(shellscalingapi.h HAVE_SHELLSCALINGAPI_H)
 
   if(SDL_AUDIO)
     if(NOT WINDOWS_STORE)
diff --git a/configure b/configure
index b6f9b7049d9..1c1ac2d208c 100755
--- a/configure
+++ b/configure
@@ -14084,11 +14084,11 @@ if test x$ac_prog_cxx_stdcxx = xno
 then :
   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
 printf %s "checking for $CXX option to enable C++11 features... " >&6; }
-if test ${ac_cv_prog_cxx_11+y}
+if test ${ac_cv_prog_cxx_cxx11+y}
 then :
   printf %s "(cached) " >&6
 else $as_nop
-  ac_cv_prog_cxx_11=no
+  ac_cv_prog_cxx_cxx11=no
 ac_save_CXX=$CXX
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -14130,11 +14130,11 @@ if test x$ac_prog_cxx_stdcxx = xno
 then :
   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
 printf %s "checking for $CXX option to enable C++98 features... " >&6; }
-if test ${ac_cv_prog_cxx_98+y}
+if test ${ac_cv_prog_cxx_cxx98+y}
 then :
   printf %s "(cached) " >&6
 else $as_nop
-  ac_cv_prog_cxx_98=no
+  ac_cv_prog_cxx_cxx98=no
 ac_save_CXX=$CXX
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -27103,6 +27103,17 @@ fi
 
 printf "%s\n" "#define HAVE_ROAPI_H 1" >>confdefs.h
 
+    fi
+    ac_fn_c_check_header_compile "$LINENO" "shellscalingapi.h" "ac_cv_header_shellscalingapi_h" "$ac_includes_default"
+if test "x$ac_cv_header_shellscalingapi_h" = xyes
+then :
+  have_shellscalingapi_h=yes
+fi
+
+    if test x$shellscalingapi_h = xyes; then
+
+printf "%s\n" "#define HAVE_SHELLSCALINGAPI_H 1" >>confdefs.h
+
     fi
 }
 
diff --git a/configure.ac b/configure.ac
index ee8a41ebfcf..4420359cf06 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3242,6 +3242,10 @@ CheckWINDOWS()
     if test x$have_roapi_h = xyes; then
         AC_DEFINE(HAVE_ROAPI_H, 1, [ ])
     fi
+    AC_CHECK_HEADER(shellscalingapi.h,have_shellscalingapi_h=yes)
+    if test x$shellscalingapi_h = xyes; then
+        AC_DEFINE(HAVE_SHELLSCALINGAPI_H, 1, [ ])
+    fi
 }
 
 dnl Determine whether the compiler can produce OS/2 executables
diff --git a/include/SDL_config.h.cmake b/include/SDL_config.h.cmake
index 6f448c0681f..9cc18ab95c1 100644
--- a/include/SDL_config.h.cmake
+++ b/include/SDL_config.h.cmake
@@ -256,6 +256,7 @@
 #cmakedefine HAVE_TPCSHRD_H @HAVE_TPCSHRD_H@
 #cmakedefine HAVE_SENSORSAPI_H @HAVE_SENSORSAPI_H@
 #cmakedefine HAVE_ROAPI_H @HAVE_ROAPI_H@
+#cmakedefine HAVE_SHELLSCALINGAPI_H @HAVE_SHELLSCALINGAPI_H@
 
 #cmakedefine HAVE_XINPUT_GAMEPAD_EX @HAVE_XINPUT_GAMEPAD_EX@
 #cmakedefine HAVE_XINPUT_STATE_EX @HAVE_XINPUT_STATE_EX@
diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in
index c758b45289f..7b6eb5db7eb 100644
--- a/include/SDL_config.h.in
+++ b/include/SDL_config.h.in
@@ -246,6 +246,7 @@
 #undef HAVE_TPCSHRD_H
 #undef HAVE_SENSORSAPI_H
 #undef HAVE_ROAPI_H
+#undef HAVE_SHELLSCALINGAPI_H
 
 /* SDL internal assertion support */
 #undef SDL_DEFAULT_ASSERT_LEVEL
diff --git a/include/SDL_config_windows.h b/include/SDL_config_windows.h
index 076bea4103c..3ad3e8ff112 100644
--- a/include/SDL_config_windows.h
+++ b/include/SDL_config_windows.h
@@ -122,6 +122,9 @@ typedef unsigned int uintptr_t;
 #if defined(WDK_NTDDI_VERSION) && WDK_NTDDI_VERSION > 0x0A000008 /* 10.0.19041.0 */
 #define HAVE_D3D12_H 1
 #endif
+#if defined(_WIN32_MAXVER) && _WIN32_MAXVER >= 0x0603  /* Windows 8.1 SDK */
+#define HAVE_SHELLSCALINGAPI_H 1
+#endif
 #define HAVE_MMDEVICEAPI_H 1
 #define HAVE_AUDIOCLIENT_H 1
 #define HAVE_TPCSHRD_H 1
diff --git a/src/video/windows/SDL_windowsvideo.h b/src/video/windows/SDL_windowsvideo.h
index 50a4371ac98..b477655c33a 100644
--- a/src/video/windows/SDL_windowsvideo.h
+++ b/src/video/windows/SDL_windowsvideo.h
@@ -274,7 +274,7 @@ typedef struct DISPLAYCONFIG_TARGET_DEVICE_NAME
 
 #endif /* WINVER < 0x0601 */
 
-#if WINVER < 0x0603
+#ifndef HAVE_SHELLSCALINGAPI_H
 
 typedef enum MONITOR_DPI_TYPE {
     MDT_EFFECTIVE_DPI = 0,
@@ -291,7 +291,7 @@ typedef enum PROCESS_DPI_AWARENESS {
 
 #else
 #include <shellscalingapi.h>
-#endif /* WINVER < 0x0603 */
+#endif
 
 #ifndef _DPI_AWARENESS_CONTEXTS_