add_definitions(-O -Wall -Werror --std=gnu99 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64) # The version number. set(UHTTPD_VERSION_MAJOR 3) set(UHTTPD_VERSION_MINOR 10) set(UHTTPD_VERSION_PATCH 1) # Check the third party Libraries find_package(Libev REQUIRED) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/http-parser ${CMAKE_CURRENT_SOURCE_DIR}/buffer ${CMAKE_CURRENT_BINARY_DIR} ${LIBEV_INCLUDE_DIR}) set(EXTRA_LIBS ${LIBEV_LIBRARY} m) include(CheckLibraryExists) check_library_exists(dl dlopen "" HAVE_DLOPEN) if(HAVE_DLOPEN) list(APPEND EXTRA_LIBS dl) add_definitions(-DHAVE_DLOPEN) endif() set(SOURCE_FILES uhttpd.c log.c connection.c buffer/buffer.c http-parser/http_parser.c ssl.c file.c mimetypes.c utils.c) option(BUILD_SHARED_LIBS "Build shared library" ON) option(BUILD_STATIC_LIBS "Build static library" ON) if(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) message(FATAL_ERROR "BUILD_SHARED_LIBS and BUILD_STATIC_LIBS can't be OFF at the same time, please select at least one of them") endif() set(UHTTPD_SSL_SUPPORT_CONFIG 1) option(UHTTPD_SSL_SUPPORT "SSL support" ON) option(UHTTPD_USE_OPENSSL "Force select OpenSSL" OFF) option(UHTTPD_USE_WOLFSSL "Force select WolfSSL(CyaSSL)" OFF) option(UHTTPD_USE_MBEDTLS "Force select MbedTLS(PolarSSL)" OFF) set(SSL_NAME "") set(UHTTPD_HAVE_OPENSSL_CONFIG 0) set(UHTTPD_HAVE_WOLFSSL_CONFIG 0) set(UHTTPD_HAVE_MBEDTLS_CONFIG 0) if(NOT UHTTPD_SSL_SUPPORT) set(UHTTPD_SSL_SUPPORT_CONFIG 0) else() find_package(PkgConfig QUIET) pkg_check_modules(OPENSSL QUIET openssl) if (NOT OPENSSL_FOUND) find_package(OpenSSL) endif() find_package(WolfSSL) find_package(MbedTLS) find_package(ZLIB) if(UHTTPD_USE_OPENSSL) if (NOT OPENSSL_FOUND) set(UHTTPD_SSL_SUPPORT OFF) message(WARNING "Force select OpenSSL, but not found it") endif() elseif(UHTTPD_USE_WOLFSSL) if (NOT WOLFSSL_FOUND) set(UHTTPD_SSL_SUPPORT OFF) message(WARNING "Force select WolfSSL(CyaSSL), but not found it") endif() elseif(UHTTPD_USE_MBEDTLS) if (NOT MBEDTLS_FOUND) set(UHTTPD_SSL_SUPPORT OFF) message(WARNING "Force select MbedTLS(PolarSSL), but not found it") endif() elseif(OPENSSL_FOUND) set(UHTTPD_USE_OPENSSL ON) elseif(WOLFSSL_FOUND) set(UHTTPD_USE_WOLFSSL ON) elseif(MBEDTLS_FOUND) set(UHTTPD_USE_MBEDTLS ON) else() set(UHTTPD_SSL_SUPPORT OFF) message(WARNING "No available SSL libraries found") endif() if(UHTTPD_USE_OPENSSL) set(SSL_NAME "OpenSSL") set(SSL_INC ${OPENSSL_INCLUDE_DIR}) set(SSL_LIB ${OPENSSL_LIBRARIES}) set(UHTTPD_HAVE_OPENSSL_CONFIG 1) elseif(UHTTPD_USE_WOLFSSL) set(SSL_NAME "WolfSSL(CyaSSL)") set(SSL_INC ${WOLFSSL_INCLUDE_DIR}) set(SSL_LIB ${WOLFSSL_LIBRARIES}) set(UHTTPD_HAVE_WOLFSSL_CONFIG 1) elseif(UHTTPD_USE_MBEDTLS) set(SSL_NAME "MbedTLS(PolarSSL)") set(SSL_INC ${MBEDTLS_INCLUDE_DIR}) if(ZLIB_FOUND) set(SSL_LIB ${MBEDTLS_LIBRARIES} ${ZLIB_LIBRARIES}) else() set(SSL_LIB ${MBEDTLS_LIBRARIES}) endif() set(UHTTPD_HAVE_MBEDTLS_CONFIG 1) endif() if(UHTTPD_SSL_SUPPORT) include_directories(${SSL_INC}) list(APPEND EXTRA_LIBS ${SSL_LIB}) message(STATUS "Select ${SSL_NAME} as the SSL backend") else() set(UHTTPD_SSL_SUPPORT_CONFIG 0) endif() endif() if(BUILD_SHARED_LIBS) add_library(uhttpd SHARED ${SOURCE_FILES}) set_target_properties(uhttpd PROPERTIES VERSION ${UHTTPD_VERSION_MAJOR}.${UHTTPD_VERSION_MINOR}.${UHTTPD_VERSION_PATCH}) target_link_libraries(uhttpd ${EXTRA_LIBS}) install( TARGETS uhttpd LIBRARY DESTINATION lib ) endif() if(BUILD_STATIC_LIBS) add_library(uhttpd_s STATIC ${SOURCE_FILES}) set_target_properties(uhttpd_s PROPERTIES OUTPUT_NAME uhttpd) target_link_libraries(uhttpd_s ${EXTRA_LIBS}) install( TARGETS uhttpd_s ARCHIVE DESTINATION lib ) endif() # configure a header file to pass some of the CMake settings to the source code configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) install( FILES uhttpd.h log.h utils.h buffer/buffer.h http-parser/http_parser.h ${CMAKE_CURRENT_BINARY_DIR}/config.h DESTINATION include/uhttpd ) message(STATUS "UHTTPD_VERSION: ${UHTTPD_VERSION_MAJOR}.${UHTTPD_VERSION_MINOR}.${UHTTPD_VERSION_PATCH}") message(STATUS "UHTTPD_SSL_SUPPORT: ${SSL_NAME}")