ithewei 5 سال پیش
والد
کامیت
f74b9af76d
6فایلهای تغییر یافته به همراه450 افزوده شده و 0 حذف شده
  1. 33 0
      CMake/utils.cmake
  2. 65 0
      CMake/vars.cmake
  3. 162 0
      CMakeLists.txt
  4. 64 0
      examples/CMakeLists.txt
  5. 64 0
      hconfig.h.in
  6. 62 0
      unittest/CMakeLists.txt

+ 33 - 0
CMake/utils.cmake

@@ -0,0 +1,33 @@
+include(CheckIncludeFiles)
+macro(check_header header)
+    string(TOUPPER ${header} str1)
+    string(REGEX REPLACE "[/.]" "_" str2 ${str1})
+    set(str3 HAVE_${str2})
+    check_include_files(${header} ${str3})
+    if (${str3})
+        set(${str3} 1)
+    else()
+        set(${str3} 0)
+    endif()
+endmacro()
+
+include(CheckSymbolExists)
+macro(check_function function header)
+    string(TOUPPER ${function} str1)
+    set(str2 HAVE_${str1})
+    check_symbol_exists(${function} ${header} ${str2})
+    if (${str2})
+        set(${str2} 1)
+    else()
+        set(${str2} 0)
+    endif()
+endmacro()
+
+macro(list_source_directories srcs)
+    unset(tmp)
+    foreach(dir ${ARGN})
+        aux_source_directory(${dir} tmp)
+    endforeach()
+    set(${srcs} ${tmp})
+endmacro()
+

+ 65 - 0
CMake/vars.cmake

@@ -0,0 +1,65 @@
+# see Makefile.vars
+
+set(BASE_HEADERS
+    base/hplatform.h
+    base/hdef.h
+    base/hversion.h
+    base/hbase.h
+    base/hsysinfo.h
+    base/hproc.h
+    base/hmath.h
+    base/htime.h
+    base/herr.h
+    base/hlog.h
+    base/hmutex.h
+    base/hthread.h
+    base/hsocket.h
+    base/hbuf.h
+    base/hurl.h
+    base/hgui.h
+    base/ssl_ctx.h
+    base/hstring.h
+    base/hvar.h
+    base/hobj.h
+    base/hfile.h
+    base/hdir.h
+    base/hscope.h
+    base/hthreadpool.h
+    base/hobjectpool.h
+    base/ifconfig.h
+)
+
+set(UTILS_HEADERS
+    utils/base64.h
+    utils/md5.h
+    utils/json.hpp
+    utils/singleton.h
+    utils/iniparser.h
+    utils/hendian.h
+    utils/hmain.h
+)
+
+set(EVENT_HEADERS
+    event/hloop.h
+    event/nlog.h
+    event/nmap.h
+)
+
+set(PROTOCOL_HEADERS
+    protocol/icmp.h
+    protocol/dns.h
+    protocol/ftp.h
+    protocol/smtp.h
+)
+
+set(HTTP_HEADERS
+    http/httpdef.h
+    http/http2def.h
+    http/grpcdef.h
+    http/http_content.h
+    http/HttpMessage.h
+)
+
+set(HTTP_CLIENT_HEADERS http/client/http_client.h)
+set(HTTP_SERVER_HEADERS http/server/HttpService.h http/server/HttpServer.h)
+set(CONSUL_HEADERS consul/consul.h)

+ 162 - 0
CMakeLists.txt

