SDL_image: Use 3.16 as minimum required CMake version + test on CI

From 4f295384a28a16563bddd7c46996a1028c838e5e Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 23 May 2022 16:25:26 +0200
Subject: [PATCH] Use 3.16 as minimum required CMake version + test on CI

---
 .github/workflows/main.yml |  7 ++++++-
 CMakeLists.txt             | 10 ++++++----
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 557076e..c558abc 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -15,7 +15,7 @@ jobs:
       fail-fast: false
       matrix:
         platform:
-        - { name: Windows (MSVC+CMake),         os: windows-latest, shell: sh,   cmake: '-DSDL2IMAGE_VENDORED=ON -G "Ninja Multi-Config"', msvc: 1 }
+        - { name: Windows (MSVC+CMake),         os: windows-latest, shell: sh,   cmake: '-DSDL2IMAGE_VENDORED=ON -GNinja', msvc: 1 }
         - { name: Windows (mingw32+autotools),  os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686 }
         - { name: Windows (mingw64+CMake),      os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64,
             cmake: '-DSDL2IMAGE_BACKEND_STB=OFF -DSDL2IMAGE_BACKEND_WIC=OFF -DSDL2IMAGE_VENDORED=OFF -DSDL2IMAGE_AVIF=ON -G "Ninja Multi-Config"' }
@@ -106,6 +106,11 @@ jobs:
       if: "runner.os == 'Linux' && matrix.platform.cmake"
       run: ./test-versioning.sh
 
+    - name: Setup CMake
+      if: ${{ matrix.platform.cmake && !matrix.platform.msystem && !matrix.platform.msvc }}
+      uses: jwlawson/actions-setup-cmake@v1.12
+      with:
+        cmake-version: '3.16'
     - name: Configure CMake
       if: "matrix.platform.cmake"
       run: |
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9b21d97..3d253a5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
 
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
 
@@ -704,8 +704,10 @@ if(SDL2IMAGE_INSTALL)
         endif()
         # Only install a SDL2_image.pc file in Release mode
         install(CODE "
-            file(COPY_FILE \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_image-$<CONFIG>.pc\"
-                \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_image.pc\" ONLY_IF_DIFFERENT)
+            # FIXME: use file(COPY_FILE) if minimum CMake version >= 3.21
+            execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy_if_different
+                \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_image-$<CONFIG>.pc\"
+                \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_image.pc\")
             file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${PC_DESTDIR}\"
                 TYPE FILE
                 FILES \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_image.pc\")" CONFIG Release COMPONENT devel)
@@ -733,7 +735,7 @@ if(SDL2IMAGE_SAMPLES)
     find_package(SDL2main)
 
     foreach(prog showanim showimage)
-        # FIXME: mingw should be handles by SDL2::SDL2(-static) target
+        # FIXME: mingw should be handled by SDL2::SDL2(-static) target
         if(MINGW)
             target_link_libraries(${prog} PRIVATE mingw32)
             target_link_options(${prog} PRIVATE -mwindows)