CMake: Don't force CONFIG mode for finding the OpenSSL dependency

When CMAKE_FIND_PACKAGE_PREFER_CONFIG is TRUE, find_package(OpenSSL)
prefers CONFIG mode and may bypass package manager wrappers that only
work in MODULE mode (e.g., vcpkg's wrapper).

This can lead to finding the wrong OpenSSL installation, such as
single-architecture system installations instead of the intended
universal binaries from the package manager, causing linker errors when
building for multiple architectures.

Fix this by finding OpenSSL before setting
CMAKE_FIND_PACKAGE_PREFER_CONFIG to TRUE. This ensures OpenSSL is found
via MODULE mode where package manager wrappers can properly control the
search. When gRPC's config file is loaded, it skips its own OpenSSL
search, using the already-found targets instead.

For test files, backup and restore the original
CMAKE_FIND_PACKAGE_PREFER_CONFIG value to limit the scope of the change.
For example files, keep the change simple without the backup/restore
pattern.

Change-Id: I985560fd5d57fa8036cc2ccb93c01a55e2efe1bc
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
Joerg Bornemann 2025-11-07 11:09:10 +01:00
parent b74e433c76
commit 363998806d
7 changed files with 33 additions and 0 deletions

View File

@ -12,6 +12,9 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/grpc/chat")
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Find OpenSSL first since it's a transitive dependency that may not be available in CONFIG mode
find_package(OpenSSL)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
find_package(Qt6 COMPONENTS ProtobufTools ProtobufQtCoreTypes) find_package(Qt6 COMPONENTS ProtobufTools ProtobufQtCoreTypes)

View File

@ -4,6 +4,9 @@ cmake_minimum_required(VERSION 3.16)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Find OpenSSL first since it's a transitive dependency that may not be available in CONFIG mode
find_package(OpenSSL)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
find_package(protobuf) find_package(protobuf)

View File

@ -4,6 +4,8 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(magic8ball_server LANGUAGES CXX) project(magic8ball_server LANGUAGES CXX)
# Find OpenSSL first since it's a transitive dependency that may not be available in CONFIG mode
find_package(OpenSSL)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
find_package(Protobuf) find_package(Protobuf)

View File

@ -4,6 +4,8 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(VehicleServer LANGUAGES CXX) project(VehicleServer LANGUAGES CXX)
# Find OpenSSL first since it's a transitive dependency that may not be available in CONFIG mode
find_package(OpenSSL)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
find_package(Protobuf) find_package(Protobuf)

View File

@ -7,8 +7,17 @@ if(QT_BUILD_STANDALONE_TESTS)
find_package(Qt6 ${PROJECT_VERSION} QUIET CONFIG OPTIONAL_COMPONENTS Gui Quick QuickTest) find_package(Qt6 ${PROJECT_VERSION} QUIET CONFIG OPTIONAL_COMPONENTS Gui Quick QuickTest)
endif() endif()
# Find OpenSSL first since it's a transitive dependency that may not be available in CONFIG mode
find_package(OpenSSL QUIET)
set(_qt_grpc_backup_prefer_config ${CMAKE_FIND_PACKAGE_PREFER_CONFIG})
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
find_package(Protobuf QUIET) find_package(Protobuf QUIET)
find_package(gRPC QUIET) find_package(gRPC QUIET)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${_qt_grpc_backup_prefer_config})
unset(_qt_grpc_backup_prefer_config)
set(QT_BUILD_TESTS_BATCHED FALSE) set(QT_BUILD_TESTS_BATCHED FALSE)
qt_build_tests() qt_build_tests()

View File

@ -1,11 +1,18 @@
# Copyright (C) 2025 The Qt Company Ltd. # Copyright (C) 2025 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# Find OpenSSL first since it's a transitive dependency that may not be available in CONFIG mode
find_package(OpenSSL)
set(_qt_grpc_backup_prefer_config ${CMAKE_FIND_PACKAGE_PREFER_CONFIG})
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
find_package(Protobuf) find_package(Protobuf)
find_package(gRPC) find_package(gRPC)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${_qt_grpc_backup_prefer_config})
unset(_qt_grpc_backup_prefer_config)
if(CMAKE_CROSSCOMPILING) if(CMAKE_CROSSCOMPILING)
find_program(grpc_cpp_plugin grpc_cpp_plugin NO_CACHE) find_program(grpc_cpp_plugin grpc_cpp_plugin NO_CACHE)
elseif(TARGET gRPC::grpc_cpp_plugin) elseif(TARGET gRPC::grpc_cpp_plugin)

View File

@ -1,11 +1,18 @@
# Copyright (C) 2022 The Qt Company Ltd. # Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# Find OpenSSL first since it's a transitive dependency that may not be available in CONFIG mode
find_package(OpenSSL)
set(_qt_grpc_backup_prefer_config ${CMAKE_FIND_PACKAGE_PREFER_CONFIG})
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
find_package(Protobuf) find_package(Protobuf)
find_package(gRPC) find_package(gRPC)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${_qt_grpc_backup_prefer_config})
unset(_qt_grpc_backup_prefer_config)
if(CMAKE_CROSSCOMPILING) if(CMAKE_CROSSCOMPILING)
find_program(grpc_cpp_plugin grpc_cpp_plugin NO_CACHE) find_program(grpc_cpp_plugin grpc_cpp_plugin NO_CACHE)
elseif(TARGET gRPC::grpc_cpp_plugin) elseif(TARGET gRPC::grpc_cpp_plugin)