From 4d33dc4a60ce7802c1e2f7e85ca10f08d035e8f8 Mon Sep 17 00:00:00 2001 From: Shuanglei Tao Date: Mon, 27 Jul 2020 07:38:47 +0800 Subject: [PATCH] cmake: check LWS_WITH_SSL --- CMakeLists.txt | 22 +++++++++++++++++++--- src/http.c | 4 ++-- src/server.c | 6 ++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f333a6e..6b9e914 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,6 @@ if(JSON-C_FOUND) SET(JSON-C_LIBRARIES "${JSON-C_LIBRARY}") endif() -find_package(OpenSSL REQUIRED) find_package(ZLIB REQUIRED) find_package(Libwebsockets 1.7.0 QUIET) @@ -65,8 +64,25 @@ if(NOT Libwebsockets_FOUND) # for libwebsockets-dev on ubuntu 16.04 endif() endif() -set(INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ${LIBWEBSOCKETS_INCLUDE_DIRS} ${JSON-C_INCLUDE_DIRS} ${LIBUV_INCLUDE_DIRS}) -set(LINK_LIBS ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARIES} ${LIBWEBSOCKETS_LIBRARIES} ${JSON-C_LIBRARIES} ${LIBUV_LIBRARIES}) +set(INCLUDE_DIRS ${ZLIB_INCLUDE_DIR} ${LIBWEBSOCKETS_INCLUDE_DIRS} ${JSON-C_INCLUDE_DIRS} ${LIBUV_INCLUDE_DIRS}) +set(LINK_LIBS ${ZLIB_LIBRARIES} ${LIBWEBSOCKETS_LIBRARIES} ${JSON-C_LIBRARIES} ${LIBUV_LIBRARIES}) + +set (CMAKE_REQUIRED_INCLUDES ${INCLUDE_DIRS}) +include(CheckCSourceCompiles) +check_c_source_compiles("#include +int main(void) { +#if defined(LWS_OPENSSL_SUPPORT) || defined(LWS_WITH_TLS) + return 0; +#else + return error; +#endif +}" LWS_SSL_ENABLED) + +if(LWS_SSL_ENABLED) + find_package(OpenSSL REQUIRED) + list(APPEND INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR}) + list(APPEND LINK_LIBS ${OPENSSL_LIBRARIES}) +endif() if(WIN32) list(APPEND LINK_LIBS shell32) diff --git a/src/http.c b/src/http.c index 461df49..7fcaf2e 100644 --- a/src/http.c +++ b/src/http.c @@ -1,5 +1,4 @@ #include -#include #include #include @@ -247,7 +246,7 @@ int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, case LWS_CALLBACK_HTTP_FILE_COMPLETION: goto try_to_reuse; - +#if defined(LWS_OPENSSL_SUPPORT) || defined(LWS_WITH_TLS) case LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION: if (!len || (SSL_get_verify_result((SSL *)in) != X509_V_OK)) { int err = X509_STORE_CTX_get_error((X509_STORE_CTX *)user); @@ -257,6 +256,7 @@ int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, return 1; } break; +#endif default: break; } diff --git a/src/server.c b/src/server.c index ffd7385..9b747a0 100644 --- a/src/server.c +++ b/src/server.c @@ -98,10 +98,12 @@ static void print_help() { #ifdef LWS_WITH_IPV6 " -6, --ipv6 Enable IPv6 support\n" #endif +#if defined(LWS_OPENSSL_SUPPORT) || defined(LWS_WITH_TLS) " -S, --ssl Enable SSL\n" " -C, --ssl-cert SSL certificate file path\n" " -K, --ssl-key SSL key file path\n" " -A, --ssl-ca SSL CA file path for client certificate verification\n" +#endif " -d, --debug Set log level (default: 7)\n" " -v, --version Print the version and exit\n" " -h, --help Print this text and exit\n\n" @@ -381,6 +383,7 @@ int main(int argc, char **argv) { case '6': info.options &= ~(LWS_SERVER_OPTION_DISABLE_IPV6); break; +#if defined(LWS_OPENSSL_SUPPORT) || defined(LWS_WITH_TLS) case 'S': ssl = true; break; @@ -396,6 +399,7 @@ int main(int argc, char **argv) { strncpy(ca_path, optarg, sizeof(ca_path) - 1); ca_path[sizeof(ca_path) - 1] = '\0'; break; +#endif case 'T': strncpy(server->terminal_type, optarg, sizeof(server->terminal_type) - 1); @@ -468,6 +472,7 @@ int main(int argc, char **argv) { } } +#if defined(LWS_OPENSSL_SUPPORT) || defined(LWS_WITH_TLS) if (ssl) { info.ssl_cert_filepath = cert_path; info.ssl_private_key_filepath = key_path; @@ -478,6 +483,7 @@ int main(int argc, char **argv) { info.options |= LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS; #endif } +#endif lwsl_notice("ttyd %s (libwebsockets %s)\n", TTYD_VERSION, LWS_LIBRARY_VERSION); -- 2.43.4