@@ -0,0 +1,162 @@
+cmake_minimum_required(VERSION 3.0)
+
+project(hv VERSION 1.20)
+
+# TARGET_TYPE = SHARED or STATIC
+set(TARGET_TYPE SHARED)
+
+# see config.mk
+option(WITH_PROTOCOL "compile protocol" ON)
+
+option(WITH_HTTP "compile http" ON)
+option(WITH_HTTP_SERVER "compile http/server" ON)
+option(WITH_HTTP_CLIENT "compile http/client" ON)
+
+# WITH_CONSUL need WITH_HTTP_CLIENT=ON
+option(WITH_CONSUL "compile consul" OFF)
+
+option(ENABLE_IPV6 "ipv6" OFF)
+option(ENABLE_UDS "Unix Domain Socket" OFF)
+option(ENABLE_WINDUMP "Windows MiniDumpWriteDump" OFF)
+option(USE_MULTIMAP "MultiMap" OFF)
+
+option(WITH_CURL "with curl library" OFF)
+option(WITH_NGHTTP2 "with nghttp2 library" OFF)
+option(WITH_OPENSSL "with openssl library" OFF)
+
+set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
+include(utils)
+include(vars)
+
+# see configure
+# Checks for header files
+check_header("stdint.h")
+check_header("stdbool.h")
+check_header("sys/types.h")
+check_header("sys/stat.h")
+check_header("sys/time.h")
+check_header("fcntl.h")
+check_header("pthread.h")
+
+# Checks for functions
+set(CMAKE_REQUIRED_LIBRARIES "pthread")
+check_function("gettid" "unistd.h")
+check_function("strlcpy" "string.h")
+check_function("strlcat" "string.h")
+check_function("clock_gettime" "time.h")
+check_function("gettimeofday" "sys/time.h")
+check_function("pthread_spin_lock" "pthread.h")
+check_function("pthread_mutex_timedlock" "pthread.h")
+check_function("sem_timedwait" "semaphore.h")
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/hconfig.h.in ${CMAKE_CURRENT_SOURCE_DIR}/hconfig.h)
+
+# see Makefile.in
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_C_STANDARD_REQUIRED True)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED True)
+
+set(INCDIR include)
+set(SRCDIR src)
+set(LIBDIR lib)
+set(BINDIR bin)
+set(LIBRARY_OUTPUT_PATH ${LIBDIR})
+set(EXECUTABLE_OUTPUT_PATH ${BINDIR})
+
+set(INCDIRS . include 3rd/include)
+set(LIBDIRS . lib 3rd/lib)
+include_directories(${INCDIRS} ${SRCDIR})
+link_directories(${LIBDIRS})
+
+if(ENABLE_IPV6)
+    add_definitions(-DENABLE_IPV6)
+endif()
+
+if(ENABLE_UDS)
+    add_definitions(-DENABLE_UDS)
+endif()
+
+if(USE_MULTIMAP)
+    add_definitions(-DUSE_MULTIMAP)
+endif()
+
+if(WITH_CURL)
+    add_definitions(-DWITH_CURL)
+    set(LIBS ${LIBS} curl)
+    if(WIN32)
+        set(LIBS ${LIBS} wldap32 advapi32 crypt32)
+    endif()
+endif()
+
+if(WITH_NGHTTP2)
+    add_definitions(-DWITH_NGHTTP2)
+    set(LIBS ${LIBS} nghttp2)
+endif()
+
+if(WITH_OPENSSL)
+    add_definitions(-DWITH_OPENSSL)
+    set(LIBS ${LIBS} ssl crypto)
+endif()
+
+if(WIN32)
+    add_definitions(-D_WIN32_WINNT=0x0600)
+    set(LIBS ${LIBS} winmm iphlpapi ws2_32)
+    if(ENABLE_WINDUMP)
+        add_definitions(-DENABLE_WINDUMP)
+        set(LIBS ${LIBS} dbghelp)
+    endif()
+endif()
+
+if(UNIX)
+    set(LIBS ${LIBS} pthread m dl)
+    if(CMAKE_COMPILER_IS_GNUCC)
+        set(LIBS ${LIBS} rt)
+    endif()
+endif()
+
+if(ANDROID)
+    set(LIBS ${LIBS} log)
+endif()
+
+# see Makefile
+set(ALL_SRCDIRS . base utils event protocol http http/client http/server consul examples)
+set(LIBHV_SRCDIRS . base utils event)
+set(LIBHV_HEADERS hv.h hconfig.h)
+set(LIBHV_HEADERS ${LIBHV_HEADERS} ${BASE_HEADERS} ${UTILS_HEADERS} ${EVENT_HEADERS})
+
+if(WITH_PROTOCOL)
+    set(LIBHV_HEADERS ${LIBHV_HEADERS} ${PROTOCOL_HEADERS})
+    set(LIBHV_SRCDIRS ${LIBHV_SRCDIRS} protocol)
+endif()
+
+if(WITH_HTTP)
+    set(LIBHV_HEADERS ${LIBHV_HEADERS} ${HTTP_HEADERS})
+    set(LIBHV_SRCDIRS ${LIBHV_SRCDIRS} http)
+    if(WITH_HTTP_SERVER)
+        set(LIBHV_HEADERS ${LIBHV_HEADERS} ${HTTP_SERVER_HEADERS})
+        set(LIBHV_SRCDIRS ${LIBHV_SRCDIRS} http/server)
+    endif()
+    if(WITH_HTTP_CLIENT)
+        set(LIBHV_HEADERS ${LIBHV_HEADERS} ${HTTP_CLIENT_HEADERS})
+        set(LIBHV_SRCDIRS ${LIBHV_SRCDIRS} http/client)
+        if(WITH_CONSUL)
+            set(LIBHV_HEADERS ${LIBHV_HEADERS} ${CONSUL_HEADERS})
+            set(LIBHV_SRCDIRS ${LIBHV_SRCDIRS} consul)
+        endif()
+    endif()
+endif()
+
+list_source_directories(LIBHV_SRCS ${LIBHV_SRCDIRS})
+add_library(hv ${TARGET_TYPE} ${LIBHV_SRCS})
+target_include_directories(hv PRIVATE ${LIBHV_SRCDIRS})
+target_link_libraries(hv ${LIBS})
+
+install(FILES ${LIBHV_HEADERS} DESTINATION include/hv)
+install(TARGETS hv)
+
+add_subdirectory(unittest)
+add_subdirectory(examples)
+
+add_custom_target(libhv   DEPENDS hv)
+add_custom_target(default DEPENDS hv)

