Commit ef1014ac68eda75d8cb0940f3d389ea5ec02eb39

Alex Szpakowski 2018-01-02T19:06:14

configure script: Implement testing for build-time Metal SDK support.

diff --git a/configure b/configure
index ff5f7fc..b584378 100755
--- a/configure
+++ b/configure
@@ -21230,11 +21230,47 @@ else
 fi
 
     if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+        save_CFLAGS="$CFLAGS"
+                CFLAGS="$CFLAGS -x objective-c"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Metal framework" >&5
+$as_echo_n "checking for Metal framework... " >&6; }
+        have_metal=no
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #import <Cocoa/Cocoa.h>
+          #import <Metal/Metal.h>
+          #import <QuartzCore/CAMetalLayer.h>
+
+          #if !TARGET_CPU_X86_64
+          #error Metal doesn't work on this configuration
+          #endif
+
+int
+main ()
+{
+
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+        have_metal=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        CFLAGS="$save_CFLAGS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_metal" >&5
+$as_echo "$have_metal" >&6; }
+        if test x$have_metal = xyes; then
 
 $as_echo "#define SDL_VIDEO_RENDER_METAL 1" >>confdefs.h
 
-        SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
-        SUMMARY_video="${SUMMARY_video} metal"
+            SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
+            SUMMARY_video="${SUMMARY_video} metal"
+        fi
     fi
 }
 
diff --git a/configure.in b/configure.in
index fd0224c..669a3d8 100644
--- a/configure.in
+++ b/configure.in
@@ -2066,10 +2066,30 @@ CheckMETAL()
 AC_HELP_STRING([--enable-render-metal], [enable the Metal render driver [[default=yes]]]),
                                 , enable_render_metal=yes)
     if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
-        dnl This should maybe make sure you have a supported SDK version.
-        AC_DEFINE(SDL_VIDEO_RENDER_METAL, 1, [ ])
-        SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
-        SUMMARY_video="${SUMMARY_video} metal"
+        save_CFLAGS="$CFLAGS"
+        dnl Work around that we don't have Objective-C support in autoconf
+        CFLAGS="$CFLAGS -x objective-c"
+        AC_MSG_CHECKING(for Metal framework)
+        have_metal=no
+        AC_TRY_COMPILE([
+          #import <Cocoa/Cocoa.h>
+          #import <Metal/Metal.h>
+          #import <QuartzCore/CAMetalLayer.h>
+
+          #if !TARGET_CPU_X86_64
+          #error Metal doesn't work on this configuration
+          #endif
+        ],[
+        ],[
+        have_metal=yes
+        ])
+        CFLAGS="$save_CFLAGS"
+        AC_MSG_RESULT($have_metal)
+        if test x$have_metal = xyes; then
+            AC_DEFINE(SDL_VIDEO_RENDER_METAL, 1, [ ])
+            SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
+            SUMMARY_video="${SUMMARY_video} metal"
+        fi
     fi
 }