diff --git a/.github/workflows/ci-ubuntu.yml b/.github/workflows/ci-ubuntu.yml index 9187157c1..8ee8caf42 100644 --- a/.github/workflows/ci-ubuntu.yml +++ b/.github/workflows/ci-ubuntu.yml @@ -175,6 +175,6 @@ jobs: - name: Build ffead-cpp within docker run: | cd docker/os-based - docker build -f DockerFile-Alpine-x64-ffead-cpp . - docker build -f DockerFile-Alpine-x64-ffead-cpp_autoconf . + docker build -f DockerFile-Ubuntu-x64-ffead-cpp . + docker build -f DockerFile-Ubuntu-x64-ffead-cpp_autoconf . diff --git a/CMakeLists.txt b/CMakeLists.txt index a18a3d948..9d5dbb68f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -420,7 +420,10 @@ if(MOD_SDORM_SQL) if(NOT HAVE_UUIDINC) CHECK_INCLUDE_FILE("ossp/uuid.h" HAVE_OSSPUUIDINC) if(NOT HAVE_OSSPUUIDINC) - message(FATAL_ERROR "uuid includes not found") + CHECK_INCLUDE_FILE("uuid.h" HAVE_UUIDINC) + if(NOT HAVE_UUIDINC) + message(FATAL_ERROR "uuid includes not found") + endif() endif() endif() endif() @@ -471,12 +474,15 @@ if(MOD_SDORM_MONGO) endif() else() CHECK_INCLUDE_FILE("uuid/uuid.h" HAVE_UUIDINC) - if(NOT HAVE_UUIDINC) - CHECK_INCLUDE_FILE("ossp/uuid.h" HAVE_OSSPUUIDINC) - if(NOT HAVE_OSSPUUIDINC) - message(FATAL_ERROR "uuid includes not found") - endif() - endif() + if(NOT HAVE_UUIDINC) + CHECK_INCLUDE_FILE("ossp/uuid.h" HAVE_OSSPUUIDINC) + if(NOT HAVE_OSSPUUIDINC) + CHECK_INCLUDE_FILE("uuid.h" HAVE_UUIDINC) + if(NOT HAVE_UUIDINC) + message(FATAL_ERROR "uuid includes not found") + endif() + endif() + endif() endif() if(CMAKE_INC_PATH) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_INC_PATH}/include/libmongoc-1.0 -I${CMAKE_INC_PATH}/include/libbson-1.0") diff --git a/Makefile.am b/Makefile.am index fe2fe9269..efe171e8d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -280,7 +280,8 @@ endif hc=`ls $${webdir}/include/*.h 2>/dev/null|wc -l`; \ sc=`ls $${webdir}/src/*.cpp 2>/dev/null|wc -l`; \ if [ $$hc != 0 ] && [ $$sc != 0 ] && [ -f "$${webdir}/src/autotools/Makefile" ]; then \ - weblibname=`echo "$${wdir}" | tr '-' '_'`; \ + #weblibname=`echo "$${wdir}" | tr '-' '_'`; \ + weblibname=`echo "$${wdir}" cd $${webdir}/src/autotools && make clean && make; \ cd -; \ cp -f $${webdir}/src/autotools/.libs/*$${weblibname}* ${prefix}/lib; \ diff --git a/configure.ac b/configure.ac index c7323575f..242c5c3be 100644 --- a/configure.ac +++ b/configure.ac @@ -1071,7 +1071,9 @@ if test "x$mod_sdormsql" = "xyes"; then else AC_CHECK_HEADER([uuid/uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid uuid headers])], [ - AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [libuuid headers])],[AC_MSG_ERROR([ossp uuid.h header not found])]) + AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [libuuid headers])],[ + AC_CHECK_HEADER([uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid headers])],[AC_MSG_ERROR([ossp uuid.h header not found])]) + ]) ]) fi AC_CHECK_HEADER([sql.h],,[AC_MSG_ERROR([ODBC sql.h header not found])]) @@ -1084,7 +1086,9 @@ if test "x$mod_sdormmongo" = "xyes"; then else AC_CHECK_HEADER([uuid/uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid uuid headers])], [ - AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [libuuid headers])],[AC_MSG_ERROR([ossp uuid.h header not found])]) + AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [libuuid headers])],[ + AC_CHECK_HEADER([uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid headers])],[AC_MSG_ERROR([ossp uuid.h header not found])]) + ]) ]) fi AC_CHECK_HEADER([mongoc.h],,[AC_MSG_ERROR([mongodb mongoc.h header not found])]) diff --git a/docker/os-based/DockerFile-Ubuntu-x64-ffead-cpp-meson b/docker/os-based/DockerFile-Ubuntu-x64-ffead-cpp-meson index 29179e6ce..21d01cffc 100644 --- a/docker/os-based/DockerFile-Ubuntu-x64-ffead-cpp-meson +++ b/docker/os-based/DockerFile-Ubuntu-x64-ffead-cpp-meson @@ -5,7 +5,6 @@ RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selectio RUN apt update -yqq && apt install -yqq gcc g++ software-properties-common cmake unzip libpcre3-dev zlib1g-dev libpq-dev \ libssl-dev uuid-dev odbc-postgresql unixodbc unixodbc-dev libcurl4-openssl-dev libmemcached-dev wget netcat \ python3 python3-pip python3-setuptools python3-wheel ninja-build && rm -rf /var/lib/apt/lists/* -RUN wget https://cdn.jsdelivr.net/gh/xmake-io/xmake@master/scripts/get.sh -O - | bash RUN pip3 install meson #Install libcuckoo headers diff --git a/docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-5.0-forprofile b/docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-forprofile similarity index 100% rename from docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-5.0-forprofile rename to docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-forprofile diff --git a/docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-5.0-fortest b/docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-fortest similarity index 100% rename from docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-5.0-fortest rename to docker/test/DockerFile-UbuntuBionic-x64-ffead-cpp-fortest diff --git a/meson.build b/meson.build index 3cfd7b2b7..24f3a9aad 100644 --- a/meson.build +++ b/meson.build @@ -31,6 +31,8 @@ if not cc.has_header('uuid/uuid.h') and cc.has_header('ossp/uuid.h') error('libuuid not found') endif conf_data.set('HAVE_OSSPUUIDINC', 1) +elif cc.has_header('uuid.h') + conf_data.set('HAVE_UUIDINC', 1) endif conf_data.set('HAVE_UUIDLIB', 1) diff --git a/resources/ffead-gen/CMakeLists.txt.template.top b/resources/ffead-gen/CMakeLists.txt.template.top index 72bb8fc3a..95b07b759 100644 --- a/resources/ffead-gen/CMakeLists.txt.template.top +++ b/resources/ffead-gen/CMakeLists.txt.template.top @@ -2,6 +2,7 @@ cmake_minimum_required (VERSION 3.8.2) project (ffead-cpp-6.0) include(CheckIncludeFile) include(CheckIncludeFileCXX) +include(CheckSymbolExists) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_SKIP_BUILD_RPATH true) @@ -19,34 +20,90 @@ option(MOD_SER_BIN "Enable Binary Serialization module" OFF) option(MOD_JOBS "Enable Jobs module" ON) option(MOD_APACHE "Enable Apache module" OFF) option(MOD_NGINX "Enable Nginx module" OFF) +option(SRV_ALL "Build All inbuilt HTTP Server Engines" OFF) +option(SRV_EMB "Embedded Http Server Engine" OFF) +option(SRV_CINATRA "Cinatra Http Server Engine" OFF) +option(SRV_LITHIUM "Lithium Http Server Engine" OFF) +option(SRV_DROGON "Drogon Http Server Engine" OFF) +option(SRV_NGHTTP2 "Nghttp2 Http Server Engine" OFF) +option(SRV_MONGOLS "Mongols Http Server Engine" OFF) +option(SRV_UVCPP "Uv-Cpp Http Server Engine" OFF) +option(SRV_CPPSRV "CppServer Http Server Engine" OFF) +option(BUILD_SHARED_LIBS "Build with shared libraries" ON) + +option(WITH_SELECT "Force SELECT support" OFF) +option(WITH_POLL "Force POLL support" OFF) +option(WITH_DEVPOLL "Force DEVPOLL support" OFF) +option(WITH_IOURING "Force IOURING support" OFF) + +#set(BUILD_STATIC_LIBS OFF) +#set(BUILD_SHARED_LIBS ON) +set(LIB_EXT "${CMAKE_SHARED_LIBRARY_SUFFIX}") +if(NOT BUILD_SHARED_LIBS) + set(BUILD_STATIC_LIBS ON) + set(LIB_EXT "${CMAKE_STATIC_LIBRARY_SUFFIX}") + #set(LNK_BOP "-Wl,--whole-archive") + #set(LNK_AOP "-Wl,--no-whole-archive") +else() + set(BUILD_STATIC_LIBS OFF) + set(LIB_EXT "${CMAKE_SHARED_LIBRARY_SUFFIX}") +endif() + +if(NOT CINATRA_INCLUDES) + set(CINATRA_INCLUDES "/cinatra/include") +endif() +if(NOT SSL_INC_DIR) + set(SSL_INC_DIR "/usr/local/opt/openssl/include") +endif() +if(NOT SSL_LIB) + set(SSL_LIB "/usr/local/opt/openssl/lib/libssl.dylib") +endif() +if(NOT CRYPTO_LIB) + set(CRYPTO_LIB "/usr/local/opt/openssl/lib/libcrypto.dylib") +endif() set(CMAKE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src) -set(CMAKE_VERBOSE_MAKEFILE on) +set(CMAKE_VERBOSE_MAKEFILE off) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include -I/usr/include/libmongoc-1.0/ -I/usr/include/libbson-1.0/ -Wall -Wno-unknown-pragmas -Wno-delete-incomplete") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") +if(CMAKE_INC_PATH) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_INC_PATH}/include") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include") +endif() set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}) +if(EMSCRIPTEN) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_ZLIB=1 -s USE_PTHREADS=1") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s USE_ZLIB=1 -s USE_PTHREADS=1") +endif() + if(DEBUG) set(CMAKE_BUILD_TYPE DEBUG) set(TO_REPLACE_DEBUG "set(CMAKE_BUILD_TYPE DEBUG)") - if (APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") - endif() + #if (APPLE) + # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + #endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_DEBUG") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") endif(DEBUG) +if(CMAKE_INC_PATH) + include_directories("${CMAKE_INC_PATH}/include" "${CMAKE_SOURCE_DIR}/modules/common" "${CMAKE_SOURCE_DIR}/modules/cache" "${CMAKE_SOURCE_DIR}/modules/client-util") +else() + include_directories("/usr/local/include" "${CMAKE_SOURCE_DIR}/modules/common" "${CMAKE_SOURCE_DIR}/modules/cache" "${CMAKE_SOURCE_DIR}/modules/client-util") +endif() -include_directories("/usr/local/include" "${CMAKE_SOURCE_DIR}/modules/common" "${CMAKE_SOURCE_DIR}/modules/cache" "${CMAKE_SOURCE_DIR}/modules/client-util") include_directories("${CMAKE_SOURCE_DIR}/modules/http" "${CMAKE_SOURCE_DIR}/modules/http/http11" "${CMAKE_SOURCE_DIR}/modules/http/http20" "${CMAKE_SOURCE_DIR}/modules/ioc") include_directories("${CMAKE_SOURCE_DIR}/modules/jobs" "${CMAKE_SOURCE_DIR}/modules/reflection" "${CMAKE_SOURCE_DIR}/modules/sdorm" "${CMAKE_SOURCE_DIR}/modules/search") include_directories("${CMAKE_SOURCE_DIR}/modules/serialization" "${CMAKE_SOURCE_DIR}/modules/serialization/xml" "${CMAKE_SOURCE_DIR}/modules/serialization/json") include_directories("${CMAKE_SOURCE_DIR}/modules/server-util" "${CMAKE_SOURCE_DIR}/modules/ssl" "${CMAKE_SOURCE_DIR}/modules/threads") -include_directories("${CMAKE_SOURCE_DIR}/framework" "/usr/include/libmongoc-1.0/" "/usr/include/libbson-1.0/") -include_directories("/usr/local/include/libbson-1.0/" "/usr/local/include/libmongoc-1.0/") +if(CMAKE_INC_PATH) + include_directories("${CMAKE_SOURCE_DIR}/framework" "${CMAKE_INC_PATH}/include") +else() + include_directories("${CMAKE_SOURCE_DIR}/framework") +endif() find_package(Threads) @@ -57,6 +114,12 @@ STRING (REGEX MATCH ".*BSD.*" PROJECT_OS_BSD ${CMAKE_SYSTEM_NAME}) # Or Solaris. I'm seeing a trend, here STRING (REGEX MATCH ".*SunOS.*" PROJECT_OS_SOLARIS ${CMAKE_SYSTEM_NAME}) +if(NOT PROJECT_OS_SOLARIS) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") +endif() + +set(HAVE_WINREGEX "") + if (UNIX) IF (PROJECT_OS_BSD) set(OS_BSD 1) @@ -65,41 +128,177 @@ if (UNIX) set(OS_SOLARIS 1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthreads") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lsocket -lnsl") + ELSE() + set(OS_LINUX 1) ENDIF() - set(CMAKE_REQUIRED_INCLUDES "/usr/local/include" "/usr/include/libbson-1.0/" "/usr/include/libmongoc-1.0/" "/usr/local/include/libbson-1.0/" "/usr/local/include/libmongoc-1.0/") + if(CMAKE_INC_PATH) + set(CMAKE_REQUIRED_INCLUDES "${CMAKE_INC_PATH}/include") + else() + set(CMAKE_REQUIRED_INCLUDES "/usr/local/include") + endif() endif (UNIX) if (APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/opt/openssl/include") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/opt/openssl/lib") - set(CMAKE_REQUIRED_INCLUDES "/usr/local/include" "/usr/local/opt/openssl/include" "/usr/local/include/libbson-1.0/" "/usr/local/include/libmongoc-1.0/") - include_directories("/usr/local/opt/openssl/include" "/usr/local/include/libbson-1.0/" "/usr/local/include/libmongoc-1.0/") + set(OS_DARWIN 1) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${SSL_INC_DIR}") + set(CMAKE_REQUIRED_INCLUDES "${SSL_INC_DIR}" "/usr/local/include") + include_directories("${SSL_INC_DIR}" "/usr/local/include") endif (APPLE) if (MINGW) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/mingw/include -L/mingw/lib -D__USE_MINGW_ANSI_STDIO=1") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/mingw/lib") + set(OS_MINGW 1) + set(USE_WIN_IOCP 1) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__USE_MINGW_ANSI_STDIO=1") + if(CMAKE_INC_PATH) + set(CMAKE_REQUIRED_INCLUDES "${CMAKE_INC_PATH}/include") + else() + set(CMAKE_REQUIRED_INCLUDES "/usr/local/include") + endif() + include_directories("${CMAKE_SOURCE_DIR}/modules/wepoll") + set(HAVE_WSOCK32 wsock32) + set(HAVE_WS232 ws2_32) + if (WIN32 AND CMAKE_HOST_WIN32) + set(HAVE_WINREGEX regex) + endif() + CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLINC) + if(NOT HAVE_DLINC) + message(FATAL_ERROR "dlfcn includes not found") + endif() + FIND_LIBRARY(HAVE_DLLIB dl) + if(NOT HAVE_DLLIB) + message(FATAL_ERROR "dl library not found") + endif() endif (MINGW) +if(CYGWIN) + set(CYGWIN 1) + if(CMAKE_INC_PATH) + set(CMAKE_REQUIRED_INCLUDES "${CMAKE_INC_PATH}/include") + else() + set(CMAKE_REQUIRED_INCLUDES "/usr/local/include") + endif() +endif(CYGWIN) +if(ANDROID) + set(OS_ANDROID 1) + if(CMAKE_INC_PATH) + set(CMAKE_REQUIRED_INCLUDES "${CMAKE_INC_PATH}/include") + else() + set(CMAKE_REQUIRED_INCLUDES "/usr/local/include") + endif() + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +endif(ANDROID) + +if(CMAKE_INC_PATH) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_INC_PATH}/lib") +else() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") +endif() + +set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) +check_symbol_exists(accept4 "sys/socket.h" HAVE_ACCEPT4) + +include(CheckCSourceCompiles) +CHECK_C_SOURCE_COMPILES(" + #include + #include + #include + int main() { return TCP_QUICKACK; }" +HAVE_TCP_QUICKACK) + +include(CheckCSourceCompiles) +CHECK_C_SOURCE_COMPILES(" + #include + #include + #include + int main() { return TCP_DEFER_ACCEPT; }" +HAVE_TCP_DEFER_ACCEPT) + +include(CheckCSourceCompiles) +CHECK_C_SOURCE_COMPILES(" + #include + #include + #include + int main() { return TCP_FASTOPEN; }" +HAVE_TCP_FASTOPEN) + +if(EMSCRIPTEN) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) + set(HAVE_CRYPTOLIB "") + set(HAVE_CURLLIB "") + set(HAVE_SSLLIB "") + set(LIB_EXT "${CMAKE_STATIC_LIBRARY_SUFFIX}") +endif() + +CHECK_INCLUDE_FILE("regex.h" HAVE_REGEX) +if(NOT HAVE_REGEX) + CHECK_INCLUDE_FILE("onigposix.h" HAVE_ONIG_REGEX) + if(NOT HAVE_ONIG_REGEX) + message(FATAL_ERROR "oniguruma includes not found") + endif() + if(EMSCRIPTEN) + FIND_LIBRARY(HAVE_ONIG_REGEX_LIB NAMES onig HINTS "/usr/local/lib") + else() + FIND_LIBRARY(HAVE_ONIG_REGEX_LIB onig) + endif() + if(NOT HAVE_ONIG_REGEX_LIB) + message(FATAL_ERROR "oniguruma library not found") + endif() +endif() FIND_LIBRARY(HAVE_CURLLIB curl) -if(NOT HAVE_CURLLIB) - message(FATAL_ERROR "curl library not found") +#if(NOT HAVE_CURLLIB) +# message(FATAL_ERROR "curl library not found") +#endif() + +if(EMSCRIPTEN) + #FIND_LIBRARY(HAVE_ZLIB NAMES z HINTS "/usr/local/lib") + set(HAVE_ZLIB "") +else() + FIND_LIBRARY(HAVE_ZLIB z) endif() -FIND_LIBRARY(HAVE_ZLIB z) -if(NOT HAVE_ZLIB) - message(FATAL_ERROR "z library not found") + +if(NOT EMSCRIPTEN) + if(NOT HAVE_ZLIB) + message(FATAL_ERROR "z library not found") + endif() endif() CHECK_INCLUDE_FILE("openssl/ssl.h" HAVE_SSLINC) -if(NOT HAVE_SSLINC) - message(FATAL_ERROR "openssl includes not found") +if(HAVE_SSLINC) + include_directories("${CMAKE_SOURCE_DIR}/modules/client-util/ssl") endif() -FIND_LIBRARY(HAVE_SSLLIB ssl) -if(NOT HAVE_SSLLIB) - message(FATAL_ERROR "ssl library not found") -endif() -FIND_LIBRARY(HAVE_CRYPTOLIB crypto) -if(NOT HAVE_CRYPTOLIB) - message(FATAL_ERROR "cypto library not found") +#if(NOT HAVE_SSLINC) +# message(FATAL_ERROR "openssl includes not found") +#endif() +if (APPLE) + set(HAVE_SSLLIB ${SSL_LIB}) + set(HAVE_CRYPTOLIB ${CRYPTO_LIB}) +else() + if(NOT BUILD_SHARED_LIBS) + FIND_LIBRARY(HAVE_SSLLIB NAMES libssl.a ssl) + else() + FIND_LIBRARY(HAVE_SSLLIB ssl) + endif() +# if(NOT HAVE_SSLLIB) +# message(FATAL_ERROR "ssl library not found") +# endif() + if(NOT BUILD_SHARED_LIBS) + FIND_LIBRARY(HAVE_CRYPTOLIB NAMES libcrypto.a crypto) + if(NOT EMSCRIPTEN) + FIND_LIBRARY(HAVE_DLLIB NAMES libdl.a dl) + else() + set(HAVE_DLLIB "") + endif() + else() + FIND_LIBRARY(HAVE_CRYPTOLIB crypto) + if(NOT HAVE_DLLIB) + set(HAVE_DLLIB "") + endif() + endif() +# if(NOT HAVE_CRYPTOLIB) +# message(FATAL_ERROR "crypto library not found") +# endif() endif() + #FIND_LIBRARY(HAVE_TBBLIB tbb) #if(NOT HAVE_TBBLIB) # message(FATAL_ERROR "tbb library not found") @@ -108,21 +307,75 @@ endif() #if(NOT HAVE_TBBINC) # message(FATAL_ERROR "tbb includes not found") #endif() + CHECK_INCLUDE_FILE_CXX("libcuckoo/cuckoohash_map.hh" HAVE_CKOHMINC) if(NOT HAVE_CKOHMINC) message(FATAL_ERROR "libcuckoo includes not found") endif() -FIND_LIBRARY(HAVE_UUIDLIB uuid) + +if(EMSCRIPTEN) + FIND_LIBRARY(HAVE_UUIDLIB NAMES uuid HINTS "/usr/local/lib") +else() + FIND_LIBRARY(HAVE_UUIDLIB uuid) +endif() if(NOT HAVE_UUIDLIB) - message(FATAL_ERROR "uuid library not found") + FIND_LIBRARY(HAVE_UUIDLIB ossp-uuid) + if(NOT HAVE_UUIDLIB) + message(FATAL_ERROR "uuid library not found") + endif() endif() -CHECK_INCLUDE_FILE("sys/epoll.h" USE_EPOLL) -CHECK_INCLUDE_FILE("sys/event.h" USE_KQUEUE) -CHECK_INCLUDE_FILE("port.h" USE_EVPORT) -CHECK_INCLUDE_FILE("sys/devpoll.h" USE_DEVPOLL) -CHECK_INCLUDE_FILE("sys/poll.h" USE_POLL) -CHECK_INCLUDE_FILE("sys/select.h" USE_SELECT) +CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFOINC) + +if(WITH_IOURING) + execute_process(COMMAND uname -r OUTPUT_VARIABLE UNAME_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE) + message(-- " Kernel version: " ${UNAME_RESULT}) + string(REGEX MATCH "[0-9]+.[0-9]+" LINUX_KERNEL_VERSION ${UNAME_RESULT}) + + CHECK_INCLUDE_FILE("liburing.h" USE_IO_URING) + if (LINUX_KERNEL_VERSION LESS 5.6) + set(LIBURING_KERNEL 0) + message(FATAL_ERROR "Linux kernel version is < 5.6") + else() + CHECK_INCLUDE_FILE("liburing.h" USE_IO_URING) + FIND_LIBRARY(HAVE_LIBURING uring) + if(NOT HAVE_LIBURING) + message(FATAL_ERROR "uring library not found") + endif() + endif() +elseif(WITH_SELECT) + CHECK_INCLUDE_FILE("sys/select.h" USE_SELECT) + if(NOT USE_SELECT) + message(FATAL_ERROR "sys/select.h not found") + endif() +elseif(WITH_POLL) + CHECK_INCLUDE_FILE("sys/poll.h" USE_POLL) + if(NOT USE_POLL) + message(FATAL_ERROR "sys/poll.h not found") + endif() +elseif(USE_DEVPOLL) + CHECK_INCLUDE_FILE("sys/devpoll.h" USE_DEVPOLL) + if(NOT USE_DEVPOLL) + message(FATAL_ERROR "sys/devpoll.h not found") + endif() +elseif(NOT USE_WIN_IOCP) + CHECK_INCLUDE_FILE("sys/epoll.h" USE_EPOLL) + if(NOT USE_EPOLL) + CHECK_INCLUDE_FILE("sys/event.h" USE_KQUEUE) + if(NOT USE_KQUEUE) + CHECK_INCLUDE_FILE("port.h" USE_EVPORT) + if(NOT USE_EVPORT) + CHECK_INCLUDE_FILE("sys/devpoll.h" USE_DEVPOLL) + if(NOT USE_DEVPOLL) + CHECK_INCLUDE_FILE("sys/poll.h" USE_POLL) + if(NOT USE_POLL) + CHECK_INCLUDE_FILE("sys/select.h" USE_SELECT) + endif() + endif() + endif() + endif() + endif() +endif() if(MOD_MEMORY) set(INC_MEMORYCACHE 1) @@ -150,6 +403,7 @@ if(MOD_MEMCACHED) endif() include_directories("${CMAKE_SOURCE_DIR}/modules/cache/memcached") endif(MOD_MEMCACHED) + if(MOD_SDORM_SQL) set(INC_SDORM 1) set(INC_SDORM_SQL 1) @@ -164,7 +418,13 @@ if(MOD_SDORM_SQL) else() CHECK_INCLUDE_FILE("uuid/uuid.h" HAVE_UUIDINC) if(NOT HAVE_UUIDINC) - message(FATAL_ERROR "uuid includes not found") + CHECK_INCLUDE_FILE("ossp/uuid.h" HAVE_OSSPUUIDINC) + if(NOT HAVE_OSSPUUIDINC) + CHECK_INCLUDE_FILE("uuid.h" HAVE_UUIDINC) + if(NOT HAVE_UUIDINC) + message(FATAL_ERROR "uuid includes not found") + endif() + endif() endif() endif() CHECK_INCLUDE_FILE("sql.h" HAVE_SQLINC) @@ -175,12 +435,35 @@ if(MOD_SDORM_SQL) if(NOT HAVE_ODBCLIB) message(FATAL_ERROR "odbc library not found") endif() - include_directories("${CMAKE_SOURCE_DIR}/modules/sdorm/sql") + if(CMAKE_INC_PATH) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_INC_PATH}/include/postgresql -I${CMAKE_INC_PATH}/include/pgsql") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_INC_PATH}/include/postgresql -I${CMAKE_INC_PATH}/include/pgsql") + set(CMAKE_REQUIRED_INCLUDES "${CMAKE_INC_PATH}/include" "${CMAKE_INC_PATH}/include/postgresql" "${CMAKE_INC_PATH}/include/pgsql") + include_directories("${CMAKE_INC_PATH}/include/postgresql" "${CMAKE_INC_PATH}/include/pgsql") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/include/postgresql -I/usr/include/pgsql -I/usr/local/include/postgresql -I/usr/local/include/pgsql") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/include/postgresql -I/usr/include/pgsql -I/usr/local/include/postgresql -I/usr/local/include/pgsql") + set(CMAKE_REQUIRED_INCLUDES "/usr/local/include" "/usr/include/postgresql" "/usr/include/pgsql" "/usr/local/include/postgresql" "/usr/local/include/pgsql") + include_directories("/usr/include/postgresql" "/usr/include/pgsql" "/usr/local/include/postgresql" "/usr/local/include/pgsql") + endif() + CHECK_INCLUDE_FILE("libpq-fe.h" HAVE_PQHDR) + FIND_LIBRARY(HAVE_LIBPQ pq) + if(NOT HAVE_LIBPQ) + set(HAVE_LIBPQ "") + else() + if(POLICY CMP0075) + cmake_policy(SET CMP0075 NEW) + endif() + set(CMAKE_REQUIRED_LIBRARIES "pq") + check_symbol_exists(PQenterBatchMode "libpq-fe.h" HAVE_LIBPQ_BATCH) + endif() + include_directories("${CMAKE_SOURCE_DIR}/modules/sdorm/sql" "${CMAKE_SOURCE_DIR}/modules/sdorm/sql/libpq") +else() + set(HAVE_LIBPQ "") endif(MOD_SDORM_SQL) if(MOD_SDORM_MONGO) set(INC_SDORM 1) set(INC_SDORM_MONGO 1) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/include/libmongoc-1.0/ -I/usr/include/libbson-1.0 -I/usr/local/include/libmongoc-1.0/ -I/usr/local/include/libbson-1.0") IF (PROJECT_OS_BSD) CHECK_INCLUDE_FILE("uuid.h" HAVE_BSDUUIDINC) if(NOT HAVE_BSDUUIDINC) @@ -192,9 +475,26 @@ if(MOD_SDORM_MONGO) else() CHECK_INCLUDE_FILE("uuid/uuid.h" HAVE_UUIDINC) if(NOT HAVE_UUIDINC) - message(FATAL_ERROR "uuid includes not found") + CHECK_INCLUDE_FILE("ossp/uuid.h" HAVE_OSSPUUIDINC) + if(NOT HAVE_OSSPUUIDINC) + CHECK_INCLUDE_FILE("uuid.h" HAVE_UUIDINC) + if(NOT HAVE_UUIDINC) + message(FATAL_ERROR "uuid includes not found") + endif() + endif() endif() endif() + if(CMAKE_INC_PATH) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_INC_PATH}/include/libmongoc-1.0 -I${CMAKE_INC_PATH}/include/libbson-1.0") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_INC_PATH}/include/libmongoc-1.0 -I${CMAKE_INC_PATH}/include/libbson-1.0") + set(CMAKE_REQUIRED_INCLUDES "${CMAKE_INC_PATH}/include/libmongoc-1.0" "${CMAKE_INC_PATH}/include/libbson-1.0" ) + include_directories("${CMAKE_INC_PATH}/include/libmongoc-1.0" "${CMAKE_INC_PATH}/include/libbson-1.0") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/include/libmongoc-1.0 -I/usr/include/libbson-1.0 -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/include/libmongoc-1.0 -I/usr/include/libbson-1.0 -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0") + set(CMAKE_REQUIRED_INCLUDES "/usr/include/libmongoc-1.0" "/usr/include/libbson-1.0" "/usr/local/include/libmongoc-1.0" "/usr/local/include/libbson-1.0") + include_directories("/usr/include/libmongoc-1.0" "/usr/include/libbson-1.0" "/usr/local/include/libmongoc-1.0" "/usr/local/include/libbson-1.0") + endif() CHECK_INCLUDE_FILE("mongoc.h" HAVE_MONGOINC) if(NOT HAVE_MONGOINC) message(FATAL_ERROR "mongoc includes not found") @@ -211,7 +511,7 @@ if(MOD_SDORM_MONGO) if(NOT HAVE_BSONLIB) message(FATAL_ERROR "bson-1.0 library not found") endif() - include_directories("${CMAKE_SOURCE_DIR}/modules/sdorm/mongo") + include_directories("${CMAKE_SOURCE_DIR}/modules/sdorm/mongo" "${CMAKE_SOURCE_DIR}/modules/sdorm/mongo/raw") endif(MOD_SDORM_MONGO) if(MOD_SER_BIN) set(INC_BINSER 1) @@ -222,6 +522,13 @@ if(MOD_JOBS) include_directories("${CMAKE_SOURCE_DIR}/modules/jobs") endif(MOD_JOBS) +set(CMAKE_CXX_FLAGS_NGX "${CMAKE_CXX_FLAGS}") +if(DEBUG) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") +endif() + set(TO_REPLACE_CPPFLAGS ${CMAKE_CXX_FLAGS}) set(TO_REPLACE_LDFLAGS ${CMAKE_EXE_LINKER_FLAGS}) set(TO_CMAKE_SOURCE_DIR "\$\{CMAKE_SOURCE_DIR\}") @@ -233,6 +540,153 @@ set(TO_HAVE_MODULES "\$\{HAVE_FFEAD_MODULES_LIB\}") set(TO_HAVE_FRAMEWORK "\$\{HAVE_FFEAD_FRWRK_LIB\}") set(TO_INTER_DINTER_INCLUDES "\$\{INTER_DINTER_INCLUDES\}") +if(SRV_ALL) + CHECK_INCLUDE_FILE("cinatra.hpp" CINATRA_INC) + set(Boost_USE_STATIC_LIBS ${BUILD_STATIC_LIBS}) + set(Boost_USE_STATIC_RUNTIME ${BUILD_STATIC_LIBS}) + set(Boost_USE_MULTITHREADED ON) + find_package(Boost REQUIRED COMPONENTS system context thread) + include_directories(${Boost_INCLUDE_DIRS}) + find_package(PkgConfig REQUIRED) + pkg_check_modules(JSONCPP jsoncpp) + if(CMAKE_INC_PATH) + set(CMAKE_JSONCPP_INC "${CMAKE_INC_PATH}/include/jsoncpp") + else() + set(CMAKE_JSONCPP_INC "/usr/local/include/jsoncpp" "/usr/include/jsoncpp") + endif() + FIND_LIBRARY(HAVE_JSONCPP jsoncpp) + if(NOT HAVE_JSONCPP) + message(FATAL_ERROR "jsoncpp library not found") + endif() + CHECK_INCLUDE_FILE("drogon/drogon.h" DROGON_INC) + CHECK_INCLUDE_FILE("drogon/orm/DbClient.h" DROGON_ORM_INC) + CHECK_INCLUDE_FILE("trantor/net/EventLoop.h" TRANTOR_INC) + FIND_LIBRARY(HAVE_DROGONLIB drogon) + if(NOT HAVE_DROGONLIB) + message(FATAL_ERROR "drogon library not found") + endif() + FIND_LIBRARY(HAVE_TRANTORLIB trantor) + if(NOT HAVE_TRANTORLIB) + message(FATAL_ERROR "trantor library not found") + endif() + FIND_LIBRARY(HAVE_NGHTTP2ASIOLIB nghttp2_asio) + if(NOT HAVE_NGHTTP2ASIOLIB) + message(FATAL_ERROR "nghttp2_asio library not found") + endif() + CHECK_INCLUDE_FILE("mongols/http_server.hpp" MONGOLS_INC) + FIND_LIBRARY(HAVE_MONGOLSLIB mongols) + if(NOT HAVE_MONGOLSLIB) + message(FATAL_ERROR "mongols library not found") + endif() + CHECK_INCLUDE_FILE("uv/include/uv11.h" UVCPP_INC) + FIND_LIBRARY(HAVE_UVCPPLIB uv_cpp) + if(NOT HAVE_UVCPPLIB) + message(FATAL_ERROR "uv_cpp library not found") + endif() + CHECK_INCLUDE_FILE("server/http/http_server.h" CPPSRV_INC) + FIND_LIBRARY(HAVE_CPPSRV cppserver) + if(NOT HAVE_CPPSRV) + message(FATAL_ERROR "cppserver library not found") + endif() + FIND_LIBRARY(HAVE_CPPSRVASIO asio) + if(NOT HAVE_CPPSRVASIO) + message(FATAL_ERROR "asio library not found") + endif() + FIND_LIBRARY(HAVE_CPPSRVCPPCMN cppcommon) + if(NOT HAVE_CPPSRVCPPCMN) + message(FATAL_ERROR "cppcommon library not found") + endif() + FIND_LIBRARY(HAVE_CPPSRVFMT fmt) + if(NOT HAVE_CPPSRVFMT) + message(FATAL_ERROR "fmt library not found") + endif() +elseif(SRV_EMB) + set(SRV_EMB 1) +elseif(SRV_CINATRA) + set(SRV_CINATRA 1) + CHECK_INCLUDE_FILE("cinatra.hpp" CINATRA_INC) + set(Boost_USE_STATIC_LIBS ${BUILD_STATIC_LIBS}) + set(Boost_USE_STATIC_RUNTIME ${BUILD_STATIC_LIBS}) + set(Boost_USE_MULTITHREADED ON) + find_package(Boost REQUIRED COMPONENTS system) + include_directories(${Boost_INCLUDE_DIRS}) +elseif(SRV_LITHIUM) + set(SRV_LITHIUM 1) + set(Boost_USE_STATIC_LIBS ${BUILD_STATIC_LIBS}) + set(Boost_USE_STATIC_RUNTIME ${BUILD_STATIC_LIBS}) + set(Boost_USE_MULTITHREADED ON) + find_package(Boost REQUIRED COMPONENTS context) + include_directories(${Boost_INCLUDE_DIRS}) +elseif(SRV_DROGON) + set(SRV_DROGON 1) + find_package(PkgConfig REQUIRED) + pkg_check_modules(JSONCPP jsoncpp) + if(CMAKE_INC_PATH) + set(CMAKE_JSONCPP_INC "${CMAKE_INC_PATH}/include/jsoncpp") + else() + set(CMAKE_JSONCPP_INC "/usr/local/include/jsoncpp" "/usr/include/jsoncpp") + endif() + FIND_LIBRARY(HAVE_JSONCPP jsoncpp) + if(NOT HAVE_JSONCPP) + message(FATAL_ERROR "jsoncpp library not found") + endif() + CHECK_INCLUDE_FILE("drogon/drogon.h" DROGON_INC) + CHECK_INCLUDE_FILE("drogon/orm/DbClient.h" DROGON_ORM_INC) + CHECK_INCLUDE_FILE("trantor/net/EventLoop.h" TRANTOR_INC) + FIND_LIBRARY(HAVE_DROGONLIB drogon) + if(NOT HAVE_DROGONLIB) + message(FATAL_ERROR "drogon library not found") + endif() + FIND_LIBRARY(HAVE_TRANTORLIB trantor) + if(NOT HAVE_TRANTORLIB) + message(FATAL_ERROR "trantor library not found") + endif() +elseif(SRV_NGHTTP2) + set(SRV_NGHTTP2 1) + set(Boost_USE_STATIC_LIBS ${BUILD_STATIC_LIBS}) + set(Boost_USE_STATIC_RUNTIME ${BUILD_STATIC_LIBS}) + set(Boost_USE_MULTITHREADED ON) + find_package(Boost REQUIRED COMPONENTS thread system) + include_directories(${Boost_INCLUDE_DIRS}) + FIND_LIBRARY(HAVE_NGHTTP2ASIOLIB nghttp2_asio) + if(NOT HAVE_NGHTTP2ASIOLIB) + message(FATAL_ERROR "nghttp2_asio library not found") + endif() +elseif(SRV_MONGOLS) + set(SRV_MONGOLS 1) + CHECK_INCLUDE_FILE("mongols/http_server.hpp" MONGOLS_INC) + FIND_LIBRARY(HAVE_MONGOLSLIB mongols) + if(NOT HAVE_MONGOLSLIB) + message(FATAL_ERROR "mongols library not found") + endif() +elseif(SRV_UVCPP) + set(SRV_UVCPP 1) + CHECK_INCLUDE_FILE("uv/include/uv11.h" UVCPP_INC) + FIND_LIBRARY(HAVE_UVCPPLIB uv_cpp) + if(NOT HAVE_UVCPPLIB) + message(FATAL_ERROR "uv_cpp library not found") + endif() +elseif(SRV_CPPSRV) + set(SRV_CPPSRV 1) + CHECK_INCLUDE_FILE("server/http/http_server.h" CPPSRV_INC) + FIND_LIBRARY(HAVE_CPPSRV cppserver) + if(NOT HAVE_CPPSRV) + message(FATAL_ERROR "cppserver library not found") + endif() + FIND_LIBRARY(HAVE_CPPSRVASIO asio) + if(NOT HAVE_CPPSRVASIO) + message(FATAL_ERROR "asio library not found") + endif() + FIND_LIBRARY(HAVE_CPPSRVCPPCMN cppcommon) + if(NOT HAVE_CPPSRVCPPCMN) + message(FATAL_ERROR "cppcommon library not found") + endif() + FIND_LIBRARY(HAVE_CPPSRVFMT fmt) + if(NOT HAVE_CPPSRVFMT) + message(FATAL_ERROR "fmt library not found") + endif() +endif() + configure_file ( "${PROJECT_SOURCE_DIR}/src/modules/common/AppDefines.h.in.cm" "${PROJECT_SOURCE_DIR}/src/modules/common/AppDefines.h" @@ -250,20 +704,101 @@ add_subdirectory(${PROJECT_SOURCE_DIR}/tests) WEB_APPS if(MOD_APACHE) -add_subdirectory(${PROJECT_SOURCE_DIR}/modules/apache_mod_ffeadcpp) + add_subdirectory(${PROJECT_SOURCE_DIR}/modules/apache_mod_ffeadcpp) endif() if(MOD_NGINX) -add_subdirectory(${PROJECT_SOURCE_DIR}/modules/nginx_mod_ffeadcpp) + add_subdirectory(${PROJECT_SOURCE_DIR}/modules/nginx_mod_ffeadcpp) endif() -add_executable(ffead-cpp src/server/CHServer.cpp) -set_property(TARGET ffead-cpp PROPERTY POSITION_INDEPENDENT_CODE ON) -target_link_libraries(ffead-cpp ffead-modules ffead-framework ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +if(SRV_ALL) + add_executable(ffead-cpp src/server/embedded/CHServer.cpp) + set_property(TARGET ffead-cpp PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp ffead-modules ffead-framework ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) + + include_directories("${CINATRA_INCLUDES}") + add_executable(ffead-cpp-cinatra src/server/cinatra/CinatraServer.cpp) + find_package(Boost 1.65 REQUIRED COMPONENTS system) + set_property(TARGET ffead-cpp-cinatra PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-cinatra ffead-modules ffead-framework stdc++fs ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) + + add_executable(ffead-cpp-lithium src/server/lithium/LithiumServer.cpp) + set_property(TARGET ffead-cpp-lithium PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-lithium ffead-modules ffead-framework boost_context ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) + include_directories("${CMAKE_JSONCPP_INC}") + + add_executable(ffead-cpp-drogon src/server/drogon/DrogonServer.cpp) + set_property(TARGET ffead-cpp-drogon PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-drogon ffead-modules ffead-framework ${HAVE_DROGONLIB} ${HAVE_TRANTORLIB} ${HAVE_JSONCPP} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) + + add_executable(ffead-cpp-nghttp2 src/server/nghttp2/Nghttp2Server.cpp) + find_package(Boost 1.65 REQUIRED COMPONENTS system thread) + set_property(TARGET ffead-cpp-nghttp2 PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-nghttp2 ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_NGHTTP2ASIOLIB} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) + + add_executable(ffead-cpp-mongols src/server/mongols/MongolsServer.cpp) + set_property(TARGET ffead-cpp-mongols PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-mongols ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_MONGOLSLIB} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) + + add_executable(ffead-cpp-uvcpp src/server/uv-cpp/UvCppServer.cpp) + set_property(TARGET ffead-cpp-uvcpp PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-uvcpp ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_UVCPPLIB} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) + + add_executable(ffead-cpp-cppsrv src/server/cppserver/CppServerServer.cpp) + set_property(TARGET ffead-cpp-cppsrv PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-cppsrv ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_CPPSRV} ${HAVE_CPPSRVASIO} ${HAVE_CPPSRVCPPCMN} ${HAVE_CPPSRVFMT} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_EMB) + add_executable(ffead-cpp src/server/embedded/CHServer.cpp) + set_property(TARGET ffead-cpp PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp ffead-modules ffead-framework ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_CINATRA) + include_directories("${CINATRA_INCLUDES}") + add_executable(ffead-cpp src/server/cinatra/CinatraServer.cpp) + find_package(Boost 1.65 REQUIRED COMPONENTS system) + set_property(TARGET ffead-cpp PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp ffead-modules ffead-framework stdc++fs ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_LITHIUM) + add_executable(ffead-cpp src/server/lithium/LithiumServer.cpp) + set_property(TARGET ffead-cpp PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp ffead-modules ffead-framework boost_context ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_DROGON) + include_directories("${CMAKE_JSONCPP_INC}") + add_executable(ffead-cpp src/server/drogon/DrogonServer.cpp) + set_property(TARGET ffead-cpp PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp ffead-modules ffead-framework ${HAVE_DROGONLIB} ${HAVE_TRANTORLIB} ${HAVE_JSONCPP} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_NGHTTP2) + add_executable(ffead-cpp-nghttp2 src/server/nghttp2/Nghttp2Server.cpp) + find_package(Boost 1.65 REQUIRED COMPONENTS system thread) + set_property(TARGET ffead-cpp-nghttp2 PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-nghttp2 ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_NGHTTP2ASIOLIB} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_MONGOLS) + add_executable(ffead-cpp-mongols src/server/mongols/MongolsServer.cpp) + set_property(TARGET ffead-cpp-mongols PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-mongols ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_MONGOLSLIB} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_UVCPP) + add_executable(ffead-cpp-uvcpp src/server/uv-cpp/UvCppServer.cpp) + set_property(TARGET ffead-cpp-uvcpp PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-uvcpp ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_UVCPPLIB} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +elseif(SRV_CPPSRV) + add_executable(ffead-cpp-cppsrv src/server/cppserver/CppServerServer.cpp) + set_property(TARGET ffead-cpp-cppsrv PROPERTY POSITION_INDEPENDENT_CODE ON) + target_link_libraries(ffead-cpp-cppsrv ffead-modules ffead-framework ${Boost_LIBRARIES} ${HAVE_CPPSRV} ${HAVE_CPPSRVASIO} ${HAVE_CPPSRVCPPCMN} ${HAVE_CPPSRVFMT} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${HAVE_ONIG_REGEX_LIB} ${HAVE_UUIDLIB} ${HAVE_CURLLIB} ${HAVE_SSLLIB} ${HAVE_REDISLIB} ${HAVE_MEMCACHEDLIB} ${HAVE_MEMCACHEDUTILLIB} ${HAVE_ODBCLIB} ${HAVE_MONGOCLIB} ${HAVE_BSONLIB} ${HAVE_ZLIB} ${HAVE_CRYPTOLIB}) +endif() MESSAGE( STATUS "CMAKE_REQUIRED_INCLUDES: " ${CMAKE_REQUIRED_INCLUDES} ) MESSAGE( STATUS "CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS} ) MESSAGE( STATUS "CMAKE_EXE_LINKER_FLAGS: " ${CMAKE_EXE_LINKER_FLAGS} ) MESSAGE( STATUS "CMAKE_INSTALL_PREFIX: " ${CMAKE_INSTALL_PREFIX} ) +MESSAGE( STATUS "BUILD_SHARED_LIBS: " ${BUILD_SHARED_LIBS} ) +MESSAGE( STATUS "BUILD_STATIC_LIBS: " ${BUILD_STATIC_LIBS} ) +if(SRV_CINATRA) + MESSAGE( STATUS "CINATRA_INCLUDES: " ${CINATRA_INCLUDES} ) +elseif (SRV_ALL) + MESSAGE( STATUS "CINATRA_INCLUDES: " ${CINATRA_INCLUDES} ) +endif() +if (APPLE) + MESSAGE( STATUS "SSL_LIB: " ${SSL_LIB} ) + MESSAGE( STATUS "CRYPTO_LIB: " ${CRYPTO_LIB} ) +endif() install(CODE "execute_process(COMMAND rm -rf ${PROJECT_NAME}-bin)") install(DIRECTORY DESTINATION "${PROJECT_NAME}-bin") @@ -280,19 +815,138 @@ install(DIRECTORY ${PROJECT_SOURCE_DIR}/resources/ DESTINATION ${PROJECT_NAME}-b install(DIRECTORY ${PROJECT_SOURCE_DIR}/public/ DESTINATION ${PROJECT_NAME}-bin/public) install(DIRECTORY ${PROJECT_SOURCE_DIR}/rtdcf/ DESTINATION ${PROJECT_NAME}-bin/rtdcf) install(DIRECTORY ${PROJECT_SOURCE_DIR}/web/ DESTINATION ${PROJECT_NAME}-bin/web) +if(NOT MOD_SDORM_MONGO) + install(CODE "execute_process(COMMAND rm -rf ${PROJECT_NAME}-bin/web/te-benchmark-um-mgr)") +endif() +if(NOT MOD_SDORM_SQL) + install(CODE "execute_process(COMMAND rm -rf ${PROJECT_NAME}-bin/web/te-benchmark-um-pq)") + install(CODE "execute_process(COMMAND rm -rf ${PROJECT_NAME}-bin/web/te-benchmark-um-pq-async)") +endif() install(DIRECTORY ${PROJECT_SOURCE_DIR}/tests/ DESTINATION ${PROJECT_NAME}-bin/tests) -install(FILES ${PROJECT_SOURCE_DIR}/src/modules/libffead-modules${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib) -install(FILES ${PROJECT_SOURCE_DIR}/src/framework/libffead-framework${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib) -install(FILES ${PROJECT_SOURCE_DIR}/web/default/libdefault${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib) -install(FILES ${PROJECT_SOURCE_DIR}/web/flexApp/libflexApp${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib) -install(FILES ${PROJECT_SOURCE_DIR}/web/oauthApp/liboauthApp${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib) -install(FILES ${PROJECT_SOURCE_DIR}/web/markers/libmarkers${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib) -install(FILES ${PROJECT_SOURCE_DIR}/web/te-benchmark/libte_benchmark${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib) -install(FILES ${PROJECT_SOURCE_DIR}/ffead-cpp DESTINATION ${PROJECT_NAME}-bin/) +if(CYGWIN OR MINGW) + if(CYGWIN) + install(FILES ${PROJECT_BINARY_DIR}/src/modules/cygffead-modules${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/src/framework/cygffead-framework${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/default/cygdefault${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/flexApp/cygflexApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/oauthApp/cygoauthApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/markers/cygmarkers${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/peer-server/cygpeer-server${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark/cygte-benchmark${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um/cygte-benchmark-um${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/src/modules/libffead-modules${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/src/framework/libffead-framework${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/default/libdefault${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/flexApp/libflexApp${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/oauthApp/liboauthApp${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/markers/libmarkers${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/peer-server/libpeer-server${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark/libte-benchmark${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um/libte-benchmark-um${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + if(MOD_SDORM_MONGO) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-mgr/cygte-benchmark-um-mgr${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-mgr/libte-benchmark-um-mgr${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + if(MOD_SDORM_SQL) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq/cygte-benchmark-um-pq${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq-async/cygte-benchmark-um-pq-async${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq/libte-benchmark-um-pq${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq-async/libte-benchmark-um-pq-async${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + else() + install(FILES ${PROJECT_BINARY_DIR}/src/modules/libffead-modules${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/src/framework/libffead-framework${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/default/libdefault${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/flexApp/libflexApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/oauthApp/liboauthApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/markers/libmarkers${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/peer-server/libpeer-server${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark/libte-benchmark${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um/libte-benchmark-um${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + if(MOD_SDORM_MONGO) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-mgr/libte-benchmark-um-mgr${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + if(MOD_SDORM_SQL) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq/libte-benchmark-um-pq${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq-async/libte-benchmark-um-pq-async${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + install(FILES ${PROJECT_BINARY_DIR}/src/modules/libffead-modules${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/src/framework/libffead-framework${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/default/libdefault${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/flexApp/libflexApp${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/oauthApp/liboauthApp${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/markers/libmarkers${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/peer-server/libpeer-server${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark/libte-benchmark${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um/libte-benchmark-um${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + if(MOD_SDORM_MONGO) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-mgr/libte-benchmark-um-mgr${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + if(MOD_SDORM_SQL) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq/libte-benchmark-um-pq${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq-async/libte-benchmark-um-pq-async${LIB_EXT}.a DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + endif() + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp.exe DESTINATION ${PROJECT_NAME}-bin/) + if(NOT EMSCRIPTEN) + install(FILES ${PROJECT_BINARY_DIR}/tests/tests.exe DESTINATION ${PROJECT_NAME}-bin/tests/) + endif() +else() + if(NOT EMSCRIPTEN) + install(FILES ${PROJECT_BINARY_DIR}/tests/tests DESTINATION ${PROJECT_NAME}-bin/tests/) + endif() + install(FILES ${PROJECT_BINARY_DIR}/src/modules/libffead-modules${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/src/framework/libffead-framework${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/default/libdefault${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/flexApp/libflexApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/oauthApp/liboauthApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/markers/libmarkers${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/peer-server/libpeer-server${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark/libte-benchmark${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um/libte-benchmark-um${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + if(MOD_SDORM_MONGO) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-mgr/libte-benchmark-um-mgr${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + if(MOD_SDORM_SQL) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq/libte-benchmark-um-pq${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq-async/libte-benchmark-um-pq-async${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib) + endif() + if(SRV_ALL) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp DESTINATION ${PROJECT_NAME}-bin/) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-lithium DESTINATION ${PROJECT_NAME}-bin/) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-cinatra DESTINATION ${PROJECT_NAME}-bin/) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-drogon DESTINATION ${PROJECT_NAME}-bin/) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-nghttp2 DESTINATION ${PROJECT_NAME}-bin/) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-mongols DESTINATION ${PROJECT_NAME}-bin/) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-uvcpp DESTINATION ${PROJECT_NAME}-bin/) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-cppsrv DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_EMB) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_CINATRA) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-cinatra DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_LITHIUM) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-lithium DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_DROGON) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-drogon DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_NGHTTP2) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-nghttp2 DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_MONGOLS) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-mongols DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_UVCPP) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-uvcpp DESTINATION ${PROJECT_NAME}-bin/) + elseif(SRV_CPPSRV) + install(FILES ${PROJECT_BINARY_DIR}/ffead-cpp-cppsrv DESTINATION ${PROJECT_NAME}-bin/) + endif() +endif() install(FILES ${PROJECT_SOURCE_DIR}/script/server_valgrind.sh DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/server_calgrind.sh DESTINATION ${PROJECT_NAME}-bin/) install(FILES ${PROJECT_SOURCE_DIR}/script/server.sh DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/server_debug.sh DESTINATION ${PROJECT_NAME}-bin/) install(FILES ${PROJECT_SOURCE_DIR}/script/client.pem DESTINATION ${PROJECT_NAME}-bin/) -install(FILES ${PROJECT_SOURCE_DIR}/script/dh1024.pem DESTINATION ${PROJECT_NAME}-bin/) -install(FILES ${PROJECT_SOURCE_DIR}/script/root.pem DESTINATION ${PROJECT_NAME}-bin/) -install(FILES ${PROJECT_SOURCE_DIR}/script/server.pem DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/dparams.pem DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/rootCA.crt DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/rootCA.key DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/server.key DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/server.crt DESTINATION ${PROJECT_NAME}-bin/) +install(FILES ${PROJECT_SOURCE_DIR}/script/serverchain.pem DESTINATION ${PROJECT_NAME}-bin/) install(FILES ${PROJECT_SOURCE_DIR}/script/vhost-server.sh DESTINATION ${PROJECT_NAME}-bin/) diff --git a/resources/ffead-gen/configure.ac.orig b/resources/ffead-gen/configure.ac.orig index 2aefbd4b6..77e253a20 100644 --- a/resources/ffead-gen/configure.ac.orig +++ b/resources/ffead-gen/configure.ac.orig @@ -1069,9 +1069,11 @@ if test "x$mod_sdormsql" = "xyes"; then if test "x$os_flavor" = "xbsd"; then AC_CHECK_HEADER([uuid.h],[AC_DEFINE(HAVE_BSDUUIDINC, [1], [bsd uuid headers])],[AC_MSG_ERROR([uuid.h header not found])]) else - AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [oddp uuid headers])], + AC_CHECK_HEADER([uuid/uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid uuid headers])], [ - AC_CHECK_HEADER([uuid/uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid heades])],[AC_MSG_ERROR([uuid.h header not found])]) + AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [libuuid headers])],[ + AC_CHECK_HEADER([uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid headers])],[AC_MSG_ERROR([ossp uuid.h header not found])]) + ]) ]) fi AC_CHECK_HEADER([sql.h],,[AC_MSG_ERROR([ODBC sql.h header not found])]) @@ -1082,9 +1084,11 @@ if test "x$mod_sdormmongo" = "xyes"; then if test "x$os_flavor" = "xbsd"; then AC_CHECK_HEADER([uuid.h],[AC_DEFINE(HAVE_BSDUUIDINC, [1], [bsd uuid headers])],[AC_MSG_ERROR([uuid.h header not found])]) else - AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [oddp uuid headers])], + AC_CHECK_HEADER([uuid/uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid uuid headers])], [ - AC_CHECK_HEADER([uuid/uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid heades])],[AC_MSG_ERROR([uuid.h header not found])]) + AC_CHECK_HEADER([ossp/uuid.h],[AC_DEFINE(HAVE_OSSPUUIDINC, [1], [libuuid headers])],[ + AC_CHECK_HEADER([uuid.h],[AC_DEFINE(HAVE_UUIDINC, [1], [libuuid headers])],[AC_MSG_ERROR([ossp uuid.h header not found])]) + ]) ]) fi AC_CHECK_HEADER([mongoc.h],,[AC_MSG_ERROR([mongodb mongoc.h header not found])]) diff --git a/rtdcf/xmake.lua b/rtdcf/xmake.lua index 5f66eb421..59ca56b2f 100644 --- a/rtdcf/xmake.lua +++ b/rtdcf/xmake.lua @@ -29,7 +29,7 @@ function setup(target) else target:add({includedirs = p}) end - p = find_path("uuid.h", {"/usr/include/uuid", "/usr/local/include/uuid"}) + p = find_path("uuid.h", {"/usr/include/uuid", "/usr/local/include/uuid", "/usr/include", "/usr/local/include"}) if not p then p = find_path("uuid.h", {"/usr/include/ossp", "/usr/local/include/ossp"}) if not p then @@ -40,7 +40,7 @@ function setup(target) else target:add({includedirs = p}) end - p = find_path("libpq-fe.h", {"/usr/include/postgresql", "/usr/local/include/postgresql"}) + p = find_path("libpq-fe.h", {"/usr/include", "/usr/local/include", "/usr/include/postgresql", "/usr/local/include/postgresql"}) if not p then p = find_path("libpq-fe.h", {"/usr/include/pgsql", "/usr/local/include/pgsql"}) if not p then @@ -56,6 +56,16 @@ function setup(target) if l then target:add({links = "dl"}) end + l = find_package("uuid") + if not l then + l = find_package("ossp-uuid") + if not l then + raise('uuid library not found') + end + target:add({links = "ossp-uuid"}) + else + target:add({links = "uuid"}) + end target:add({linkdirs = "/usr/local/lib"}) target:add({linkdirs = "../lib"}) end diff --git a/web/peer-server/include/PeerServerController.h b/web/peer-server/include/PeerServerController.h index 7c6025cae..21b6a06bc 100644 --- a/web/peer-server/include/PeerServerController.h +++ b/web/peer-server/include/PeerServerController.h @@ -27,12 +27,15 @@ #include "JSONUtil.h" #include "Router.h" #include "CacheManager.h" -#ifdef HAVE_LIBUUID +#ifdef HAVE_UUIDINC #include #endif -#ifdef HAVE_BSDUUIDINC +#if defined(HAVE_BSDUUIDINC) #include #endif +#if defined(HAVE_OSSPUUIDINC) +#include +#endif #include "yuarel.h" #include #include "Timer.h" diff --git a/xmake.lua b/xmake.lua index 28db751d5..5f8414b78 100644 --- a/xmake.lua +++ b/xmake.lua @@ -206,17 +206,12 @@ option("UUID") set_default(true) set_description("Check whether uuid is present") on_check(function (option) - import("lib.detect.has_cfuncs") - local ok = has_cfuncs("uuid_generate", {includes = "uuid/uuid.h"}) - if not ok then + import("lib.detect.find_path") + local p = find_path("uuid.h", {"/usr/include", "/usr/local/include", "/usr/include/uuid", "/usr/local/include/uuid"}) + --import("lib.detect.has_cfuncs") + --local ok = has_cfuncs("uuid_generate", {includes = "uuid/uuid.h"}) + if not p then option:enable(false) - else - import("lib.detect.find_package") - local l = find_package("uuid") - if not l then - raise('uuid library not found') - end - option:add(l) end end) option_end() @@ -227,13 +222,11 @@ option("OSSP_UUID") set_description("Check whether ossd-uuid is present") after_check(function (option) if not option:dep("UUID"):enabled() then - import("lib.detect.find_package") - local l = find_package("ossp-uuid") - if not l then - option:enable(false) + import("lib.detect.find_path") + local p = find_path("uuid.h", {"/usr/include/ossp", "/usr/local/include/ossp"}) + if not p then + raise('uuid headers not found') end - else - option:enable(false) end end) option_end() @@ -260,7 +253,6 @@ option("MOD_SDORM_SQL") end) option_end() -local mongo_inc_path = "" option("MOD_SDORM_MONGO") add_deps("OSSP_UUID") set_default(false) @@ -534,18 +526,7 @@ function setIncludes(target) else target:add({includedirs = p}) end - p = find_path("uuid.h", {"/usr/include/uuid", "/usr/local/include/uuid"}) - if not p then - p = find_path("uuid.h", {"/usr/include/ossp", "/usr/local/include/ossp"}) - if not p then - raise('uuid headers not found') - else - target:add({includedirs = p}) - end - else - target:add({includedirs = p}) - end - p = find_path("libpq-fe.h", {"/usr/include/postgresql", "/usr/local/include/postgresql"}) + p = find_path("libpq-fe.h", {"/usr/include", "/usr/local/include", "/usr/include/postgresql", "/usr/local/include/postgresql"}) if not p then p = find_path("libpq-fe.h", {"/usr/include/pgsql", "/usr/local/include/pgsql"}) if not p then @@ -561,6 +542,16 @@ function setIncludes(target) if l then target:add({links = "dl"}) end + l = find_package("uuid") + if not l then + l = find_package("ossp-uuid") + if not l then + raise('uuid library not found') + end + target:add({links = "ossp-uuid"}) + else + target:add({links = "uuid"}) + end target:add({linkdirs = "/usr/local/lib"}) end