mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-06 04:44:32 -05:00
Statically link SSL to avoid dll conflicts on Windows
This commit is contained in:
parent
46bf6c666f
commit
0e2315807f
|
|
@ -16,6 +16,14 @@ if(BUILD_OUT_OF_TREE)
|
|||
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/bootstrap.cmake"
|
||||
NO_POLICY_SCOPE)
|
||||
include(compilerconfig)
|
||||
# OPENSSL_USE_STATIC_LIBS here ensures FindOpenSSL picks up the static libs
|
||||
# preventing DLL name collisions with other plugins (e.g.NVIDIA AR SDK).
|
||||
if(OS_WINDOWS)
|
||||
set(OPENSSL_USE_STATIC_LIBS
|
||||
ON
|
||||
CACHE BOOL "Use static OpenSSL" FORCE)
|
||||
include(cmake/windows/wingetssl.cmake)
|
||||
endif()
|
||||
include(defaults)
|
||||
include(helpers)
|
||||
endif()
|
||||
|
|
@ -34,11 +42,6 @@ include(cmake/common/get_git_revision_description.cmake)
|
|||
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
|
||||
git_describe(GIT_TAG)
|
||||
|
||||
# Helper for OpenSSL
|
||||
if(OS_WINDOWS)
|
||||
include(cmake/windows/wingetssl.cmake)
|
||||
endif()
|
||||
|
||||
if(${GIT_TAG} STREQUAL "GIT-NOTFOUND")
|
||||
set(GIT_TAG ${PROJECT_VERSION})
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -40,19 +40,27 @@ if(WIN32 AND (NOT OpenSSL_FOUND))
|
|||
message(STATUS "Looking for OpenSSL built with CRT variant: ${_crt_kind}")
|
||||
|
||||
# Try to find the root and corresponding lib path
|
||||
if(OPENSSL_USE_STATIC_LIBS)
|
||||
set(_crypto_lib_name "libcrypto_static.lib")
|
||||
set(_ssl_lib_name "libssl_static.lib")
|
||||
else()
|
||||
set(_crypto_lib_name "libcrypto.lib")
|
||||
set(_ssl_lib_name "libssl.lib")
|
||||
endif()
|
||||
|
||||
foreach(_root ${_openssl_roots})
|
||||
if(EXISTS "${_root}/include/openssl/ssl.h")
|
||||
foreach(_suffix ${_openssl_lib_suffixes})
|
||||
if(_suffix MATCHES "${_crt_kind}$"
|
||||
AND EXISTS "${_root}/${_suffix}/libcrypto.lib")
|
||||
AND EXISTS "${_root}/${_suffix}/${_crypto_lib_name}")
|
||||
set(OPENSSL_ROOT_DIR
|
||||
"${_root}"
|
||||
CACHE PATH "Path to OpenSSL root")
|
||||
set(OPENSSL_CRYPTO_LIBRARY
|
||||
"${_root}/${_suffix}/libcrypto.lib"
|
||||
"${_root}/${_suffix}/${_crypto_lib_name}"
|
||||
CACHE FILEPATH "OpenSSL crypto lib")
|
||||
set(OPENSSL_SSL_LIBRARY
|
||||
"${_root}/${_suffix}/libssl.lib"
|
||||
"${_root}/${_suffix}/${_ssl_lib_name}"
|
||||
CACHE FILEPATH "OpenSSL ssl lib")
|
||||
set(OPENSSL_INCLUDE_DIR
|
||||
"${_root}/include"
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ if(NOT TARGET httplib)
|
|||
EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
|
||||
if(OS_MACOS)
|
||||
if(OS_MACOS OR OS_WINDOWS)
|
||||
set(OPENSSL_USE_STATIC_LIBS
|
||||
ON
|
||||
CACHE BOOL "Use static OpenSSL" FORCE)
|
||||
|
|
@ -25,6 +25,14 @@ if(NOT OPENSSL_FOUND)
|
|||
message(WARNING "OpenSSL not found!\n" "HTTP support will be disabled!\n\n")
|
||||
return()
|
||||
endif()
|
||||
if(OS_WINDOWS AND NOT OPENSSL_CRYPTO_LIBRARY MATCHES "_static\\.lib$")
|
||||
message(
|
||||
WARNING
|
||||
"Static OpenSSL libraries (libcrypto_static.lib / libssl_static.lib) not found!\n"
|
||||
"HTTP support will be disabled to avoid DLL name collisions with other plugins.\n\n"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
find_package(ZLIB)
|
||||
if(NOT ZLIB_FOUND)
|
||||
|
|
@ -65,29 +73,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
|
|||
target_include_directories(${PROJECT_NAME} PRIVATE "${CPP_HTTPLIB_DIR}/"
|
||||
"${OPENSSL_INCLUDE_DIR}")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES} ZLIB::ZLIB)
|
||||
install_advss_plugin(${PROJECT_NAME})
|
||||
if(OS_WINDOWS)
|
||||
# Couldn't really find a better way to install runtime dependencies for
|
||||
# Windows TODO: Clean this up at some point
|
||||
function(FIND_FILES_WITH_PATTERN result pattern dir)
|
||||
execute_process(
|
||||
COMMAND
|
||||
powershell -Command
|
||||
"Get-ChildItem -Path '${dir}' -Recurse -Include ${pattern} |"
|
||||
"Select-Object -First 1 |"
|
||||
"ForEach-Object { $_.FullName -replace '\\\\', '\\\\' }"
|
||||
OUTPUT_VARIABLE files
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(${result}
|
||||
${files}
|
||||
PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
set(OPENSSL_DLL_SEARCH_DIR "${OPENSSL_INCLUDE_DIR}/..")
|
||||
find_files_with_pattern(CRYPTO_DLL_FILES "libcrypto*.dll"
|
||||
"${OPENSSL_DLL_SEARCH_DIR}")
|
||||
find_files_with_pattern(SSL_DLL_FILES "libssl*.dll"
|
||||
"${OPENSSL_DLL_SEARCH_DIR}")
|
||||
install_advss_plugin_dependency(TARGET ${PROJECT_NAME} DEPENDENCIES
|
||||
"${CRYPTO_DLL_FILES}" "${SSL_DLL_FILES}")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 crypt32 bcrypt)
|
||||
endif()
|
||||
install_advss_plugin(${PROJECT_NAME})
|
||||
|
|
|
|||
|
|
@ -3,12 +3,21 @@ project(advanced-scene-switcher-mqtt)
|
|||
|
||||
# --- Check paho.mqtt.cpp requirements ---
|
||||
|
||||
if(OS_MACOS)
|
||||
if(OS_MACOS OR OS_WINDOWS)
|
||||
set(OPENSSL_USE_STATIC_LIBS
|
||||
ON
|
||||
CACHE BOOL "Use static OpenSSL" FORCE)
|
||||
endif()
|
||||
find_package(OpenSSL)
|
||||
if(OS_WINDOWS
|
||||
AND OPENSSL_FOUND
|
||||
AND NOT OPENSSL_CRYPTO_LIBRARY MATCHES "_static\\.lib$")
|
||||
message(
|
||||
WARNING
|
||||
"Static OpenSSL libraries (libcrypto_static.lib / libssl_static.lib) not found!\n"
|
||||
"MQTT may fail at runtime due to OpenSSL DLL name collisions with other plugins.\n\n"
|
||||
)
|
||||
endif()
|
||||
|
||||
find_package(PahoMqttCpp)
|
||||
if(NOT PahoMqttCpp_FOUND)
|
||||
|
|
@ -51,4 +60,7 @@ else()
|
|||
target_link_libraries(${PROJECT_NAME}
|
||||
PRIVATE PahoMqttCpp::paho-mqttpp3-static)
|
||||
endif()
|
||||
if(OS_WINDOWS)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 crypt32 bcrypt)
|
||||
endif()
|
||||
install_advss_plugin(${PROJECT_NAME})
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ if(NOT TARGET httplib)
|
|||
EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
|
||||
if(OS_MACOS)
|
||||
if(OS_MACOS OR OS_WINDOWS)
|
||||
set(OPENSSL_USE_STATIC_LIBS
|
||||
ON
|
||||
CACHE BOOL "Use static OpenSSL" FORCE)
|
||||
|
|
@ -25,6 +25,14 @@ if(NOT OPENSSL_FOUND)
|
|||
message(WARNING "OpenSSL not found!\n" "Twitch support will be disabled!\n\n")
|
||||
return()
|
||||
endif()
|
||||
if(OS_WINDOWS AND NOT OPENSSL_CRYPTO_LIBRARY MATCHES "_static\\.lib$")
|
||||
message(
|
||||
WARNING
|
||||
"Static OpenSSL libraries (libcrypto_static.lib / libssl_static.lib) not found!\n"
|
||||
"Twitch support will be disabled to avoid DLL name collisions with other plugins.\n\n"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
find_package(ZLIB)
|
||||
if(NOT ZLIB_FOUND)
|
||||
|
|
@ -90,30 +98,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
|
|||
target_include_directories(${PROJECT_NAME} PRIVATE "${CPP_HTTPLIB_DIR}/"
|
||||
"${OPENSSL_INCLUDE_DIR}")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES} ZLIB::ZLIB)
|
||||
|
||||
install_advss_plugin(${PROJECT_NAME})
|
||||
if(OS_WINDOWS)
|
||||
# Couldn't really find a better way to install runtime dependencies for
|
||||
# Windows TODO: Clean this up at some point
|
||||
function(FIND_FILES_WITH_PATTERN result pattern dir)
|
||||
execute_process(
|
||||
COMMAND
|
||||
powershell -Command
|
||||
"Get-ChildItem -Path '${dir}' -Recurse -Include ${pattern} |"
|
||||
"Select-Object -First 1 |"
|
||||
"ForEach-Object { $_.FullName -replace '\\\\', '\\\\' }"
|
||||
OUTPUT_VARIABLE files
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(${result}
|
||||
${files}
|
||||
PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
set(OPENSSL_DLL_SEARCH_DIR "${OPENSSL_INCLUDE_DIR}/..")
|
||||
find_files_with_pattern(CRYPTO_DLL_FILES "libcrypto*.dll"
|
||||
"${OPENSSL_DLL_SEARCH_DIR}")
|
||||
find_files_with_pattern(SSL_DLL_FILES "libssl*.dll"
|
||||
"${OPENSSL_DLL_SEARCH_DIR}")
|
||||
install_advss_plugin_dependency(TARGET ${PROJECT_NAME} DEPENDENCIES
|
||||
"${CRYPTO_DLL_FILES}" "${SSL_DLL_FILES}")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 crypt32 bcrypt)
|
||||
endif()
|
||||
install_advss_plugin(${PROJECT_NAME})
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user