SDL: Merge commit '78a37516593dbcedb2b0d1a5177f37c348dbb528' into main

From 78a37516593dbcedb2b0d1a5177f37c348dbb528 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Thu, 16 Jun 2022 16:38:58 +0200
Subject: [PATCH] cmake+ci: fix+test sdl2-config + sdl2.pc for all supported
 platforms

---
 .github/workflows/android.yml | 27 +++++++++++++++++---
 .github/workflows/main.yml    | 10 ++++++++
 .github/workflows/ps2.yaml    | 38 ++++++++++++++++++++++++++---
 .github/workflows/psp.yaml    | 14 ++++++++++-
 .github/workflows/vita.yaml   | 14 +++++++++--
 CMakeLists.txt                | 34 +++++++++++---------------
 cmake/macros.cmake            |  4 +--
 cmake/test/jni/Android.mk     | 11 +++++++++
 cmake/test/test_pkgconfig.sh  | 46 +++++++++++++++++++++++++++++++++++
 cmake/test/test_sdlconfig.sh  | 46 +++++++++++++++++++++++++++++++++++
 sdl2-config.in                |  2 +-
 11 files changed, 212 insertions(+), 34 deletions(-)
 create mode 100644 cmake/test/jni/Android.mk
 create mode 100755 cmake/test/test_pkgconfig.sh
 create mode 100755 cmake/test/test_sdlconfig.sh

diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index 65820ee669d..6c417da0807 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -12,7 +12,7 @@ jobs:
       matrix:
         platform:
           - { name: Android.mk  }
-          - { name: CMake, cmake: '-DCMAKE_SYSTEM_PROCESSOR=aarch64 -DANDROID_PLATFORM=android-23  -DCMAKE_SYSTEM_VERSION=23 ' }
+          - { name: CMake, cmake: 1, android_abi: "arm64-v8a", android_platform: 23, arch: "aarch64" }
 
     steps:
       - uses: actions/checkout@v2
@@ -28,13 +28,14 @@ jobs:
         if: ${{ matrix.platform.name == 'CMake' }}
         run: |
           sudo apt-get update
