From 4d0f435e0b96140f7b74239bbe2f76d5f7d782b7 Mon Sep 17 00:00:00 2001 From: Fabrice Fontaine Date: Mon, 6 Apr 2020 19:01:30 +0200 Subject: [PATCH] fix static build Add BUILD_SHARED_LIBS and BUILD_STATIC_LIBS to allow the user to build a static only version Signed-off-by: Fabrice Fontaine --- example/CMakeLists.txt | 7 ++++++- src/CMakeLists.txt | 37 +++++++++++++++++++++++++------------ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 14e12d3..cb61a83 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,4 +1,9 @@ include_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/buffer ${CMAKE_BINARY_DIR}/src ${LIBEV_INCLUDE_DIR}) add_executable(example example.c) -target_link_libraries(example uhttpd ${LIBEV_LIBRARY}) + +if(BUILD_SHARED_LIBS) + target_link_libraries(example uhttpd ${LIBEV_LIBRARY}) +else() + target_link_libraries(example uhttpd_s ${LIBEV_LIBRARY}) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e60be39..6bd8c21 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,6 +21,13 @@ endif() set(SOURCE_FILES uhttpd.c log.c connection.c buffer/buffer.c http-parser/http_parser.c ssl.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) @@ -96,13 +103,25 @@ else() endif() endif() -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}) +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() -add_library(uhttpd_s STATIC ${SOURCE_FILES}) -set_target_properties(uhttpd_s PROPERTIES OUTPUT_NAME uhttpd) -target_link_libraries(uhttpd_s ${EXTRA_LIBS}) +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) @@ -123,12 +142,6 @@ install( include/uhttpd ) -install( - TARGETS uhttpd uhttpd_s - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib -) - message(STATUS "UHTTPD_VERSION: ${UHTTPD_VERSION_MAJOR}.${UHTTPD_VERSION_MINOR}.${UHTTPD_VERSION_PATCH}") message(STATUS "UHTTPD_SSL_SUPPORT: ${SSL_NAME}")