SDL: cmake: use pkg-config + test compile instead of Find module for detecting rpi

From da5016d3369d2e5988cabe393c8badb7478bd3b3 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Fri, 28 Jul 2023 01:02:12 +0200
Subject: [PATCH] cmake: use pkg-config + test compile instead of Find module
 for detecting rpi

---
 cmake/FindRPi_BcmHost.cmake | 75 -------------------------------------
 cmake/FindRPi_BrcmEGL.cmake | 59 -----------------------------
 cmake/sdlchecks.cmake       | 19 ++++++----
 3 files changed, 12 insertions(+), 141 deletions(-)
 delete mode 100644 cmake/FindRPi_BcmHost.cmake
 delete mode 100644 cmake/FindRPi_BrcmEGL.cmake

diff --git a/cmake/FindRPi_BcmHost.cmake b/cmake/FindRPi_BcmHost.cmake
deleted file mode 100644
index fe0b06611119..000000000000
--- a/cmake/FindRPi_BcmHost.cmake
+++ /dev/null
@@ -1,75 +0,0 @@
-include(FeatureSummary)
-set_package_properties(RPi_BcmHost PROPERTIES
-    URL "https://github.com/raspberrypi/firmware"
-    DESCRIPTION "Broadcom VideoCore host API library"
-)
-
-set(RPi_BcmHost_PKG_CONFIG_SPEC bcm_host)
-
-find_package(PkgConfig QUIET)
-pkg_check_modules(PC_RPi_BcmHost QUIET ${RPi_BcmHost_PKG_CONFIG_SPEC})
-
-find_library(RPi_BcmHost_bcm_host_LIBRARY
-    NAMES bcm_host
-    HINTS
-        ${PC_RPi_BcmHost_LIBRARY_DIRS}
-        /opt/vc/lib
-)
-
-find_path(RPi_BcmHost_bcm_host_h_PATH
-    NAMES bcm_host.h
-    HINTS
-        ${PC_RPi_BcmHost_INCLUDE_DIRS}
-        /opt/vc/include
-)
-
-if(PC_RPi_BcmHost_FOUND)
-    include("${CMAKE_CURRENT_LIST_DIR}/PkgConfigHelper.cmake")
-    get_flags_from_pkg_config("${RPi_BcmHost_bcm_host_LIBRARY}" "PC_RPi_BcmHost" "_RPi_BcmHost")
-else()
-    set(_RPi_BcmHost_include_dirs
-        /opt/vc/include
-        /opt/vc/include/interface/vcos/pthreads
-        /opt/vc/include/interface/vmcs_host/linux
-    )
-    set(_RPi_BcmHost_compile_options
-        -DUSE_VCHIQ_ARM
-    )
-    set(_RPi_BcmHost_link_libraries
-        -lvcos -lvchiq_arm
-    )
-    set(_RPi_BcmHost_link_options
-        -pthread
-    )
-    set(_RPi_BcmHost_link_directories
-        /opt/vc/lib
-    )
-endif()
-
-set(RPi_BcmHost_INCLUDE_DIRS "${_RPi_BcmHost_include_dirs}" CACHE STRING "Extra include dirs of bcm_host")
-
-set(RPi_BcmHost_COMPILE_OPTIONS "${_RPi_BcmHost_compile_options}" CACHE STRING "Extra compile options of bcm_host")
-
-set(RPi_BcmHost_LINK_LIBRARIES "${_RPi_BcmHost_link_libraries}" CACHE STRING "Extra link libraries of bcm_host")
-
-set(RPi_BcmHost_LINK_OPTIONS "${_RPi_BcmHost_link_options}" CACHE STRING "Extra link flags of bcm_host")
-
-set(RPi_BcmHost_LINK_DIRECTORIES "${_RPi_BcmHost_link_directories}" CACHE PATH "Extra link directories of bcm_host")
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(RPi_BcmHost
-    REQUIRED_VARS RPi_BcmHost_bcm_host_LIBRARY RPi_BcmHost_bcm_host_h_PATH
-)
-
-if(RPi_BcmHost_FOUND)
-    if(NOT TARGET RPi_BcmHost::RPi_BcmHost)
-        add_library(RPi_BcmHost::RPi_BcmHost INTERFACE IMPORTED)
-        set_target_properties(RPi_BcmHost::RPi_BcmHost PROPERTIES
-            INTERFACE_INCLUDE_DIRECTORIES "${RPi_BcmHost_INCLUDE_DIRS}"
-            INTERFACE_COMPILE_OPTIONS "${RPi_BcmHost_COMPILE_OPTIONS}"
-            INTERFACE_LINK_LIBRARIES "${RPi_BcmHost_LINK_LIBRARIES}"
-            INTERFACE_LINK_OPTIONS "${RPi_BcmHost_LINK_OPTIONS}"
-            INTERFACE_LINK_DIRECTORIES "${RPi_BcmHost_LINK_DIRECTORIES}"
-          )
-    endif()
-endif()
diff --git a/cmake/FindRPi_BrcmEGL.cmake b/cmake/FindRPi_BrcmEGL.cmake
deleted file mode 100644
index be4a44782b1d..000000000000
--- a/cmake/FindRPi_BrcmEGL.cmake
+++ /dev/null
@@ -1,59 +0,0 @@
-include(FeatureSummary)
-set_package_properties(RPi_BrcmEGL PROPERTIES
-    URL "https://github.com/raspberrypi/firmware"
-    DESCRIPTION "Fake brcmEGL package for RPi"
-)
-
-set(RPi_BrcmEGL_PKG_CONFIG_SPEC brcmegl)
-
-find_package(PkgConfig QUIET)
-pkg_check_modules(PC_RPi_BrcmEGL QUIET ${RPi_BrcmEGL_PKG_CONFIG_SPEC})
-
-find_package(RPi_BcmHost)
-
-find_library(RPi_BrcmEGL_brcmEGL_LIBRARY
-    NAMES brcmEGL
-    HINTS
-        ${PC_RPi_BrcmEGL_LIBRARY_DIRS}
-        /opt/vc/lib
-)
-
-find_path(RPi_BrcmEGL_EGL_eglplatform_h_PATH
-    NAMES EGL/eglplatform.h
-    HINTS
-        ${PC_RPi_BrcmEGL_INCLUDE_DIRS}
-        /opt/vc/include
-)
-
-if(PC_RPi_BrcmEGL_FOUND)
-    include("${CMAKE_CURRENT_LIST_DIR}/PkgConfigHelper.cmake")
-    get_flags_from_pkg_config("${RPi_BrcmEGL_brcmEGL_LIBRARY}" "PC_RPi_BrcmEGL" "_RPi_BrcmEGL")
-endif()
-
-set(RPi_BrcmEGL_INCLUDE_DIRS "${_RPi_BrcmEGL_include_dirs}" CACHE STRING "Extra include dirs of brcmEGL")
-
-set(RPi_BrcmEGL_COMPILE_OPTIONS "${_RPi_BrcmEGL_compile_options}" CACHE STRING "Extra compile options of brcmEGL")
-
-set(RPi_BrcmEGL_LINK_LIBRARIES "${_RPi_BrcmEGL_link_libraries}" CACHE STRING "Extra link libraries of brcmEGL")
-
-set(RPi_BrcmEGL_LINK_OPTIONS "${_RPi_BrcmEGL_link_options}" CACHE STRING "Extra link flags of brcmEGL")
-
-set(RPi_BrcmEGL_LINK_DIRECTORIES "${_RPi_BrcmEGL_link_directories}" CACHE PATH "Extra link directories of brcmEGL")
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(RPi_BrcmEGL
-    REQUIRED_VARS RPi_BrcmEGL_brcmEGL_LIBRARY RPi_BrcmEGL_EGL_eglext_brcm_h_PATH RPi_BcmHost_FOUND
-)
-
-if(RPi_BrcmEGL_FOUND)
-    if(NOT TARGET RPi_BcmHost::RPi_BcmHost)
-        add_library(RPi_BcmHost::RPi_BcmHost INTERFACE IMPORTED)
-        set_target_properties(RPi_BcmHost::RPi_BcmHost PROPERTIES
-            INTERFACE_INCLUDE_DIRECTORIES "${RPi_BrcmEGL_INCLUDE_DIRS}"
-            INTERFACE_COMPILE_OPTIONS "${RPi_BrcmEGL_COMPILE_OPTIONS}"
-            INTERFACE_LINK_LIBRARIES "${RPi_BrcmEGL_LINK_LIBRARIES};RPi_BcmHost::RPi_BcmHost"
-            INTERFACE_LINK_OPTIONS "${RPi_BrcmEGL_LINK_OPTIONS}"
-            INTERFACE_LINK_DIRECTORIES "${RPi_BrcmEGL_LINK_DIRECTORIES}"
-        )
-    endif()
-endif()
diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake
index 1bfe8676d348..f12b7e3ed139 100644
--- a/cmake/sdlchecks.cmake
+++ b/cmake/sdlchecks.cmake
@@ -1079,17 +1079,22 @@ endmacro()
 # - n/a
 macro(CheckRPI)
   if(SDL_RPI)
