Skip to content

Commit 0e23158

Browse files
committed
Statically link SSL to avoid dll conflicts on Windows
1 parent 46bf6c6 commit 0e23158

5 files changed

Lines changed: 54 additions & 60 deletions

File tree

CMakeLists.txt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ if(BUILD_OUT_OF_TREE)
1616
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/bootstrap.cmake"
1717
NO_POLICY_SCOPE)
1818
include(compilerconfig)
19+
# OPENSSL_USE_STATIC_LIBS here ensures FindOpenSSL picks up the static libs
20+
# preventing DLL name collisions with other plugins (e.g.NVIDIA AR SDK).
21+
if(OS_WINDOWS)
22+
set(OPENSSL_USE_STATIC_LIBS
23+
ON
24+
CACHE BOOL "Use static OpenSSL" FORCE)
25+
include(cmake/windows/wingetssl.cmake)
26+
endif()
1927
include(defaults)
2028
include(helpers)
2129
endif()
@@ -34,11 +42,6 @@ include(cmake/common/get_git_revision_description.cmake)
3442
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
3543
git_describe(GIT_TAG)
3644

37-
# Helper for OpenSSL
38-
if(OS_WINDOWS)
39-
include(cmake/windows/wingetssl.cmake)
40-
endif()
41-
4245
if(${GIT_TAG} STREQUAL "GIT-NOTFOUND")
4346
set(GIT_TAG ${PROJECT_VERSION})
4447
endif()

cmake/windows/wingetssl.cmake

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,27 @@ if(WIN32 AND (NOT OpenSSL_FOUND))
4040
message(STATUS "Looking for OpenSSL built with CRT variant: ${_crt_kind}")
4141

4242
# Try to find the root and corresponding lib path
43+
if(OPENSSL_USE_STATIC_LIBS)
44+
set(_crypto_lib_name "libcrypto_static.lib")
45+
set(_ssl_lib_name "libssl_static.lib")
46+
else()
47+
set(_crypto_lib_name "libcrypto.lib")
48+
set(_ssl_lib_name "libssl.lib")
49+
endif()
50+
4351
foreach(_root ${_openssl_roots})
4452
if(EXISTS "${_root}/include/openssl/ssl.h")
4553
foreach(_suffix ${_openssl_lib_suffixes})
4654
if(_suffix MATCHES "${_crt_kind}$"
47-
AND EXISTS "${_root}/${_suffix}/libcrypto.lib")
55+
AND EXISTS "${_root}/${_suffix}/${_crypto_lib_name}")
4856
set(OPENSSL_ROOT_DIR
4957
"${_root}"
5058
CACHE PATH "Path to OpenSSL root")
5159
set(OPENSSL_CRYPTO_LIBRARY
52-
"${_root}/${_suffix}/libcrypto.lib"
60+
"${_root}/${_suffix}/${_crypto_lib_name}"
5361
CACHE FILEPATH "OpenSSL crypto lib")
5462
set(OPENSSL_SSL_LIBRARY
55-
"${_root}/${_suffix}/libssl.lib"
63+
"${_root}/${_suffix}/${_ssl_lib_name}"
5664
CACHE FILEPATH "OpenSSL ssl lib")
5765
set(OPENSSL_INCLUDE_DIR
5866
"${_root}/include"

plugins/http/CMakeLists.txt

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ if(NOT TARGET httplib)
1515
EXCLUDE_FROM_ALL)
1616
endif()
1717

18-
if(OS_MACOS)
18+
if(OS_MACOS OR OS_WINDOWS)
1919
set(OPENSSL_USE_STATIC_LIBS
2020
ON
2121
CACHE BOOL "Use static OpenSSL" FORCE)
@@ -25,6 +25,14 @@ if(NOT OPENSSL_FOUND)
2525
message(WARNING "OpenSSL not found!\n" "HTTP support will be disabled!\n\n")
2626
return()
2727
endif()
28+
if(OS_WINDOWS AND NOT OPENSSL_CRYPTO_LIBRARY MATCHES "_static\\.lib$")
29+
message(
30+
WARNING
31+
"Static OpenSSL libraries (libcrypto_static.lib / libssl_static.lib) not found!\n"
32+
"HTTP support will be disabled to avoid DLL name collisions with other plugins.\n\n"
33+
)
34+
return()
35+
endif()
2836

2937
find_package(ZLIB)
3038
if(NOT ZLIB_FOUND)
@@ -65,29 +73,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
6573
target_include_directories(${PROJECT_NAME} PRIVATE "${CPP_HTTPLIB_DIR}/"
6674
"${OPENSSL_INCLUDE_DIR}")
6775
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES} ZLIB::ZLIB)
68-
install_advss_plugin(${PROJECT_NAME})
6976
if(OS_WINDOWS)
70-
# Couldn't really find a better way to install runtime dependencies for
71-
# Windows TODO: Clean this up at some point
72-
function(FIND_FILES_WITH_PATTERN result pattern dir)
73-
execute_process(
74-
COMMAND
75-
powershell -Command
76-
"Get-ChildItem -Path '${dir}' -Recurse -Include ${pattern} |"
77-
"Select-Object -First 1 |"
78-
"ForEach-Object { $_.FullName -replace '\\\\', '\\\\' }"
79-
OUTPUT_VARIABLE files
80-
OUTPUT_STRIP_TRAILING_WHITESPACE)
81-
set(${result}
82-
${files}
83-
PARENT_SCOPE)
84-
endfunction()
85-
86-
set(OPENSSL_DLL_SEARCH_DIR "${OPENSSL_INCLUDE_DIR}/..")
87-
find_files_with_pattern(CRYPTO_DLL_FILES "libcrypto*.dll"
88-
"${OPENSSL_DLL_SEARCH_DIR}")
89-
find_files_with_pattern(SSL_DLL_FILES "libssl*.dll"
90-
"${OPENSSL_DLL_SEARCH_DIR}")
91-
install_advss_plugin_dependency(TARGET ${PROJECT_NAME} DEPENDENCIES
92-
"${CRYPTO_DLL_FILES}" "${SSL_DLL_FILES}")
77+
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 crypt32 bcrypt)
9378
endif()
79+
install_advss_plugin(${PROJECT_NAME})

