FindOpenSSL: Extra dependencies missing on non-Linux
Given the following environment:
-
UNIX
system that isn't Linux - Static OpenSSL library available on the system, built with external zlib
- pkg-config available
-
libcrypto.pc
contains:Libs.private: -lz
(and possibly more dependencies) - CMake 3.26.2
Building the Tests/FindOpenSSL/rand
project from the CMake source tree, with OPENSSL_USE_STATIC_LIBS
set to TRUE
, results in a linker failure due to missing zlib on the linker command line.
!7986 (merged) and !8174 (merged) fixed this issue on Linux. However, that code path in FindOpenSSL.cmake
is skipped on non-Linux systems even if pkg-config is available.
Example failure on Solaris:
/usr/bin/cmake -E cmake_link_script CMakeFiles/findopenssl_zlib.dir/link.txt --verbose=1
/usr/bin/g++ -std=gnu++17 -m64 -I/usr/include -m64 -Wl,-z,relax=comdat -L/usr/lib64 CMakeFiles/findopenssl_zlib.dir/main.cc.o -o findopenssl_zlib /usr/lib64/libssl.a /usr/lib64/libcrypto.a
Undefined first referenced
symbol in file
bind /usr/lib64/libcrypto.a(b_sock2.o)
inflate /usr/lib64/libcrypto.a(c_zlib.o)
deflateEnd /usr/lib64/libcrypto.a(c_zlib.o)
inflateEnd /usr/lib64/libcrypto.a(c_zlib.o)
getsockname /usr/lib64/libcrypto.a(b_sock.o)
accept /usr/lib64/libcrypto.a(b_sock2.o)
listen /usr/lib64/libcrypto.a(b_sock2.o)
gethostbyname /usr/lib64/libcrypto.a(b_sock.o)
socket /usr/lib64/libcrypto.a(b_sock2.o)
zError /usr/lib64/libcrypto.a(c_zlib.o)
getnameinfo /usr/lib64/libcrypto.a(b_addr.o)
setsockopt /usr/lib64/libcrypto.a(b_sock.o)
getsockopt /usr/lib64/libcrypto.a(b_sock.o)
connect /usr/lib64/libcrypto.a(b_sock2.o)
deflate /usr/lib64/libcrypto.a(c_zlib.o)
getaddrinfo /usr/lib64/libcrypto.a(b_addr.o)
deflateInit_ /usr/lib64/libcrypto.a(c_zlib.o)
freeaddrinfo /usr/lib64/libcrypto.a(b_addr.o)
gai_strerror /usr/lib64/libcrypto.a(b_addr.o)
inflateInit_ /usr/lib64/libcrypto.a(c_zlib.o)
ld: fatal: symbol referencing errors
collect2: error: ld returned 1 exit status