cmake: fix three issues generating lib options in config files

- drop duplicate libs lists next to each other in `libcurl.pc`.
  Logic copied from libssh2.
  Fixing (seen in a local build):
  ```diff
  -Libs.private: -lssh2 -lz -lz -lldap -llber -lssl -lcrypto -lcrypto -lz -lbrotlidec -lbrotlicommon -lzstd -lnghttp2 -licucore -liconv -lpsl -lbacktrace
  +Libs.private: -lssh2 -lz -lldap -llber -lssl -lcrypto -lz -lbrotlidec -lbrotlicommon -lzstd -lnghttp2 -licucore -liconv -lpsl -lbacktrace
  ```
  Refs:
  e1da7b2cb8
  https://github.com/libssh2/libssh2/pull/1621
  6464301820
  https://github.com/libssh2/libssh2/pull/1131

- handle `$<LINK_ONLY:NAMESPACE::NAME>` references.
  Fixing (seen in a local build using libssh2 v1.11.2-DEV):
  ```diff
  -Libs.private: -lssh2 -l$<LINK_ONLY:OpenSSL::Crypto> -lz -lldap -llber [...]
  +Libs.private: -lssh2 -lcrypto -lz -lldap -llber [...]
  ```

- fix `-l-pthread` sneaking into `libcurl.pc`.
  Fixing (seen with Android):
  ```diff
  -Libs.private:  -lz -l-pthread
  +Libs.private: -pthread -lz
  ```
  Refs:
  2b65c20fc6/ports/curl/dependencies.patch (L631-L634)
  70b941a5d2 (diff-7f2c3b2f93cd3478671a603cbd5ef818c7c403a11dc25e1d3539e9b03495a5d3)
  Upstream-patch-by: Kai Pastor

Closes #21654
This commit is contained in:
Viktor Szakats 2026-05-17 14:04:49 +02:00
parent 64adc43a6e
commit 3c597ced16
No known key found for this signature in database
2 changed files with 18 additions and 0 deletions

View file

@ -267,6 +267,10 @@ macro(curl_collect_target_link_options _target)
get_target_property(_val ${_target} INTERFACE_LINK_LIBRARIES)
if(_val)
foreach(_lib IN LISTS _val)
# E.g. via libssh2: "$<LINK_ONLY:OpenSSL::Crypto>"
if(_lib MATCHES "LINK_ONLY:")
string(REGEX MATCH "([A-Za-z0-9_-]+::[A-Za-z0-9_-]+)" _lib "${_lib}") # Extract imported target name
endif()
if(TARGET "${_lib}")
curl_collect_target_link_options(${_lib})
else()

View file

@ -2211,6 +2211,9 @@ if(NOT CURL_DISABLE_INSTALL)
list(APPEND LIBCURL_PC_LIBS_PRIVATE "${_lib}")
list(APPEND LIBCURL_PC_LIBS_PRIVATE_LIST "${_lib}")
endif()
elseif(_lib MATCHES "^-") # '-option'
list(APPEND _ldflags "${_lib}")
list(APPEND LIBCURL_PC_LIBS_PRIVATE_LIST "${_lib}")
else()
list(APPEND LIBCURL_PC_LIBS_PRIVATE "-l${_lib}")
list(APPEND LIBCURL_PC_LIBS_PRIVATE_LIST "${_lib}")
@ -2241,6 +2244,17 @@ if(NOT CURL_DISABLE_INSTALL)
string(REPLACE ";" "," LIBCURL_PC_REQUIRES_PRIVATE "${LIBCURL_PC_REQUIRES_PRIVATE}")
endif()
if(LIBCURL_PC_LIBS_PRIVATE)
# Remove duplicates listed next to each other
set(_libs "")
set(_prev "")
foreach(_lib IN LISTS LIBCURL_PC_LIBS_PRIVATE)
if(NOT _prev STREQUAL _lib)
list(APPEND _libs "${_lib}")
set(_prev "${_lib}")
endif()
endforeach()
set(LIBCURL_PC_LIBS_PRIVATE "${_libs}")
string(REPLACE ";" " " LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE}")
endif()
if(_ldflags)