Skip to content

Commit 0efcb11

Browse files
authored
provide a way to handle custom openssl paths (#179)
1 parent 7011195 commit 0efcb11

3 files changed

Lines changed: 35 additions & 6 deletions

File tree

.github/workflows/release/versions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
{ "pattern": "#define PUBNUB_SDK_VERSION \"(.+)\"$", "cleared": true }
88
],
99
"CMakeLists.txt": [
10-
{ "pattern": "^version(\"(.+)\")$", "cleared": true }
10+
{ "pattern": "project(c-core VERSION ((.+))$", "cleared": true }
1111
]
1212
}

CMakeLists.txt

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ num_option(USE_IPV6 "Use IPv6 [CALLBACK=ON]" ${DEFAULT_USE_CALLBACK_API})
6969
num_option(USE_SET_DNS_SERVERS "Use set DNS servers [CALLBACK=ON]" ${DEFAULT_USE_CALLBACK_API})
7070
num_option(USE_EXTERN_API "Use extern C API [WITH_CPP=ON]" ON)
7171
num_option(USE_LEGACY_CRYPTO_RANDOM_IV "Use random IV for legacy crypto module [OpenSSL only]" ON)
72-
log_set(OPENSSL_ROOT_DIR "" "OpenSSL root directory (leave empty for find_package function)[OPENSSL=ON needed]")
72+
log_set(OPENSSL_ROOT_DIR "" "OpenSSL root directory (leave empty for find_package() defaults)[OPENSSL=ON needed]")
73+
log_set(CUSTOM_OPENSSL_LIB_DIR "lib" "OpenSSL lib directory relative to OPENSSL_ROOT_DIR [used only if find_package() failed]")
74+
log_set(CUSTOM_OPENSSL_INCLUDE_DIR "include" "OpenSSL include directory relative to OPENSSL_ROOT_DIR [used only if find_package() failed]")
7375
log_set(EXAMPLE "all" "Build example with provided name (use 'all' for all examples) [EXAMPLES=ON needed]")
7476
log_set(CGREEN_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/cgreen" "CGreen root directory [UNIT_TEST=ON needed]")
7577
log_set(LOG_LEVEL "WARNING" "Log level [TRACE/WARNING/INFO/ERROR/FATAL]")
@@ -153,13 +155,18 @@ set(CORE_SOURCEFILES
153155
set(LIB_SOURCEFILES
154156
${CMAKE_CURRENT_LIST_DIR}/lib/sockets/pbpal_resolv_and_connect_sockets.c
155157
${CMAKE_CURRENT_LIST_DIR}/lib/sockets/pbpal_handle_socket_error.c
156-
${CMAKE_CURRENT_LIST_DIR}/lib/md5/md5.c
157158
${CMAKE_CURRENT_LIST_DIR}/lib/base64/pbbase64.c
158159
${CMAKE_CURRENT_LIST_DIR}/lib/pb_strnlen_s.c
159160
${CMAKE_CURRENT_LIST_DIR}/lib/pb_strncasecmp.c
160161
${CMAKE_CURRENT_LIST_DIR}/lib/sockets/pbpal_adns_sockets.c
161162
${CMAKE_CURRENT_LIST_DIR}/lib/pubnub_dns_codec.c)
162163

164+
if(NOT ${OPENSSL})
165+
set(LIB_SOURCEFILES
166+
${LIB_SOURCEFILES}
167+
${CMAKE_CURRENT_LIST_DIR}/lib/md5/md5.c)
168+
endif()
169+
163170
if(UNIX)
164171
set(LDLIBS "-lpthread ${LDLIBS}")
165172
set(OS_SOURCEFILES
@@ -342,8 +349,29 @@ if(${OPENSSL})
342349

343350
if("${OPENSSL_ROOT_DIR}" STREQUAL "")
344351
find_package(OpenSSL REQUIRED)
352+
set(OPENSSL_LINK_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
345353
else()
346-
find_package(OpenSSL REQUIRED PATHS ${OPENSSL_ROOT_DIR})
354+
find_package(OpenSSL PATHS ${OPENSSL_ROOT_DIR})
355+
if(OpenSSl_FOUND)
356+
set(OPENSSL_LINK_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
357+
else()
358+
message(STATUS "Searching for custom OpenSSL library")
359+
360+
find_library(OpenSSL REQUIRED NAMES ssl PATHS ${OPENSSL_ROOT_DIR}/${CUSTOM_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
361+
find_library(Crypto REQUIRED NAMES crypto PATHS ${OPENSSL_ROOT_DIR}/${CUSTOM_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
362+
363+
message(STATUS "Used libraries:")
364+
message(STATUS "-> ${OpenSSL}")
365+
message(STATUS "-> ${Crypto}")
366+
367+
set(OPENSSL_LINK_LIBRARIES ${OpenSSL} ${Crypto})
368+
include_directories(${OPENSSL_ROOT_DIR}/${CUSTOM_OPENSSL_INCLUDE_DIR})
369+
370+
message(STATUS "Used headers:")
371+
message(STATUS "-> ${OPENSSL_ROOT_DIR}/${CUSTOM_OPENSSL_INCLUDE_DIR}")
372+
373+
message(STATUS "OpenSSL ready!")
374+
endif()
347375
endif()
348376

349377
set(FEATURE_SOURCEFILES
@@ -370,7 +398,6 @@ if(${OPENSSL})
370398
${FEATURE_SOURCEFILES})
371399

372400
set(LDLIBS ${LDLIBS})
373-
set(OPENSSL_LINK_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
374401

375402
if(UNIX)
376403
set(FEATURE_SOURCEFILES ${FEATURE_SOURCEFILES} ${CMAKE_CURRENT_LIST_DIR}/openssl/pbpal_add_system_certs_posix.c)

unreal/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ cmake . && make
1515
C-core offers some customization flags (e.g. shared library or using openssl). You can configure that as follow:
1616

1717
```sh
18-
cmake . -DSHARED=ON -DOPENSSL=ON -DOPENSSL_ROOT_DIR={unreal engine location}/Engine/Source/ThirdParty/openssl/1.1.1/
18+
cmake . -DSHARED=ON -DOPENSSL=ON -DOPENSSL_ROOT_DIR={unreal engine location}/Engine/Source/ThirdParty/openssl/1.1.1x/ -DCUSTOM_OPENSSL_LIB_DIR=lib/XXX/ -DCUSTOM_OPENSSL_INCLUDE_DIR=include/XXX/
1919
```
20+
21+
where x is UE's version and XXX is your desired architecture.
2022

2123
3. Adjust `PubNubModule/PubNubModule.Build.cs` with selected options by changing `OpenSsl`, `StaticLink` and `BuildLocation` with the same values you used for compilation.
2224

0 commit comments

Comments
 (0)