-          sudo apt-get install ninja-build
+          sudo apt-get install ninja-build pkg-config
       - name: Configure (CMake)
         if: ${{ matrix.platform.name == 'CMake' }}
         run: |
           cmake -B build \
             -DCMAKE_TOOLCHAIN_FILE=${{ steps.setup_ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \
-            ${{ matrix.platform.cmake }} \
+            -DANDROID_PLATFORM=${{ matrix.platform.android_platform }} \
+            -DANDROID_ABI=${{ matrix.platform.android_abi }} \
             -DSDL_STATIC_PIC=ON \
             -DCMAKE_INSTALL_PREFIX=prefix \
             -DCMAKE_BUILD_TYPE=Release \
@@ -54,7 +55,25 @@ jobs:
         run: |
           cmake -S cmake/test -B cmake_config_build -G Ninja \
             -DCMAKE_TOOLCHAIN_FILE=${{ steps.setup_ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \
-            ${{ matrix.platform.cmake }} \
+            -DANDROID_PLATFORM=${{ matrix.platform.android_platform }} \
+            -DANDROID_ABI=${{ matrix.platform.android_abi }} \
             -DCMAKE_BUILD_TYPE=Release \
             -DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
           cmake --build cmake_config_build --verbose
+      - name: Verify sdl2-config
+        if: ${{ matrix.platform.name == 'CMake' }}
+        run: |
+          export CC="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=${{ matrix.platform.arch }}-none-linux-androideabi${{ matrix.platform.android_platform }}"
+          export PATH=${{ env.SDL2_DIR }}/bin:$PATH
+          cmake/test/test_sdlconfig.sh
+      - name: Verify sdl2.pc
+        if: ${{ matrix.platform.name == 'CMake' }}
+        run: |
+          export CC="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=${{ matrix.platform.arch }}-none-linux-androideabi${{ matrix.platform.android_platform }}"
+          export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
+          cmake/test/test_pkgconfig.sh
+      - name: Verify Android.mk
+        if: ${{ matrix.platform.name == 'CMake' }}
+        run: |
+          export NDK_MODULE_PATH=${{ env.SDL2_DIR }}/share/ndk-modules
+          ndk-build -C ${{ github.workspace }}/cmake/test APP_PLATFORM=android-${{ matrix.platform.android_platform }} APP_ABI=${{ matrix.platform.android_abi }} NDK_OUT=$PWD NDK_LIBS_OUT=$PWD V=1
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index f49f54a8a17..7cfc3f20a04 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -189,6 +189,16 @@ jobs:
           -DCMAKE_BUILD_TYPE=Release \
           -DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
         cmake --build cmake_config_build --verbose
+    - name: Verify sdl2-config
+      run: |
+        export CC=${{ matrix.platform.cc || 'gcc' }}
+        export PATH=${{ env.SDL2_DIR }}/bin:$PATH
+        cmake/test/test_sdlconfig.sh
+    - name: Verify sdl2.pc
+      run: |
+        export CC=${{ matrix.platform.cc || 'gcc' }}
+        export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
+        cmake/test/test_pkgconfig.sh
     - name: Distcheck (Autotools)
       if: matrix.platform.autotools
       run: |
diff --git a/.github/workflows/ps2.yaml b/.github/workflows/ps2.yaml
index da777cddde9..a8f9ce2cbdd 100644
--- a/.github/workflows/ps2.yaml
+++ b/.github/workflows/ps2.yaml
@@ -11,11 +11,41 @@ jobs:
     - name: Setup dependencies
       run: |
         apk update 
-        apk add cmake gmp mpc1 mpfr4 make
-    - name: Configure CMake
-      run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake -DSDL_TESTS=ON
+        apk add cmake gmp mpc1 mpfr4 ninja pkgconf
+    - name: Configure (CMake)
+      run: |
+        cmake -S . -B build -G Ninja\
+          -DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake \
+          -DSDL_TESTS=ON \
+          -DCMAKE_INSTALL_PREFIX=cmake_prefix \
+          -DCMAKE_BUILD_TYPE=Release
     - name: Build
-      run: cmake --build build
+      run: cmake --build build --config Release --verbose --parallel
+    - name: Install (CMake)
+      run: |
+        set -eu
+        cmake --install build/ --config Release
+        echo "SDL2_DIR=$(pwd)/cmake_prefix" >> $GITHUB_ENV
+        ( cd cmake_prefix; find ) | LC_ALL=C sort -u
+
+    - name: Verify CMake configuration files
+      run: |
+        cmake -S cmake/test -B cmake_config_build -G Ninja \
+          -DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake \
+          -DTEST_SHARED=FALSE \
+          -DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} \
+          -DCMAKE_BUILD_TYPE=Release
+        cmake --build cmake_config_build --verbose
+    - name: Verify sdl2-config
+      run: |
+        export CC=mips64r5900el-ps2-elf-gcc
+        export PATH=${{ env.SDL2_DIR }}/bin:$PATH
+        cmake/test/test_sdlconfig.sh
+    - name: Verify sdl2.pc
+      run: |
+        export CC=mips64r5900el-ps2-elf-gcc
+        export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
+        cmake/test/test_pkgconfig.sh
     
     - name: Get short SHA
       id: slug
diff --git a/.github/workflows/psp.yaml b/.github/workflows/psp.yaml
index 1ca74f6e84d..9a926773051 100644
--- a/.github/workflows/psp.yaml
+++ b/.github/workflows/psp.yaml
@@ -11,7 +11,7 @@ jobs:
     - name: Setup dependencies
       run: |
         apk update 
-        apk add cmake gmp mpc1 mpfr4 make
+        apk add cmake gmp mpc1 mpfr4 make pkgconf
     - name: Configure CMake
       run: |
         cmake -S . -B build \
@@ -35,3 +35,15 @@ jobs:
           -DTEST_SHARED=FALSE \
           -DCMAKE_BUILD_TYPE=Release
         cmake --build cmake_config_build --verbose
+    - name: Verify sdl2-config
+      run: |
+        export CC=psp-gcc
+        export PATH=${{ env.SDL2_DIR }}/bin:$PATH
+        export EXTRA_LDFLAGS="-L$PSPDEV/lib -L$PSPDEV/psp/lib -L$PSPDEV/psp/sdk/lib"
+        cmake/test/test_sdlconfig.sh
+    - name: Verify sdl2.pc
+      run: |
+        export CC=psp-gcc
+        export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
+        export EXTRA_LDFLAGS="-L$PSPDEV/lib -L$PSPDEV/psp/lib -L$PSPDEV/psp/sdk/lib"
+        cmake/test/test_pkgconfig.sh
diff --git a/.github/workflows/vita.yaml b/.github/workflows/vita.yaml
index 4e2a0266179..9b27370ba82 100644
--- a/.github/workflows/vita.yaml
+++ b/.github/workflows/vita.yaml
@@ -13,10 +13,10 @@ jobs:
       image: vitasdk/vitasdk:latest
     steps:
     - uses: actions/checkout@v2
-    - name: Install CMake and GNU Make
+    - name: Install build requirements
       run: |
         apk update 
-        apk add cmake make ninja
+        apk add cmake ninja pkgconf
     - name: Configure CMake
       run: |
         cmake -S . -B build -G Ninja \
@@ -40,3 +40,13 @@ jobs:
           -DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} \
           -DCMAKE_BUILD_TYPE=Release
         cmake --build cmake_config_build --verbose
+    - name: Verify sdl2-config
+      run: |
+        export CC=arm-vita-eabi-gcc
+        export PATH=${{ env.SDL2_DIR }}/bin:$PATH
+        cmake/test/test_sdlconfig.sh
+    - name: Verify sdl2.pc
+      run: |
+        export CC=arm-vita-eabi-gcc
+        export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
+        cmake/test/test_pkgconfig.sh
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9d9dc1a3ccb..c5dadc04558 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1865,11 +1865,11 @@ elseif(WINDOWS)
   file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc)
   file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.c)
   if(MINGW OR CYGWIN)
