From: Viktor Szakats Date: Fri, 16 Aug 2024 13:04:25 +0000 (+0200) Subject: cmake: sync up version detection in Find modules X-Git-Tag: curl-8_10_0~225 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=432f2fd9ace1f6da06fa51be891fa79ea6374c57;p=thirdparty%2Fcurl.git cmake: sync up version detection in Find modules - use the same pattern across all Find modules: - verify if the version header exists before reading it. - use a single regex per lookup. - sync regexes between Find modules. - use generic temporary variable names. - improve readability. - make it simpler to transition to new CMake syntax in the future: ```cmake file(STRINGS "${CARES_INCLUDE_DIR}/ares_version.h" _version_str REGEX "<...>") unset(_version_str) set(CARES_VERSION "${CMAKE_MATCH_1}") ``` Ref: https://cmake.org/cmake/help/latest/policy/CMP0159.html#policy:CMP0159 - fix zstd version detection to be CMake 3.7 compatible. Required 3.9 before this patch, for the `CMAKE_MATCH_` feature. Follow-up to c5d506e9bbf0669d7605d1d00865ae7e229b2409 #12200 Follow-up to 4e2f3641f80e233738147d82218317f331369c50 #14548 Closes #14572 --- diff --git a/CMake/FindLibPSL.cmake b/CMake/FindLibPSL.cmake index 57d38aac34..47e766672d 100644 --- a/CMake/FindLibPSL.cmake +++ b/CMake/FindLibPSL.cmake @@ -49,10 +49,13 @@ find_library(LIBPSL_LIBRARY NAMES "psl" "libpsl" if(PC_LIBPSL_VERSION) set(LIBPSL_VERSION ${PC_LIBPSL_VERSION}) -elseif(LIBPSL_INCLUDE_DIR) - file(STRINGS "${LIBPSL_INCLUDE_DIR}/libpsl.h" _libpsl_version_str REGEX "^#define[\t ]+PSL_VERSION[\t ]+\"(.*)\"") - string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" LIBPSL_VERSION "${_libpsl_version_str}") - unset(_libpsl_version_str) +elseif(LIBPSL_INCLUDE_DIR AND EXISTS "${LIBPSL_INCLUDE_DIR}/libpsl.h") + set(_version_regex "#[\t ]*define[\t ]+PSL_VERSION[\t ]+\"([^\"]*)\"") + file(STRINGS "${LIBPSL_INCLUDE_DIR}/libpsl.h" _version_str REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" _version_str "${_version_str}") + set(LIBPSL_VERSION "${_version_str}") + unset(_version_regex) + unset(_version_str) endif() include(FindPackageHandleStandardArgs) diff --git a/CMake/FindLibSSH2.cmake b/CMake/FindLibSSH2.cmake index 2d3b2c9fb1..b40cb44166 100644 --- a/CMake/FindLibSSH2.cmake +++ b/CMake/FindLibSSH2.cmake @@ -49,10 +49,13 @@ find_library(LIBSSH2_LIBRARY NAMES "ssh2" "libssh2" if(PC_LIBSSH2_VERSION) set(LIBSSH2_VERSION ${PC_LIBSSH2_VERSION}) -elseif(LIBSSH2_INCLUDE_DIR) - file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" _libssh2_version_str REGEX "^#define[\t ]+LIBSSH2_VERSION[\t ]+\"(.*)\"") - string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" LIBSSH2_VERSION "${_libssh2_version_str}") - unset(_libssh2_version_str) +elseif(LIBSSH2_INCLUDE_DIR AND EXISTS "${LIBSSH2_INCLUDE_DIR}/libssh2.h") + set(_version_regex "#[\t ]*define[\t ]+LIBSSH2_VERSION[\t ]+\"([^\"]*)\"") + file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" _version_str REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" _version_str "${_version_str}") + set(LIBSSH2_VERSION "${_version_str}") + unset(_version_regex) + unset(_version_str) endif() include(FindPackageHandleStandardArgs) diff --git a/CMake/FindNettle.cmake b/CMake/FindNettle.cmake index e5e587a3d6..ea86d939b9 100644 --- a/CMake/FindNettle.cmake +++ b/CMake/FindNettle.cmake @@ -41,22 +41,18 @@ else() find_path(NETTLE_INCLUDE_DIR NAMES "nettle/sha2.h") find_library(NETTLE_LIBRARY NAMES "nettle") - if(NETTLE_INCLUDE_DIR) - if(EXISTS "${NETTLE_INCLUDE_DIR}/nettle/version.h") - set(_version_regex_major "^#define[ \t]+NETTLE_VERSION_MAJOR[ \t]+([0-9]+).*") - set(_version_regex_minor "^#define[ \t]+NETTLE_VERSION_MINOR[ \t]+([0-9]+).*") - file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" _version_major REGEX "${_version_regex_major}") - file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" _version_minor REGEX "${_version_regex_minor}") - string(REGEX REPLACE "${_version_regex_major}" "\\1" _version_major "${_version_major}") - string(REGEX REPLACE "${_version_regex_minor}" "\\1" _version_minor "${_version_minor}") - unset(_version_regex_major) - unset(_version_regex_minor) - set(NETTLE_VERSION "${_version_major}.${_version_minor}") - unset(_version_major) - unset(_version_minor) - else() - set(NETTLE_VERSION "0.0") - endif() + if(NETTLE_INCLUDE_DIR AND EXISTS "${NETTLE_INCLUDE_DIR}/nettle/version.h") + set(_version_regex1 "#[\t ]*define[ \t]+NETTLE_VERSION_MAJOR[ \t]+([0-9]+).*") + set(_version_regex2 "#[\t ]*define[ \t]+NETTLE_VERSION_MINOR[ \t]+([0-9]+).*") + file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" _version_str1 REGEX "${_version_regex1}") + file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" _version_str2 REGEX "${_version_regex2}") + string(REGEX REPLACE "${_version_regex1}" "\\1" _version_str1 "${_version_str1}") + string(REGEX REPLACE "${_version_regex2}" "\\1" _version_str2 "${_version_str2}") + set(NETTLE_VERSION "${_version_str1}.${_version_str2}") + unset(_version_regex1) + unset(_version_regex2) + unset(_version_str1) + unset(_version_str2) endif() include(FindPackageHandleStandardArgs) diff --git a/CMake/FindWolfSSH.cmake b/CMake/FindWolfSSH.cmake index e6afbcc1cd..fba4a450e7 100644 --- a/CMake/FindWolfSSH.cmake +++ b/CMake/FindWolfSSH.cmake @@ -33,10 +33,13 @@ find_path(WOLFSSH_INCLUDE_DIR "wolfssh/ssh.h") find_library(WOLFSSH_LIBRARY NAMES "wolfssh" "libwolfssh") -if(WOLFSSH_INCLUDE_DIR) - file(STRINGS "${WOLFSSH_INCLUDE_DIR}/wolfssh/version.h" _wolfssh_version_str REGEX "#[\t ]*define[\t ]+LIBWOLFSSH_VERSION_STRING[\t ]+\"(.*)\"") - string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" WOLFSSH_VERSION "${_wolfssh_version_str}") - unset(_wolfssh_version_str) +if(WOLFSSH_INCLUDE_DIR AND EXISTS "${WOLFSSH_INCLUDE_DIR}/wolfssh/version.h") + set(_version_regex "#[\t ]*define[\t ]+LIBWOLFSSH_VERSION_STRING[\t ]+\"([^\"]*)\"") + file(STRINGS "${WOLFSSH_INCLUDE_DIR}/wolfssh/version.h" _version_str REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" _version_str "${_version_str}") + set(WOLFSSH_VERSION "${_version_str}") + unset(_version_regex) + unset(_version_str) endif() include(FindPackageHandleStandardArgs) diff --git a/CMake/FindWolfSSL.cmake b/CMake/FindWolfSSL.cmake index 29d567adec..2136a456b2 100644 --- a/CMake/FindWolfSSL.cmake +++ b/CMake/FindWolfSSL.cmake @@ -49,11 +49,13 @@ find_library(WolfSSL_LIBRARY NAMES "wolfssl" if(PC_WOLFSSL_VERSION) set(WolfSSL_VERSION ${PC_WOLFSSL_VERSION}) -elseif(WolfSSL_INCLUDE_DIR) - set(_version_regex "^#define[ \t]+LIBWOLFSSL_VERSION_STRING[ \t]+\"([^\"]+)\".*") - file(STRINGS "${WolfSSL_INCLUDE_DIR}/wolfssl/version.h" WolfSSL_VERSION REGEX "${_version_regex}") - string(REGEX REPLACE "${_version_regex}" "\\1" WolfSSL_VERSION "${WolfSSL_VERSION}") +elseif(WolfSSL_INCLUDE_DIR AND EXISTS "${WolfSSL_INCLUDE_DIR}/wolfssl/version.h") + set(_version_regex "#[\t ]*define[\t ]+LIBWOLFSSL_VERSION_STRING[\t ]+\"([^\"]*)\"") + file(STRINGS "${WolfSSL_INCLUDE_DIR}/wolfssl/version.h" _version_str REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" _version_str "${_version_str}") + set(WolfSSL_VERSION "${_version_str}") unset(_version_regex) + unset(_version_str) endif() include(FindPackageHandleStandardArgs) diff --git a/CMake/FindZstd.cmake b/CMake/FindZstd.cmake index 15a8a83164..acd2d6a305 100644 --- a/CMake/FindZstd.cmake +++ b/CMake/FindZstd.cmake @@ -49,12 +49,23 @@ find_library(Zstd_LIBRARY NAMES "zstd" if(PC_Zstd_VERSION) set(Zstd_VERSION ${PC_Zstd_VERSION}) -elseif(Zstd_INCLUDE_DIR) - file(READ "${Zstd_INCLUDE_DIR}/zstd.h" _zstd_header) - string(REGEX MATCH ".*define ZSTD_VERSION_MAJOR *([0-9]+).*define ZSTD_VERSION_MINOR *([0-9]+).*define ZSTD_VERSION_RELEASE *([0-9]+)" _zstd_ver "${_zstd_header}") - set(Zstd_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") - unset(_zstd_header) - unset(_zstd_ver) +elseif(Zstd_INCLUDE_DIR AND EXISTS "${Zstd_INCLUDE_DIR}/zstd.h") + set(_version_regex1 "#[\t ]*define[ \t]+ZSTD_VERSION_MAJOR[ \t]+([0-9]+).*") + set(_version_regex2 "#[\t ]*define[ \t]+ZSTD_VERSION_MINOR[ \t]+([0-9]+).*") + set(_version_regex3 "#[\t ]*define[ \t]+ZSTD_VERSION_RELEASE[ \t]+([0-9]+).*") + file(STRINGS "${Zstd_INCLUDE_DIR}/zstd.h" _version_str1 REGEX "${_version_regex1}") + file(STRINGS "${Zstd_INCLUDE_DIR}/zstd.h" _version_str2 REGEX "${_version_regex2}") + file(STRINGS "${Zstd_INCLUDE_DIR}/zstd.h" _version_str3 REGEX "${_version_regex3}") + string(REGEX REPLACE "${_version_regex1}" "\\1" _version_str1 "${_version_str1}") + string(REGEX REPLACE "${_version_regex2}" "\\1" _version_str2 "${_version_str2}") + string(REGEX REPLACE "${_version_regex3}" "\\1" _version_str3 "${_version_str3}") + set(Zstd_VERSION "${_version_str1}.${_version_str2}.${_version_str3}") + unset(_version_regex1) + unset(_version_regex2) + unset(_version_regex3) + unset(_version_str1) + unset(_version_str2) + unset(_version_str3) endif() include(FindPackageHandleStandardArgs)