summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt25
-rw-r--r--cmake/FindPolarSSL.cmake17
-rw-r--r--cmake/FindcyaSSL.cmake17
-rw-r--r--librabbitmq/CMakeLists.txt35
4 files changed, 93 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 55d56e1..a9447be 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -202,6 +202,7 @@ endif (REGENERATE_AMQP_FRAMING)
find_package(POPT)
find_package(XmlTo)
+find_package(OpenSSL 1.0.0)
if (POPT_FOUND AND XmlTo_FOUND)
set(DO_DOCS ON)
@@ -214,6 +215,30 @@ option(BUILD_EXAMPLES "Build Examples" ON)
option(BUILD_TOOLS "Build Tools (requires POPT Library)" ${POPT_FOUND})
option(BUILD_TOOLS_DOCS "Build man pages for Tools (requires xmlto)" ${DO_DOCS})
option(BUILD_TESTS "Build tests (run tests with make test)" ON)
+option(ENABLE_SSL_SUPPORT "Enable SSL support" ON)
+
+set(SSL_ENGINE "OpenSSL" CACHE STRING "SSL Backend to use, valid options: OpenSSL, cyaSSL, GnuTLS, PolarSSL")
+mark_as_advanced(SSL_ENGINE)
+
+if (ENABLE_SSL_SUPPORT)
+ if (SSL_ENGINE STREQUAL "OpenSSL")
+ if (NOT OPENSSL_FOUND)
+ message(FATAL_ERROR "Cannot find OpenSSL package, install openssl-dev package")
+ endif()
+
+ elseif (SSL_ENGINE STREQUAL "cyaSSL")
+ find_package(cyaSSL REQUIRED)
+
+ elseif (SSL_ENGINE STREQUAL "GnuTLS")
+ find_package(GnuTLS REQUIRED)
+
+ elseif (SSL_ENGINE STREQUAL "PolarSSL")
+ find_package(PolarSSL REQUIRED)
+
+ else()
+ message(FATAL_ERROR "Unsupported SSL_ENGINE ${SSL_ENGINE}, valid engines: OpenSSL, cyaSSL, GnuTLS, or PolarSSL")
+ endif()
+endif()
if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)
message(FATAL_ERROR "One or both of BUILD_SHARED_LIBS or BUILD_STATIC_LIBS must be set to ON to build")
diff --git a/cmake/FindPolarSSL.cmake b/cmake/FindPolarSSL.cmake
new file mode 100644
index 0000000..f5a7c9b
--- /dev/null
+++ b/cmake/FindPolarSSL.cmake
@@ -0,0 +1,17 @@
+INCLUDE(LibFindMacros)
+
+# Find the include directories
+FIND_PATH(POLARSSL_INCLUDE_DIR
+ NAMES polarssl/ssl.h
+ HINTS ${POLARSSL_PREFIX}/include
+ )
+
+FIND_LIBRARY(POLARSSL_LIBRARY
+ NAMES polarssl
+ HINTS ${POLARSSL_PREFIX}/lib
+ )
+
+SET(POLARSSL_PROCESS_INCLUDES POLARSSL_INCLUDE_DIR)
+SET(POLARSSL_PROCESS_LIBS POLARSSL_LIBRARY)
+
+LIBFIND_PROCESS(POLARSSL)
diff --git a/cmake/FindcyaSSL.cmake b/cmake/FindcyaSSL.cmake
new file mode 100644
index 0000000..80452bb
--- /dev/null
+++ b/cmake/FindcyaSSL.cmake
@@ -0,0 +1,17 @@
+INCLUDE(LibFindMacros)
+
+# Find the include directories
+FIND_PATH(CYASSL_INCLUDE_DIR
+ NAMES cyassl/ssl.h
+ HINTS ${CYASSL_PREFIX}/include
+ )
+
+FIND_LIBRARY(CYASSL_LIBRARY
+ NAMES cyassl
+ HINTS ${CYASSL_PREFIX}/lib
+ )
+
+SET(CYASSL_PROCESS_INCLUDES CYASSL_INCLUDE_DIR)
+SET(CYASSL_PROCESS_LIBS CYASSL_LIBRARY)
+
+LIBFIND_PROCESS(CYASSL)
diff --git a/librabbitmq/CMakeLists.txt b/librabbitmq/CMakeLists.txt
index a9996cf..07d6146 100644
--- a/librabbitmq/CMakeLists.txt
+++ b/librabbitmq/CMakeLists.txt
@@ -76,6 +76,35 @@ set(LIBRABBITMQ_INCLUDE_DIRS
add_definitions(-DHAVE_CONFIG_H)
+if (ENABLE_SSL_SUPPORT)
+ add_definitions(-DWITH_SSL=1)
+
+ if (SSL_ENGINE STREQUAL "OpenSSL")
+ set(AMQP_SSL_SRCS amqp-ssl.h amqp-openssl.c)
+ include_directories(${OPENSSL_INCLUDE_DIR})
+ set(AMQP_SSL_LIBS ${OPENSSL_LIBRARIES})
+
+ elseif (SSL_ENGINE STREQUAL "cyaSSL")
+ set(AMQP_SSL_SRCS amqp-ssl.h amqp-cyassl.c)
+ include_directories(${CYASSL_INCLUDE_DIR})
+ set(AMQP_SSL_LIBS ${CYASSL_LIBRARIES})
+
+ elseif (SSL_ENGINE STREQUAL "GnuTLS")
+ set(AMQP_SSL_SRCS amqp-ssl.h amqp-gnutls.c)
+ include_directories(${GNUTLS_INCLUDE_DIR})
+ add_definitions(${GNUTLS_DEFINITIONS})
+ set(AMQP_SSL_LIBS ${GNUTLS_LIBRARIES})
+
+ elseif (SSL_ENGINE STREQUAL "PolarSSL")
+ set(AMQP_SSL_SRCS amqp-ssl.h amqp-polarssl.c)
+ include_directories(${POLARSSL_INCLUDE_DIR})
+ set(AMQP_SSL_LIBS ${POLARSSL_LIBRARIES})
+
+ else()
+ message(FATAL_ERROR "Unknown SSL_ENGINE ${SSL_ENGINE}")
+ endif()
+endif()
+
set(RABBITMQ_SOURCES
${AMQP_FRAMING_H_PATH}
${AMQP_FRAMING_C_PATH}
@@ -83,6 +112,7 @@ set(RABBITMQ_SOURCES
amqp_connection.c amqp_mem.c amqp_private.h amqp_socket.c amqp_table.c
amqp_url.c
${SOCKET_IMPL}/socket.h ${SOCKET_IMPL}/socket.c
+ ${AMQP_SSL_SRCS}
)
add_definitions(-DAMQP_BUILD)
@@ -92,6 +122,10 @@ include(InstallMacros)
if (BUILD_SHARED_LIBS)
add_library(rabbitmq SHARED ${RABBITMQ_SOURCES})
+ if (ENABLE_SSL_SUPPORT)
+ target_link_libraries(rabbitmq ${AMQP_SSL_LIBS})
+ endif()
+
if (WIN32)
set_target_properties(rabbitmq PROPERTIES VERSION ${RMQ_VERSION} OUTPUT_NAME rabbitmq.${RMQ_SOVERSION})
else (WIN32)
@@ -141,4 +175,3 @@ install(FILES amqp.h ${AMQP_FRAMING_H_PATH} ${STDINT_H_INSTALL_FILE}
)
set(RMQ_LIBRARY_TARGET ${RMQ_LIBRARY_TARGET} PARENT_SCOPE)
-