-    list(APPEND SDL_LIBS "-lmingw32" "-mwindows")
     if(NOT SDL2_DISABLE_SDL2MAIN)
       list(APPEND SDL_CFLAGS "-Dmain=SDL_main")
-      list(APPEND SDL_LIBS "-lSDL2main")
+      list(INSERT SDL_LIBS 0 "-lSDL2main")
     endif(NOT SDL2_DISABLE_SDL2MAIN)
+    list(INSERT SDL_LIBS 0 "-lmingw32" "-mwindows")
   endif()
 
 elseif(APPLE)
@@ -2520,7 +2520,10 @@ elseif(PSP)
       pspaudio
       pspvram
       GL
-    )
+  )
+  if(NOT SDL2_DISABLE_SDL2MAIN)
+    list(INSERT SDL_LIBS 0 "-lSDL2main")
+  endif(NOT SDL2_DISABLE_SDL2MAIN)
 
 elseif(PS2)
   list(APPEND EXTRA_CFLAGS "-DPS2" "-D__PS2__")
@@ -2796,23 +2799,14 @@ Libs.private:")
   endif()
 
   # Clean up the different lists
-  if (VITA)
-    listtostrrev(EXTRA_LIBS _EXTRA_LIBS "-l")
-    set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS})
-    list(REMOVE_DUPLICATES SDL_STATIC_LIBS)
-    listtostrrev(SDL_STATIC_LIBS _SDL_STATIC_LIBS)
-    set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS})
-    listtostrrev(SDL_LIBS _SDL_LIBS)
-    set(SDL_LIBS ${_SDL_LIBS})
-  else()
-    listtostr(EXTRA_LIBS _EXTRA_LIBS "-l")
-    set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS})
-    list(REMOVE_DUPLICATES SDL_STATIC_LIBS)
-    listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS)
-    set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS})
-    listtostr(SDL_LIBS _SDL_LIBS)
-    set(SDL_LIBS ${_SDL_LIBS})
-  endif()
+  listtostr(EXTRA_LIBS _EXTRA_LIBS "-l")
+  set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS})
+  list(REMOVE_DUPLICATES SDL_STATIC_LIBS)
+  listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS)
+  set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS})
+  message("sdl_libs: ${SDL_LIBS}")
+  listtostr(SDL_LIBS _SDL_LIBS)
+  set(SDL_LIBS ${_SDL_LIBS})
   listtostr(SDL_CFLAGS _SDL_CFLAGS "")
   set(SDL_CFLAGS ${_SDL_CFLAGS})
 