plugins/mqtt/CMakeLists.txt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,21 @@ project(advanced-scene-switcher-mqtt)
33

44
# --- Check paho.mqtt.cpp requirements ---
55

6-
if(OS_MACOS)
6+
if(OS_MACOS OR OS_WINDOWS)
77
set(OPENSSL_USE_STATIC_LIBS
88
ON
99
CACHE BOOL "Use static OpenSSL" FORCE)
1010
endif()
1111
find_package(OpenSSL)
12+
if(OS_WINDOWS
13+
AND OPENSSL_FOUND
14+
AND NOT OPENSSL_CRYPTO_LIBRARY MATCHES "_static\\.lib$")
15+
message(
16+
WARNING
17+
"Static OpenSSL libraries (libcrypto_static.lib / libssl_static.lib) not found!\n"
18+
"MQTT may fail at runtime due to OpenSSL DLL name collisions with other plugins.\n\n"
19+
)
20+
endif()
1221

1322
find_package(PahoMqttCpp)
1423
if(NOT PahoMqttCpp_FOUND)
@@ -51,4 +60,7 @@ else()
5160
target_link_libraries(${PROJECT_NAME}
5261
PRIVATE PahoMqttCpp::paho-mqttpp3-static)
5362
endif()
63+
if(OS_WINDOWS)
64+
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 crypt32 bcrypt)
65+
endif()
5466
install_advss_plugin(${PROJECT_NAME})

plugins/twitch/CMakeLists.txt

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ if(NOT TARGET httplib)
1515
EXCLUDE_FROM_ALL)
1616
endif()
1717

18-
if(OS_MACOS)
18+
if(OS_MACOS OR OS_WINDOWS)
1919
set(OPENSSL_USE_STATIC_LIBS
2020
ON
2121
CACHE BOOL "Use static OpenSSL" FORCE)
@@ -25,6 +25,14 @@ if(NOT OPENSSL_FOUND)
2525
message(WARNING "OpenSSL not found!\n" "Twitch support will be disabled!\n\n")
2626
return()
2727
endif()
28+
if(OS_WINDOWS AND NOT OPENSSL_CRYPTO_LIBRARY MATCHES "_static\\.lib$")
29+
message(
30+
WARNING
31+
"Static OpenSSL libraries (libcrypto_static.lib / libssl_static.lib) not found!\n"
32+
"Twitch support will be disabled to avoid DLL name collisions with other plugins.\n\n"
33+
)
34+
return()
35+
endif()
2836

2937
find_package(ZLIB)
3038
if(NOT ZLIB_FOUND)
@@ -90,30 +98,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
9098
target_include_directories(${PROJECT_NAME} PRIVATE "${CPP_HTTPLIB_DIR}/"
9199
"${OPENSSL_INCLUDE_DIR}")
92100
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES} ZLIB::ZLIB)
93-
94-
install_advss_plugin(${PROJECT_NAME})
95101
if(OS_WINDOWS)
96-
# Couldn't really find a better way to install runtime dependencies for
97-
# Windows TODO: Clean this up at some point
98-
function(FIND_FILES_WITH_PATTERN result pattern dir)
99-
execute_process(
100-
COMMAND
101-
powershell -Command
102-
"Get-ChildItem -Path '${dir}' -Recurse -Include ${pattern} |"
103-
"Select-Object -First 1 |"
104-
"ForEach-Object { $_.FullName -replace '\\\\', '\\\\' }"
105-
OUTPUT_VARIABLE files
106-
OUTPUT_STRIP_TRAILING_WHITESPACE)
107-
set(${result}
108-
${files}
109-
PARENT_SCOPE)
110-
endfunction()
111-
112-
set(OPENSSL_DLL_SEARCH_DIR "${OPENSSL_INCLUDE_DIR}/..")
113-
find_files_with_pattern(CRYPTO_DLL_FILES "libcrypto*.dll"
114-
"${OPENSSL_DLL_SEARCH_DIR}")
115-
find_files_with_pattern(SSL_DLL_FILES "libssl*.dll"
116-
"${OPENSSL_DLL_SEARCH_DIR}")
117-
install_advss_plugin_dependency(TARGET ${PROJECT_NAME} DEPENDENCIES
118-
"${CRYPTO_DLL_FILES}" "${SSL_DLL_FILES}")
102+
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 crypt32 bcrypt)
119103
endif()
104+
install_advss_plugin(${PROJECT_NAME})

0 commit comments

Comments
 (0)