]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
cmake/FindGSS: fix `pkg-config` fallback logic for CMake <3.16
authorViktor Szakats <commit@vsz.me>
Wed, 8 Oct 2025 16:49:51 +0000 (18:49 +0200)
committerViktor Szakats <commit@vsz.me>
Wed, 8 Oct 2025 17:59:12 +0000 (19:59 +0200)
The documented `<prefix>_<moduleName>_VERSION` variables are empty in
all tested versions since 3.7.2 to 4.1.2. Stop using it as a fallback
for <3.16 versions, and replace with the undocumented, but working,
`FindPkgConfig` internal variable `_pkg_check_modules_pkg_name`. It
contains the module name which was found.

In practice it caused that with CMake <3.16 + `pkg-config`, curl always
detected the Heimdal flavor of GSS.

Also: Delete a fallback version detection method, which was already
marked with a question mark in comments, and used the same, always
empty, CMake variables.

Ref: https://cmake.org/cmake/help/v4.1/module/FindPkgConfig.html
Bug: https://github.com/curl/curl/pull/18932#issuecomment-3381807070

Closes #18950

CMake/FindGSS.cmake

index 78a9194cd604f3600212f53948bb2c2d510536ba..aa640c3342ad9725bfda2425f8128f1cbc03cda1 100644 (file)
@@ -277,25 +277,17 @@ if(NOT _gss_FOUND)  # Not found by pkg-config. Let us take more traditional appr
     endif()
   endif()
 else()
-  # _gss_MODULE_NAME set since CMake 3.16
-  if(_gss_MODULE_NAME STREQUAL _gnu_modname OR _gss_${_gnu_modname}_VERSION)
+  # _gss_MODULE_NAME set since CMake 3.16.
+  # _pkg_check_modules_pkg_name is undocumented and used as a fallback for CMake <3.16 versions.
+  if(_gss_MODULE_NAME STREQUAL _gnu_modname OR _pkg_check_modules_pkg_name STREQUAL _gnu_modname)
     set(GSS_FLAVOUR "GNU")
     set(GSS_PC_REQUIRES "gss")
-    if(NOT _gss_version)  # for old CMake versions?
-      set(_gss_version ${_gss_${_gnu_modname}_VERSION})
-    endif()
-  elseif(_gss_MODULE_NAME STREQUAL _mit_modname OR _gss_${_mit_modname}_VERSION)
+  elseif(_gss_MODULE_NAME STREQUAL _mit_modname OR _pkg_check_modules_pkg_name STREQUAL _mit_modname)
     set(GSS_FLAVOUR "MIT")
     set(GSS_PC_REQUIRES "mit-krb5-gssapi")
-    if(NOT _gss_version)  # for old CMake versions?
-      set(_gss_version ${_gss_${_mit_modname}_VERSION})
-    endif()
   else()
     set(GSS_FLAVOUR "Heimdal")
     set(GSS_PC_REQUIRES "heimdal-gssapi")
-    if(NOT _gss_version)  # for old CMake versions?
-      set(_gss_version ${_gss_${_heimdal_modname}_VERSION})
-    endif()
   endif()
   message(STATUS "Found GSS/${GSS_FLAVOUR} (via pkg-config): ${_gss_INCLUDE_DIRS} (found version \"${_gss_version}\")")
 endif()