diff --git a/cmake/macros.cmake b/cmake/macros.cmake
index af7512257c6..920785bad39 100644
--- a/cmake/macros.cmake
+++ b/cmake/macros.cmake
@@ -74,7 +74,7 @@ macro(LISTTOSTR _LIST _OUTPUT)
   # Do not use string(REPLACE ";" " ") here to avoid messing up list
   # entries
   foreach(_ITEM ${${_LIST}})
-    set(${_OUTPUT} "${_LPREFIX}${_ITEM} ${${_OUTPUT}}")
+    set(${_OUTPUT} "${${_OUTPUT}} ${_LPREFIX}${_ITEM}")
   endforeach()
 endmacro()
 
@@ -88,7 +88,7 @@ macro(LISTTOSTRREV _LIST _OUTPUT)
   # Do not use string(REPLACE ";" " ") here to avoid messing up list
   # entries
   foreach(_ITEM ${${_LIST}})
-    set(${_OUTPUT} "${${_OUTPUT}} ${_LPREFIX}${_ITEM}")
+    set(${_OUTPUT} "${_LPREFIX}${_ITEM} ${${_OUTPUT}}")
   endforeach()
 endmacro()
 
diff --git a/cmake/test/jni/Android.mk b/cmake/test/jni/Android.mk
new file mode 100644
index 00000000000..c4956d68594
--- /dev/null
+++ b/cmake/test/jni/Android.mk
@@ -0,0 +1,11 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := main_gui_androidmk
+LOCAL_SRC_FILES := ../main_gui.c
+LOCAL_SHARED_LIBRARIES += SDL2
+include $(BUILD_SHARED_LIBRARY)
+
+$(call import-module,SDL2main)
+$(call import-module,SDL2)
diff --git a/cmake/test/test_pkgconfig.sh b/cmake/test/test_pkgconfig.sh
new file mode 100755
index 00000000000..2c58a752f84
--- /dev/null
+++ b/cmake/test/test_pkgconfig.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+if test "x$CC" = "x"; then
+    CC=gcc
+fi
+
+machine="$($CC -dumpmachine)"
+case "$machine" in
+    *mingw* )
+        EXEPREFIX=""
+        EXESUFFIX=".exe"
+        ;;
+    *android* )
+        EXEPREFIX="lib"
+        EXESUFFIX=".so"
+        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -shared"
+        ;;
+    * )
+        EXEPREFIX=""
+        EXESUFFIX=""
+        ;;
+esac
+
+set -e
+
+# Get the canonical path of the folder containing this script
+testdir=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)")
+CFLAGS="$( pkg-config sdl2 --cflags )"
+LDFLAGS="$( pkg-config sdl2 --libs )"
+
+compile_cmd="$CC -c "$testdir/main_gui.c" -o main_gui_pkgconfig.c.o $CFLAGS $EXTRA_CFLAGS"
+link_cmd="$CC main_gui_pkgconfig.c.o -o ${EXEPREFIX}main_gui_pkgconfig${EXESUFFIX} $LDFLAGS $EXTRA_LDFLAGS"
+
+echo "-- CC:            $CC"
+echo "-- CFLAGS:        $CFLAGS"
+echo "-- EXTRA_CFLAGS:  $EXTRA_CFLAGS"
+echo "-- LDFLASG:       $LDFLAGS"
+echo "-- EXTRA_LDFLAGS: $EXTRA_LDFLAGS"
+
+echo "-- COMPILE: $compile_cmd"
+echo "-- LINK:    $link_cmd"
+
+set -x
+
+$compile_cmd
+$link_cmd
diff --git a/cmake/test/test_sdlconfig.sh b/cmake/test/test_sdlconfig.sh
new file mode 100755
index 00000000000..ca09bc29bbb
--- /dev/null
+++ b/cmake/test/test_sdlconfig.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+if test "x$CC" = "x"; then
+    CC=gcc
+fi
+
+machine="$($CC -dumpmachine)"
+case "$machine" in
+    *mingw* )
+        EXEPREFIX=""
+        EXESUFFIX=".exe"
+        ;;
+    *android* )
+        EXEPREFIX="lib"
+        EXESUFFIX=".so"
+        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -shared"
+        ;;
+    * )
+        EXEPREFIX=""
+        EXESUFFIX=""
+        ;;
+esac
+
+set -e
+
+# Get the canonical path of the folder containing this script
+testdir=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)")
+CFLAGS="$( sdl2-config --cflags )"
+LDFLAGS="$( sdl2-config --libs )"
+
+compile_cmd="$CC -c "$testdir/main_gui.c" -o main_gui_sdlconfig.c.o $CFLAGS $EXTRA_CFLAGS"
+link_cmd="$CC main_gui_sdlconfig.c.o -o ${EXEPREFIX}main_gui_sdlconfig${EXESUFFIX} $LDFLAGS $EXTRA_LDFLAGS"
+
+echo "-- CC:            $CC"
+echo "-- CFLAGS:        $CFLAGS"
+echo "-- EXTRA_CFLAGS:  $EXTRA_CFLAGS"
+echo "-- LDFLASG:       $LDFLAGS"
+echo "-- EXTRA_LDFLAGS: $EXTRA_LDFLAGS"
+
+echo "-- COMPILE: $compile_cmd"
+echo "-- LINK:    $link_cmd"
+
+set -x
+
+$compile_cmd
+$link_cmd
diff --git a/sdl2-config.in b/sdl2-config.in
index 3a87ab85bf2..f6eca7668ca 100644
--- a/sdl2-config.in
+++ b/sdl2-config.in
@@ -53,7 +53,7 @@ while test $# -gt 0; do
 @ENABLE_SHARED_TRUE@      ;;
 @ENABLE_STATIC_TRUE@@ENABLE_SHARED_TRUE@    --static-libs)
 @ENABLE_STATIC_TRUE@@ENABLE_SHARED_FALSE@    --libs|--static-libs)
-@ENABLE_STATIC_TRUE@      sdl_static_libs=$(echo "@SDL_LIBS@ @SDL_STATIC_LIBS@" | sed -E "s#-lSDL2[ $]#-Wl,-Bstatic -lSDL2 -Wl,-Bdynamic #g")
+@ENABLE_STATIC_TRUE@      sdl_static_libs=$(echo "@SDL_LIBS@ @SDL_STATIC_LIBS@" | sed -E "s#-lSDL2[ $]#$libdir/libSDL2.a #g")
 @ENABLE_STATIC_TRUE@      echo -L@libdir@ $sdl_static_libs
 @ENABLE_STATIC_TRUE@      ;;
     *)