diff --git a/CMake/DolphinLibraryTools.cmake b/CMake/DolphinLibraryTools.cmake index 4c395a8ef93..f2305d83996 100644 --- a/CMake/DolphinLibraryTools.cmake +++ b/CMake/DolphinLibraryTools.cmake @@ -54,7 +54,42 @@ function(dolphin_find_optional_system_library library bundled_path) dolphin_optional_system_library(use_system ${library}) string(TOUPPER ${library} upperlib) if(use_system) - find_package(${library} ${ARGN}) + # Try a list of versions + # Will be obsoleted if cmake ever fixes https://gitlab.kitware.com/cmake/cmake/-/issues/26477 + if("DOLPHIN_TRY_VERSIONS" IN_LIST ARGN) + list(FIND ARGN DOLPHIN_TRY_VERSIONS versions_idx) + list(REMOVE_AT ARGN ${versions_idx}) + # Extract list of version-like elements from ARGN into version_list + set(version_list) + while(TRUE) + list(LENGTH ARGN len) + if(len EQUAL versions_idx) + break() + endif() + LIST(GET ARGN ${versions_idx} ver) + if(ver MATCHES "^[0-9]+(\\.[0-9]+)*$") + list(APPEND version_list "${ver}") + list(REMOVE_AT ARGN ${versions_idx}) + else() + break() + endif() + endwhile() + # Quietly check all the listed versions + foreach(version IN LISTS version_list) + find_package(${library} ${version} ${ARGN} QUIET) + if(${library}_FOUND) + break() + endif() + endforeach() + # If none were found, find_package one version loudly so the user sees + if(NOT ${library}_FOUND) + list(GET version_list 0 first_version) + find_package(${library} ${first_version} ${ARGN}) + endif() + else() + find_package(${library} ${ARGN}) + endif() + # Yay for cmake packages being inconsistent if(DEFINED ${library}_FOUND) set(prefix ${library}) diff --git a/CMakeLists.txt b/CMakeLists.txt index 77ceff3bda9..da1a9eec10c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -646,7 +646,7 @@ dolphin_find_optional_system_library_pkgconfig(FMT add_subdirectory(Externals/imgui) add_subdirectory(Externals/implot) -dolphin_find_optional_system_library(glslang Externals/glslang 15.0) +dolphin_find_optional_system_library(glslang Externals/glslang DOLPHIN_TRY_VERSIONS 15 16) # SPIRV-Cross is used on Windows for GLSL to HLSL conversion for the Direct3D 11 and Direct3D 12 # video backends, and on Apple devices for the Metal video backend.