+ 64 - 0
examples/CMakeLists.txt

@@ -0,0 +1,64 @@
+aux_source_directory(../base        BASE_SRCS)
+aux_source_directory(../utils       UTILS_SRCS)
+aux_source_directory(../event       EVENT_SRCS)
+aux_source_directory(../http        HTTP_SRCS)
+aux_source_directory(../http/client HTTP_CLIENT_SRCS)
+aux_source_directory(../http/server HTTP_SERVER_SRCS)
+aux_source_directory(../consul      CONSUL_SRCS)
+aux_source_directory(httpd          HTTPD_SRCS)
+
+add_executable(test hmain_test.cpp ${BASE_SRCS} ${UTILS_SRCS})
+target_include_directories(test PRIVATE .. ../base ../utils)
+target_link_libraries(test ${LIBS})
+
+add_executable(timer htimer_test.c ${BASE_SRCS} ${EVENT_SRCS})
+target_include_directories(timer PRIVATE .. ../base ../event)
+target_link_libraries(timer ${LIBS})
+
+add_executable(loop hloop_test.c ${BASE_SRCS} ${EVENT_SRCS})
+target_include_directories(loop PRIVATE .. ../base ../event)
+target_link_libraries(loop ${LIBS})
+
+add_executable(tcp tcp.c ${BASE_SRCS} ${EVENT_SRCS})
+target_include_directories(tcp PRIVATE .. ../base ../event)
+target_link_libraries(tcp ${LIBS})
+
+add_executable(udp udp.c ${BASE_SRCS} ${EVENT_SRCS})
+target_include_directories(udp PRIVATE .. ../base ../event)
+target_link_libraries(udp ${LIBS})
+
+add_executable(nc nc.c ${BASE_SRCS} ${EVENT_SRCS})
+target_include_directories(nc PRIVATE .. ../base ../event)
+target_link_libraries(nc ${LIBS})
+
+add_executable(nmap nmap.cpp ${BASE_SRCS} ${EVENT_SRCS})
+target_compile_definitions(nmap PRIVATE -DPRINT_DEBUG)
+target_include_directories(nmap PRIVATE .. ../base ../event)
+target_link_libraries(nmap ${LIBS})
+
+add_executable(httpd ${BASE_SRCS} ${UTILS_SRCS} ${EVENT_SRCS} ${HTTP_SRCS} ${HTTP_SERVER_SRCS} ${HTTPD_SRCS})
+target_include_directories(httpd PRIVATE .. ../base ../utils ../event ../http ../http/server httpd)
+target_link_libraries(httpd ${LIBS})
+
+add_executable(curl curl.cpp ${BASE_SRCS} ${UTILS_SRCS} ${HTTP_SRCS} ${HTTP_CLIENT_SRCS})
+# target_compile_definitions(curl PRIVATE -DWITH_CURL -DCURL_STATICLIB)
+target_include_directories(curl PRIVATE .. ../base ../utils ../http ../http/client)
+target_link_libraries(curl ${LIBS})
+
+add_executable(consul_cli consul_cli.cpp ${BASE_SRCS} ${UTILS_SRCS} ${HTTP_SRCS} ${HTTP_CLIENT_SRCS} ${CONSUL_SRCS})
+target_compile_definitions(consul_cli PRIVATE -DPRINT_DEBUG)
+target_include_directories(consul_cli PRIVATE .. ../base ../utils ../http ../http/client ../consul)
+target_link_libraries(consul_cli ${LIBS})
+
+add_custom_target(examples DEPENDS
+    test
+    timer
+    loop
+    tcp
+    udp
+    nc
+    nmap
+    httpd
+    curl
+    consul_cli
+)

+ 64 - 0
hconfig.h.in

