]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
cmake: use modern alternatives for `get_filename_component()`
authorViktor Szakats <commit@vsz.me>
Mon, 22 Sep 2025 16:02:49 +0000 (18:02 +0200)
committerViktor Szakats <commit@vsz.me>
Mon, 22 Sep 2025 18:01:08 +0000 (20:01 +0200)
- use `cmake_path()` to query filenames, with CMake 3.20 or upper.
  https://cmake.org/cmake/help/v4.1/command/cmake_path.html#query

- use `cmake_host_system_information()` to query the registry,
  with CMake 3.24 or upper.
  https://cmake.org/cmake/help/v4.1/command/cmake_host_system_information.html#query-windows-registry
  Replacing the undocumented method.

- also quote the value passed to `get_filename_component()` where
  missing. (Could not cause an actual issue as used in the code.)

Closes #18688

CMake/FindGSS.cmake
CMake/FindNGTCP2.cmake
CMakeLists.txt

index 9000445acb3f279b82efc67aaae2966de1ed3a55..172259e28253e2b9011bea56c2c56d36c16ef1e2 100644 (file)
@@ -230,7 +230,11 @@ if(NOT _gss_FOUND)  # Not found by pkg-config. Let us take more traditional appr
     if(GSS_FLAVOUR)
       set(_gss_libdir_suffixes "")
       set(_gss_libdir_hints ${_gss_root_hints})
-      get_filename_component(_gss_calculated_potential_root "${_gss_INCLUDE_DIRS}" DIRECTORY)
+      if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20)
+        cmake_path(GET _gss_INCLUDE_DIRS PARENT_PATH _gss_calculated_potential_root)
+      else()
+        get_filename_component(_gss_calculated_potential_root "${_gss_INCLUDE_DIRS}" DIRECTORY)
+      endif()
       list(APPEND _gss_libdir_hints ${_gss_calculated_potential_root})
 
       if(WIN32)
@@ -323,8 +327,13 @@ if(GSS_FLAVOUR)
       set(GSS_VERSION "Heimdal Unknown")
     endif()
   elseif(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "MIT")
-    get_filename_component(_mit_version "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos\\SDK\\CurrentVersion;VersionString]" NAME
-      CACHE)
+    if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24)
+      cmake_host_system_information(RESULT _mit_version QUERY WINDOWS_REGISTRY
+        "HKLM/SOFTWARE/MIT/Kerberos/SDK/CurrentVersion" VALUE "VersionString")
+    else()
+      get_filename_component(_mit_version
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos\\SDK\\CurrentVersion;VersionString]" NAME CACHE)
+    endif()
     if(WIN32 AND _mit_version)
       set(GSS_VERSION "${_mit_version}")
     else()
index 700017f859f7eda885c845312daa79a8d258bd4d..eb4358ef00a75bbcf253fd019bbf7ab6bb00a881 100644 (file)
@@ -104,7 +104,11 @@ else()
   endif()
 
   if(_ngtcp2_crypto_backend)
-    get_filename_component(_ngtcp2_library_dir "${NGTCP2_LIBRARY}" DIRECTORY)
+    if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20)
+      cmake_path(GET NGTCP2_LIBRARY PARENT_PATH _ngtcp2_library_dir)
+    else()
+      get_filename_component(_ngtcp2_library_dir "${NGTCP2_LIBRARY}" DIRECTORY)
+    endif()
     find_library(${_crypto_library_upper}_LIBRARY NAMES ${_crypto_library_lower} HINTS ${_ngtcp2_library_dir})
 
     if(${_crypto_library_upper}_LIBRARY)
index 083c2f37b9c0e2e64681f46d89d9b25a8a07677a..f817b61a81e9feda418df61589673a0f17cc9dd3 100644 (file)
@@ -2339,8 +2339,13 @@ if(NOT CURL_DISABLE_INSTALL)
     elseif(_lib MATCHES "/")
       # This gets a bit more complex, because we want to specify the
       # directory separately, and only once per directory
-      get_filename_component(_libdir ${_lib} DIRECTORY)
-      get_filename_component(_libname ${_lib} NAME_WE)
+      if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20)
+        cmake_path(GET _lib PARENT_PATH _libdir)
+        cmake_path(GET _lib STEM _libname)
+      else()
+        get_filename_component(_libdir "${_lib}" DIRECTORY)
+        get_filename_component(_libname "${_lib}" NAME_WE)
+      endif()
       if(_libname MATCHES "^lib")
         if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20)
           cmake_path(SET _libdir NORMALIZE "${_libdir}")