Path: blob/trunk/third_party/cpp/civetweb/CMakeLists.txt
2868 views
# The C API library1set( LIB_TYPE "STATIC" )2if (BUILD_SHARED_LIBS)3set( LIB_TYPE "SHARED" )4endif()5add_library(civetweb-c-library ${LIB_TYPE} civetweb.c)6set_target_properties(civetweb-c-library PROPERTIES7OUTPUT_NAME "civetweb"8VERSION ${CIVETWEB_VERSION}9SOVERSION ${CIVETWEB_VERSION}10)11if (BUILD_SHARED_LIBS)12target_compile_definitions(civetweb-c-library PRIVATE CIVETWEB_DLL_EXPORTS)13endif()14target_include_directories(15civetweb-c-library PUBLIC16${PROJECT_SOURCE_DIR}/include)17install(18TARGETS civetweb-c-library19ARCHIVE DESTINATION lib20LIBRARY DESTINATION lib21RUNTIME DESTINATION bin22COMPONENT civetweb-c-library)23install(FILES24${PROJECT_SOURCE_DIR}/include/civetweb.h25DESTINATION include26COMPONENT civetweb-c-library)2728# Need Windows sockets if available29find_package(WinSock)30if (WINSOCK_FOUND)31target_link_libraries(civetweb-c-library WINSOCK::WINSOCK)32endif()3334# We need threading35find_package(Threads)36target_link_libraries(civetweb-c-library ${CMAKE_THREAD_LIBS_INIT})3738# Need the realtime library if we're using timers39find_package(LibRt)40if (CIVETWEB_ENABLE_WEBSOCKETS AND CIVETWEB_ENABLE_LUA AND LIBRT_FOUND)41target_link_libraries(civetweb-c-library LIBRT::LIBRT)42endif()4344# We need to link OpenSSL if not dynamically loading45if (CIVETWEB_ENABLE_SSL)46if (CIVETWEB_ENABLE_SSL_DYNAMIC_LOADING)47find_package(LibDl)48if (LIBDL_FOUND)49target_link_libraries(civetweb-c-library -ldl)50endif()51else()52find_package(OpenSSL)53include_directories(${OPENSSL_INCLUDE_DIR})54message(STATUS "OpenSSL include directory: ${OPENSSL_INCLUDE_DIR}")55target_link_libraries(civetweb-c-library ${OPENSSL_LIBRARIES})56endif()57endif()5859# If Lua support is needed we build some extra Lua libraries60if (CIVETWEB_ENABLE_LUA)61include(ExternalProject)6263# Determine if we should print to the output64if (CIVETWEB_ENABLE_THIRD_PARTY_OUTPUT)65set(THIRD_PARTY_LOGGING 0)66else()67set(THIRD_PARTY_LOGGING 1)68endif()6970# If Lua is static we must build it from source71if (NOT CIVETWEB_ENABLE_LUA_SHARED)72if (LINUX)73set(LUA_MAKE_TARGET linux)74elseif(DARWIN)75set(LUA_MAKE_TARGET macosx)76elseif(FREEBSD)77set(LUA_MAKE_TARGET freebsd)78elseif(WINDOWS)79set(LUA_MAKE_TARGET mingw)80elseif(UNIX)81set(LUA_MAKE_TARGET posix)82else()83set(LUA_MAKE_TARGET generic)84endif()85set(LUA_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM};${LUA_MAKE_TARGET}")86if (BUILD_SHARED_LIBS)87set(LUA_BUILD_COMMAND "${LUA_BUILD_COMMAND};MYCFLAGS=-fPIC")88endif()89ExternalProject_Add(lua90URL "http://www.lua.org/ftp/lua-${CIVETWEB_LUA_VERSION}.tar.gz"91URL_MD5 ${CIVETWEB_LUA_MD5_HASH}92PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"93CONFIGURE_COMMAND ""94BUILD_COMMAND ${LUA_BUILD_COMMAND}95BUILD_IN_SOURCE 196INSTALL_COMMAND make install "INSTALL_TOP=<INSTALL_DIR>"97LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}98LOG_UPDATE ${THIRD_PARTY_LOGGING}99LOG_CONFIGURE ${THIRD_PARTY_LOGGING}100LOG_BUILD ${THIRD_PARTY_LOGGING}101LOG_TEST ${THIRD_PARTY_LOGGING}102LOG_INSTALL ${THIRD_PARTY_LOGGING})103ExternalProject_Get_Property(lua INSTALL_DIR)104set(LUA_INSTALL_DIR ${INSTALL_DIR})105unset(INSTALL_DIR)106link_directories("${LUA_INSTALL_DIR}/lib")107include_directories("${LUA_INSTALL_DIR}/include")108set(LUA_LIBRARIES "${LUA_INSTALL_DIR}/lib/liblua.a")109add_dependencies(civetweb-c-library lua)110else()111find_package(Lua)112endif()113114# Lua Filesystem Support115string(REPLACE "." "_" LUA_FILESYSTEM_VERSION_UNDERSCORE ${CIVETWEB_LUA_FILESYSTEM_VERSION})116ExternalProject_Add(luafilesystem117URL "https://github.com/keplerproject/luafilesystem/archive/v_${LUA_FILESYSTEM_VERSION_UNDERSCORE}.tar.gz"118URL_MD5 ${CIVETWEB_LUA_FILESYSTEM_MD5_HASH}119PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"120PATCH_COMMAND ${CMAKE_COMMAND} -E copy121"${CMAKE_CURRENT_SOURCE_DIR}/cmake/luafilesystem/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt122CMAKE_ARGS123"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"124"-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"125LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}126LOG_UPDATE ${THIRD_PARTY_LOGGING}127LOG_CONFIGURE ${THIRD_PARTY_LOGGING}128LOG_BUILD ${THIRD_PARTY_LOGGING}129LOG_TEST ${THIRD_PARTY_LOGGING}130LOG_INSTALL ${THIRD_PARTY_LOGGING})131ExternalProject_Get_Property(luafilesystem INSTALL_DIR)132set(LUA_FILESYSTEM_INSTALL_DIR ${INSTALL_DIR})133unset(INSTALL_DIR)134link_directories("${LUA_FILESYSTEM_INSTALL_DIR}/lib")135include_directories("${LUA_FILESYSTEM_INSTALL_DIR}/include")136set(LUA_LIBRARIES "${LUA_LIBRARIES};${LUA_FILESYSTEM_INSTALL_DIR}/lib/libluafilesystem.a")137add_dependencies(civetweb-c-library luafilesystem)138139# Lua SQLite Support140if (${CIVETWEB_LUA_SQLITE_VERSION} VERSION_EQUAL "0.9.3")141set(LUA_SQLITE_FILENAME lsqlite3_fsl09w.zip)142elseif (${CIVETWEB_LUA_SQLITE_VERSION} VERSION_EQUAL "0.9.2")143set(LUA_SQLITE_FILENAME lsqlite3_fsl09v.zip)144elseif (${CIVETWEB_LUA_SQLITE_VERSION} VERSION_EQUAL "0.9.1")145set(LUA_SQLITE_FILENAME lsqlite3_fsl09t.zip)146else()147message(FATAL_ERROR "The Lua SQLite archive filename is unknown for version ${CIVETWEB_LUA_SQLITE_VERSION}")148endif()149ExternalProject_Add(luasqlite150URL "http://lua.sqlite.org/index.cgi/zip/${LUA_SQLITE_FILENAME}"151URL_MD5 ${CIVETWEB_LUA_SQLITE_MD5_HASH}152PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"153PATCH_COMMAND ${CMAKE_COMMAND} -E copy154"${CMAKE_CURRENT_SOURCE_DIR}/cmake/luasqlite/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt155CMAKE_ARGS156"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"157"-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"158LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}159LOG_UPDATE ${THIRD_PARTY_LOGGING}160LOG_CONFIGURE ${THIRD_PARTY_LOGGING}161LOG_BUILD ${THIRD_PARTY_LOGGING}162LOG_TEST ${THIRD_PARTY_LOGGING}163LOG_INSTALL ${THIRD_PARTY_LOGGING})164ExternalProject_Get_Property(luasqlite INSTALL_DIR)165set(LUA_SQLITE_INSTALL_DIR ${INSTALL_DIR})166unset(INSTALL_DIR)167link_directories("${LUA_SQLITE_INSTALL_DIR}/lib")168set(LUA_LIBRARIES "${LUA_LIBRARIES};${LUA_SQLITE_INSTALL_DIR}/lib/libluasqlite.a")169add_dependencies(civetweb-c-library luasqlite)170171# Lua XML Support172if (${CIVETWEB_LUA_XML_VERSION} VERSION_EQUAL "1.8.0")173set(LUA_XML_FILENAME LuaXML_130610.zip)174elseif (${CIVETWEB_LUA_XML_VERSION} VERSION_EQUAL "1.7.4")175set(LUA_XML_FILENAME LuaXML_101012.zip)176else()177message(FATAL_ERROR "The Lua XML archive filename is unknown for version ${CIVETWEB_LUA_XML_VERSION}")178endif()179ExternalProject_Add(luaxml180# Old:181# URL "http://viremo.eludi.net/LuaXML/${LUA_XML_FILENAME}"182# URL_MD5 ${CIVETWEB_LUA_XML_MD5_HASH}183# PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"184#185# TODO: find current sourde186# viremo.eludi.net does no longer exist187# An extended version is available at https://github.com/n1tehawk/LuaXML188# but the last commit there was in 2015189#190URL "https://github.com/n1tehawk/LuaXML/archive/v1.8.0.zip"191PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"192#193# TODO: fix this patch command (needs someone with deeper CMake know how)194PATCH_COMMAND ${CMAKE_COMMAND} -E copy195"${CMAKE_CURRENT_SOURCE_DIR}/cmake/luaxml/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt196CMAKE_ARGS197"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"198"-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"199LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}200LOG_UPDATE ${THIRD_PARTY_LOGGING}201LOG_CONFIGURE ${THIRD_PARTY_LOGGING}202LOG_BUILD ${THIRD_PARTY_LOGGING}203LOG_TEST ${THIRD_PARTY_LOGGING}204LOG_INSTALL ${THIRD_PARTY_LOGGING})205ExternalProject_Get_Property(luaxml INSTALL_DIR)206set(LUA_XML_INSTALL_DIR ${INSTALL_DIR})207unset(INSTALL_DIR)208link_directories("${LUA_XML_INSTALL_DIR}/lib")209set(LUA_LIBRARIES "${LUA_LIBRARIES};${LUA_XML_INSTALL_DIR}/lib/libluaxml.a")210add_dependencies(civetweb-c-library luaxml)211212# SQLite Support213string (REGEX MATCHALL "[0-9]+" SQLITE_VERSION_MATCHES ${CIVETWEB_SQLITE_VERSION})214list(GET SQLITE_VERSION_MATCHES 0 SQLITE_VERSION_MAJOR)215list(GET SQLITE_VERSION_MATCHES 1 SQLITE_VERSION_MINOR)216list(GET SQLITE_VERSION_MATCHES 2 SQLITE_VERSION_PATCH)217set(SQLITE_FILE_VERSION ${SQLITE_VERSION_MAJOR}0${SQLITE_VERSION_MINOR}0${SQLITE_VERSION_PATCH}00)218ExternalProject_Add(sqlite219URL "http://www.sqlite.org/2015/sqlite-amalgamation-${SQLITE_FILE_VERSION}.zip"220URL_MD5 ${CIVETWEB_SQLITE_MD5_HASH}221PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"222PATCH_COMMAND ${CMAKE_COMMAND} -E copy223"${CMAKE_CURRENT_SOURCE_DIR}/cmake/sqlite/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt224CMAKE_ARGS225"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"226"-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"227LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}228LOG_UPDATE ${THIRD_PARTY_LOGGING}229LOG_CONFIGURE ${THIRD_PARTY_LOGGING}230LOG_BUILD ${THIRD_PARTY_LOGGING}231LOG_TEST ${THIRD_PARTY_LOGGING}232LOG_INSTALL ${THIRD_PARTY_LOGGING})233ExternalProject_Get_Property(sqlite INSTALL_DIR)234set(SQLITE_INSTALL_DIR ${INSTALL_DIR})235unset(INSTALL_DIR)236link_directories("${SQLITE_INSTALL_DIR}/lib")237include_directories("${SQLITE_INSTALL_DIR}/include")238set(LUA_LIBRARIES "${LUA_LIBRARIES};${SQLITE_INSTALL_DIR}/lib/libsqlite.a")239add_dependencies(civetweb-c-library sqlite)240241# Link all the Lua libraries242target_link_libraries(civetweb-c-library ${LUA_LIBRARIES})243endif()244245# The web server executable246if (CIVETWEB_ENABLE_SERVER_EXECUTABLE)247add_executable(civetweb-c-executable main.c)248set_target_properties(civetweb-c-executable PROPERTIES249OUTPUT_NAME "civetweb"250)251if (CIVETWEB_INSTALL_EXECUTABLE)252install(253TARGETS civetweb-c-executable254ARCHIVE DESTINATION lib255LIBRARY DESTINATION lib256RUNTIME DESTINATION bin257COMPONENT server)258endif()259if (BUILD_SHARED_LIBS)260target_compile_definitions(civetweb-c-executable PRIVATE CIVETWEB_DLL_IMPORTS)261endif()262target_include_directories(263civetweb-c-executable PUBLIC264${PROJECT_SOURCE_DIR}/include)265target_link_libraries(civetweb-c-executable civetweb-c-library)266if (LIBRT_FOUND)267target_link_libraries(civetweb-c-executable LIBRT::LIBRT)268endif()269endif()270271if (CIVETWEB_ENABLE_LUA)272add_library(lua-library third_party/lfs.c third_party/lsqlite3.c third_party/LuaXML_lib.c third_party/sqlite3.c)273set_target_properties(lua-library PROPERTIES274OUTPUT_NAME "lua-library"275VERSION ${CIVETWEB_VERSION}276SOVERSION ${CIVETWEB_VERSION}277)278target_include_directories(279lua-library PUBLIC280${PROJECT_SOURCE_DIR}/src/third_party/lua-5.2.4)281install(282TARGETS lua-library283ARCHIVE DESTINATION lib284LIBRARY DESTINATION lib285RUNTIME DESTINATION bin286COMPONENT lua-library)287endif()288289# The C++ API library290if (CIVETWEB_ENABLE_CXX)291add_library(civetweb-cpp ${LIB_TYPE} CivetServer.cpp)292set_target_properties(civetweb-cpp PROPERTIES293OUTPUT_NAME "civetweb-cpp"294VERSION ${CIVETWEB_VERSION}295SOVERSION ${CIVETWEB_VERSION}296)297if (BUILD_SHARED_LIBS)298target_compile_definitions(civetweb-cpp PRIVATE CIVETWEB_DLL_EXPORTS)299endif()300target_include_directories(301civetweb-cpp PUBLIC302${PROJECT_SOURCE_DIR}/include)303install(304TARGETS civetweb-cpp305ARCHIVE DESTINATION lib306LIBRARY DESTINATION lib307RUNTIME DESTINATION bin308COMPONENT civetweb-cpp)309install(FILES310${PROJECT_SOURCE_DIR}/include/CivetServer.h311DESTINATION include312COMPONENT civetweb-cpp)313endif()314315316