sdl2-compat: cmake: build .m files as objective-c

From 8710e958186f4e0ad6bb6d497b603c6004cfe6b3 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Wed, 30 Nov 2022 02:34:01 +0100
Subject: [PATCH] cmake: build .m files as objective-c

---
 CMakeLists.txt | 46 +++++++++++++++++++++++++++++++++++++---------
 1 file changed, 37 insertions(+), 9 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 80a2133..fd78ffe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,6 +5,23 @@
 cmake_minimum_required(VERSION 3.0.0)
 project(sdl2_compat VERSION 2.90.0 LANGUAGES C)
 
+if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
+  set(SDL2COMPAT_SUBPROJECT OFF)
+else()
+  set(SDL2COMPAT_SUBPROJECT ON)
+endif()
+
+if(CMAKE_VERSION VERSION_LESS 3.16.0 OR SDL2COMPAT_SUBPROJECT)
+  # - CMake versions <3.16 do not support the OBJC language
+  # - When SDL is built as a subproject and when the main project does not enable OBJC,
+  #   CMake fails due to missing internal CMake variables (CMAKE_OBJC_COMPILE_OBJECT)
+  #   (reproduced with CMake 3.24.2)
+else()
+  if(APPLE)
+    enable_language(OBJC)
+  endif()
+endif()
+
 set(SDL_MAJOR_VERSION ${sdl2_compat_VERSION_MAJOR})
 set(SDL_MINOR_VERSION ${sdl2_compat_VERSION_MINOR})
 set(SDL_MICRO_VERSION ${sdl2_compat_VERSION_PATCH})
@@ -116,9 +133,15 @@ endif()
 
 configure_file(include/SDL2/SDL_revision.h.cmake include/SDL2/SDL_revision.h @ONLY)
 
+set(SDL2COMPAT_SRCS
+  src/sdl2_compat.c
+  src/dynapi/SDL_dynapi.c
+)
+
 if(APPLE)
-  set(OSX_SRCS "src/sdl2_compat_objc.m")
-  set_source_files_properties(${OSX_SRCS} PROPERTIES LANGUAGE C)
+  list(APPEND SDL2COMPAT_SRCS
+    "src/sdl2_compat_objc.m"
+  )
 
   find_package(X11)
   if(X11_FOUND)
@@ -130,15 +153,20 @@ if(APPLE)
 endif()
 
 if(WIN32)
-  set(WIN32_SRCS "src/version.rc")
+  list(APPEND SDL2COMPAT_SRCS
+    "src/version.rc"
+  )
+endif()
+
+if(APPLE)
+  foreach(SOURCE_FILE ${SDL2COMPAT_SRCS})
+    get_filename_component(FILE_EXTENSION ${SOURCE_FILE} EXT)
+    if(FILE_EXTENSION STREQUAL "m")
+      set_property(SOURCE ${SOURCE_FILE} APPEND_STRING PROPERTY COMPILE_FLAGS " -x objective-c")
+    endif()
+  endforeach()
 endif()
 
-set(SDL2COMPAT_SRCS
-  src/sdl2_compat.c
-  src/dynapi/SDL_dynapi.c
-  ${OSX_SRCS}
-  ${WIN32_SRCS}
-)
 add_library(SDL2 SHARED ${SDL2COMPAT_SRCS})
 add_library(SDL2::SDL2 ALIAS SDL2)
 target_include_directories(SDL2