- 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:
https://github.com/libssh2/libssh2/commit/
e1da7b2cb89063fc253bf94570c1ccfb3f1c2e81
https://github.com/libssh2/libssh2/pull/1621
https://github.com/libssh2/libssh2/commit/
6464301820a9ca4a56c5f02717430bbd4150c7b2
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:
https://github.com/microsoft/vcpkg/blob/
2b65c20fc66eda893aa15a15a453c3cf09500b19/ports/curl/dependencies.patch#L631-L634
https://github.com/microsoft/vcpkg/commit/
70b941a5d2443e79eeab62507acb41bd22201277#diff-
7f2c3b2f93cd3478671a603cbd5ef818c7c403a11dc25e1d3539e9b03495a5d3
Upstream-patch-by: Kai Pastor
Closes #21654
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()
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}")
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)