-    # presence of bcm_host means raspberry pi
-    find_package(RPi_BcmHost)
-    if(RPi_BcmHost_FOUND)
+    set(BCM_HOST_PKG_CONFIG_SPEC bcm_host)
+    set(BRCMEGL_PKG_CONFIG_SPEC brcmegl)
+
+    set(original_PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH})
+    set(ENV{PKG_CONFIG_PATH} "${original_PKG_CONFIG_PATH}:/opt/vc/lib/pkgconfig")
+    pkg_check_modules(PC_BCM_HOST IMPORTED_TARGET QUIET ${BCM_HOST_PKG_CONFIG_SPEC})
+    pkg_check_modules(PC_BRCMEGL IMPORTED_TARGET QUIET ${BRCMEGL_PKG_CONFIG_SPEC})
+    set(ENV{PKG_CONFIG_PATH} "${original_PKG_CONFIG_PATH}")
+
+    if(TARGET PkgConfig::PC_BCM_HOST AND TARGET PkgConfig::PC_BRCMEGL)
       set(HAVE_RPI TRUE)
-      sdl_link_dependency(rpi LIBS RPi_BcmHost::RPi_BcmHost CMAKE_MODULE RPi_BcmHost PKG_CONFIG_SPECS ${RPi_BcmHost_PKG_CONFIG_SPEC})
-      find_package(RPi_BrcmEGL)
-      if(SDL_VIDEO AND RPi_BrcmEGL_FOUND)
+      if(SDL_VIDEO)
         set(HAVE_SDL_VIDEO TRUE)
         set(SDL_VIDEO_DRIVER_RPI 1)
         sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/raspberry/*.c")
-        sdl_link_dependency(rpi-video LIBS RPi_BrcmEGL::RPi_BrcmEGL CMAKE_MODULE RPi_BrcmEGL PKG_CONFIG_SPECS ${RPi_BrcmEGL_PKG_CONFIG_SPEC})
+        sdl_link_dependency(rpi-video LIBS PkgConfig::PC_BCM_HOST PKG_CONFIG_PREFIX PC_BCM_HOST PKG_CONFIG_SPECS ${BCM_HOST_PKG_CONFIG_SPEC})
       endif()
     endif()
   endif()