@@ -0,0 +1,64 @@
+#ifndef HV_CONFIG_H_
+#define HV_CONFIG_H_
+
+#ifndef HAVE_STDINT_H
+#define HAVE_STDINT_H @HAVE_STDINT_H@
+#endif
+
+#ifndef HAVE_STDBOOL_H
+#define HAVE_STDBOOL_H @HAVE_STDBOOL_H@
+#endif
+
+#ifndef HAVE_SYS_TYPES_H
+#define HAVE_SYS_TYPES_H @HAVE_SYS_TYPES_H@
+#endif
+
+#ifndef HAVE_SYS_STAT_H
+#define HAVE_SYS_STAT_H @HAVE_SYS_STAT_H@
+#endif
+
+#ifndef HAVE_SYS_TIME_H
+#define HAVE_SYS_TIME_H @HAVE_SYS_TIME_H@
+#endif
+
+#ifndef HAVE_FCNTL_H
+#define HAVE_FCNTL_H @HAVE_FCNTL_H@
+#endif
+
+#ifndef HAVE_PTHREAD_H
+#define HAVE_PTHREAD_H @HAVE_PTHREAD_H@
+#endif
+
+#ifndef HAVE_GETTID
+#define HAVE_GETTID @HAVE_GETTID@
+#endif
+
+#ifndef HAVE_STRLCPY
+#define HAVE_STRLCPY @HAVE_STRLCPY@
+#endif
+
+#ifndef HAVE_STRLCAT
+#define HAVE_STRLCAT @HAVE_STRLCAT@
+#endif
+
+#ifndef HAVE_CLOCK_GETTIME
+#define HAVE_CLOCK_GETTIME @HAVE_CLOCK_GETTIME@
+#endif
+
+#ifndef HAVE_GETTIMEOFDAY
+#define HAVE_GETTIMEOFDAY @HAVE_GETTIMEOFDAY@
+#endif
+
+#ifndef HAVE_PTHREAD_SPIN_LOCK
+#define HAVE_PTHREAD_SPIN_LOCK @HAVE_PTHREAD_SPIN_LOCK@
+#endif
+
+#ifndef HAVE_PTHREAD_MUTEX_TIMEDLOCK
+#define HAVE_PTHREAD_MUTEX_TIMEDLOCK @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+#endif
+
+#ifndef HAVE_SEM_TIMEDWAIT
+#define HAVE_SEM_TIMEDWAIT @HAVE_SEM_TIMEDWAIT@
+#endif
+
+#endif // HV_CONFIG_H_

+ 62 - 0
unittest/CMakeLists.txt

@@ -0,0 +1,62 @@
+add_executable(hmutex_test hmutex_test.c ../base/htime.c)
+target_include_directories(hmutex_test PRIVATE .. ../base)
+target_link_libraries(hmutex_test -lpthread)
+
+add_executable(connect_test connect_test.c ../base/hsocket.c ../base/htime.c)
+target_include_directories(connect_test PRIVATE .. ../base)
+
+add_executable(socketpair_test socketpair_test.c ../base/hsocket.c)
+target_include_directories(socketpair_test PRIVATE .. ../base)
+
+add_executable(defer_test defer_test.cpp)
+target_include_directories(defer_test PRIVATE .. ../base)
+
+add_executable(hstring_test hstring_test.cpp ../base/hstring.cpp ../base/hbase.c)
+target_include_directories(hstring_test PRIVATE .. ../base)
+
+add_executable(threadpool_test threadpool_test.cpp)
+target_include_directories(threadpool_test PRIVATE .. ../base)
+target_link_libraries(threadpool_test -lpthread)
+
+add_executable(objectpool_test objectpool_test.cpp)
+target_include_directories(objectpool_test PRIVATE .. ../base)
+target_link_libraries(objectpool_test -lpthread)
+
+add_executable(ls listdir_test.cpp ../base/hdir.cpp ../base/hbase.c)
+target_include_directories(ls PRIVATE .. ../base)
+
+add_executable(ifconfig ifconfig_test.cpp ../base/ifconfig.cpp)
+target_include_directories(ifconfig PRIVATE .. ../base)
+
+add_executable(nslookup nslookup_test.c ../protocol/dns.c)
+target_include_directories(nslookup PRIVATE .. ../base ../protocol)
+
+add_executable(ping ping_test.c ../protocol/icmp.c ../base/hsocket.c ../base/htime.c)
+target_compile_definitions(ping PRIVATE -DPRINT_DEBUG)
+target_include_directories(ping PRIVATE .. ../base ../protocol)
+
+add_executable(ftp ftp_test.c ../protocol/ftp.c ../base/hsocket.c)
+target_include_directories(ftp PRIVATE .. ../base ../protocol)
+
+add_executable(sendmail sendmail_test.c ../protocol/smtp.c ../base/hsocket.c ../utils/base64.c)
+target_include_directories(sendmail PRIVATE .. ../base ../utils ../protocol)
+
+if(UNIX)
+add_executable(webbench webbench.c)
+endif()
+
+add_custom_target(unittest DEPENDS
+    hmutex_test
+    connect_test
+    socketpair_test
+    defer_test
+    hstring_test
+    threadpool_test
+    objectpool_test
+    ls
+    ifconfig
+    nslookup
+    ping
+    ftp
+    sendmail
+)