Commit 7c222f4a1 for clamav.net
commit 7c222f4a12089533f3df6dee725df3a0c0d282b5
Author: Jonas Zaddach <5988756+zaddach@users.noreply.github.com>
Date: Thu Aug 7 10:59:36 2025 +0200
CMake: Support finding the OpenSSL library paths provided by vcpkg
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1d4863928..4c1d607ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -469,6 +469,46 @@ include(CPack)
# libclamav efficacy dependencies
find_package(OpenSSL REQUIRED)
+# The Rust openssl-sys crate needs to know how to find the OpenSSL headers and libraries.
+get_filename_component(OPENSSL_DIR "${OPENSSL_INCLUDE_DIR}" DIRECTORY)
+
+set(OPENSSL_LIBS "")
+
+# Get the libcrypto library.
+# Depending on the FindOpenSSL script, this can be either a path or a list of
+# configurations and paths, e.g., "optimized;C:/vcpkg/installed/x64-windows/lib/libcrypto.lib;debug;C:/vcpkg/installed/x64-windows/debug/lib/libcrypto.lib"
+foreach(OPENSSL_CRYPTO_LIB IN LISTS OPENSSL_CRYPTO_LIBRARY)
+ if(EXISTS "${OPENSSL_CRYPTO_LIB}")
+ # Get the libcrypto library.
+ # Remove path and extension.
+ get_filename_component(LIBNAME "${OPENSSL_CRYPTO_LIBRARY}" NAME_WLE)
+ # Remove "lib" prefix, if present.
+ string(REGEX REPLACE "^lib" "" LIBNAME "${LIBNAME}")
+ # Add libcrypto.
+ set(OPENSSL_LIBS "${LIBNAME}")
+
+ get_filename_component(OPENSSL_LIB_DIR "${OPENSSL_CRYPTO_LIB}" DIRECTORY)
+ set(OPENSSL_CRYPTO_LIB_FOUND TRUE)
+ break()
+ endif()
+endforeach()
+
+foreach(OPENSSL_SSL_LIB IN LISTS OPENSSL_SSL_LIBRARY)
+ if(EXISTS "${OPENSSL_SSL_LIB}")
+ # Remove path and extension.
+ get_filename_component(LIBNAME "${OPENSSL_SSL_LIB}" NAME_WLE)
+ # Remove "lib" prefix, if present.
+ string(REGEX REPLACE "^lib" "" LIBNAME "${LIBNAME}")
+ # Add libssl.
+ set(OPENSSL_LIBS "${OPENSSL_LIBS}:${LIBNAME}")
+ set(OPENSSL_SSL_LIB_FOUND TRUE)
+ break()
+ endif()
+endforeach()
+
+if(NOT OPENSSL_CRYPTO_LIB_FOUND OR NOT OPENSSL_SSL_LIB_FOUND)
+ message(FATAL_ERROR "Could not deduce the location of OpenSSL libraries from OPENSSL_CRYPTO_LIBRARY: ${OPENSSL_CRYPTO_LIBRARY} and OPENSSL_SSL_LIBRARY: ${OPENSSL_SSL_LIBRARY}.")
+endif()
find_package(ZLIB REQUIRED)
diff --git a/cmake/FindRust.cmake b/cmake/FindRust.cmake
index 79bb657cf..451897233 100644
--- a/cmake/FindRust.cmake
+++ b/cmake/FindRust.cmake
@@ -386,6 +386,8 @@ function(add_rust_test)
)
endif()
+ message(STATUS "Environment: ${ARGS_ENVIRONMENT}")
+
add_test(
NAME ${ARGS_NAME}
COMMAND ${CMAKE_COMMAND} -E env "CARGO_CMD=test" "CARGO_TARGET_DIR=${ARGS_BINARY_DIRECTORY}" "RUSTFLAGS=${RUSTFLAGS}" ${cargo_EXECUTABLE} ${MY_CARGO_ARGS} --color always
diff --git a/libclamav_rust/CMakeLists.txt b/libclamav_rust/CMakeLists.txt
index 6652a9702..9237005d5 100644
--- a/libclamav_rust/CMakeLists.txt
+++ b/libclamav_rust/CMakeLists.txt
@@ -4,30 +4,6 @@
# Copyright (C) 2021-2025 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
#
-# The Rust openssl-sys crate needs to know how to find the OpenSSL headers and libraries.
-get_filename_component(OPENSSL_DIR "${OPENSSL_INCLUDE_DIR}" DIRECTORY)
-
-set(OPENSSL_LIBS "")
-
-# Get the libcrypto library.
-# Remove path and extension.
-get_filename_component(LIBNAME "${OPENSSL_CRYPTO_LIBRARY}" NAME_WLE)
-# Remove "lib" prefix, if present.
-string(REGEX REPLACE "^lib" "" LIBNAME "${LIBNAME}")
-# Add libcrypto.
-set(OPENSSL_LIBS "${LIBNAME}")
-
-# Get the libssl library.
-# Remove path and extension.
-get_filename_component(LIBNAME "${OPENSSL_SSL_LIBRARY}" NAME_WLE)
-# Remove "lib" prefix, if present.
-string(REGEX REPLACE "^lib" "" LIBNAME "${LIBNAME}")
-# Add libssl.
-set(OPENSSL_LIBS "${OPENSSL_LIBS}:${LIBNAME}")
-
-# Get directory of the first library to use for the OPENSSL_LIB_DIR.
-get_filename_component(OPENSSL_LIB_DIR "${OPENSSL_CRYPTO_LIBRARY}" DIRECTORY)
-
set(ENVIRONMENT "")
list(APPEND ENVIRONMENT "OPENSSL_DIR=${OPENSSL_DIR}")
list(APPEND ENVIRONMENT "OPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}")
diff --git a/unit_tests/CMakeLists.txt b/unit_tests/CMakeLists.txt
index 237a2bb52..87ecd1d9f 100644
--- a/unit_tests/CMakeLists.txt
+++ b/unit_tests/CMakeLists.txt
@@ -304,29 +304,6 @@ set(ENVIRONMENT
CLAMONACC=${CLAMONACC}
)
-# The Rust openssl-sys crate needs to know how to find the OpenSSL headers and libraries.
-get_filename_component(OPENSSL_DIR "${OPENSSL_INCLUDE_DIR}" DIRECTORY)
-
-set(OPENSSL_LIBS "")
-
-# Get the libcrypto library.
-# Remove path and extension.
-get_filename_component(LIBNAME "${OPENSSL_CRYPTO_LIBRARY}" NAME_WLE)
-# Remove "lib" prefix, if present.
-string(REGEX REPLACE "^lib" "" LIBNAME "${LIBNAME}")
-# Add libcrypto.
-set(OPENSSL_LIBS "${LIBNAME}")
-
-# Get the libssl library.
-# Remove path and extension.
-get_filename_component(LIBNAME "${OPENSSL_SSL_LIBRARY}" NAME_WLE)
-# Remove "lib" prefix, if present.
-string(REGEX REPLACE "^lib" "" LIBNAME "${LIBNAME}")
-# Add libssl.
-set(OPENSSL_LIBS "${OPENSSL_LIBS}:${LIBNAME}")
-
-# Get directory of the first library to use for the OPENSSL_LIB_DIR.
-get_filename_component(OPENSSL_LIB_DIR "${OPENSSL_CRYPTO_LIBRARY}" DIRECTORY)
list(APPEND ENVIRONMENT "OPENSSL_DIR=${OPENSSL_DIR}")
list(APPEND ENVIRONMENT "OPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}")